【问题标题】:How Do I Send Emails Using Python 3.4 With GMail?如何使用 Python 3.4 和 GMail 发送电子邮件?
【发布时间】:2016-03-22 08:00:27
【问题描述】:

我一直在尝试一些代码,例如:

import smtplib

def sendemail(from_addr, to_addr_list, cc_addr_list,
              subject, message,
              login, password,
              smtpserver='smtp.gmail.com:587'):
    header  = 'From: %s\n' % from_addr
    header += 'To: %s\n' % ','.join(to_addr_list)
    header += 'Cc: %s\n' % ','.join(cc_addr_list)
    header += 'Subject: %s\n\n' % subject
    message = header + message

    server = smtplib.SMTP(smtpserver)
    server.starttls()
    server.login(login,password)
    problems = server.sendmail(from_addr, to_addr_list, message)
    server.quit()

sendemail(from_addr    = 'python@RC.net', 
        to_addr_list = ['example@gmail.com'],
        cc_addr_list = ['example@gmail.com'], 
        subject      = 'Howdy', 
        message      = 'Hello!', 
        login        = 'example@gmail.com', 
        password     = 'XXXX')

除了实际的密码和详细信息。

它带来了这个错误:

Traceback (most recent call last):
  File "User/Python/Email.py", line 27, in <module>
    password     = 'lollol69')
  File "User/Python/Email.py", line 15, in sendemail
    server = smtplib.SMTP(smtpserver)
  File "C:\Python34\lib\smtplib.py", line 242, in __init__
    (code, msg) = self.connect(host, port)
  File "C:\Python34\lib\smtplib.py", line 321, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "C:\Python34\lib\smtplib.py", line 292, in _get_socket
    self.source_address)
  File "C:\Python34\lib\socket.py", line 509, in create_connection
    raise err
  File "C:\Python34\lib\socket.py", line 500, in create_connection
    sock.connect(sa)
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

理想情况下,我可以知道代码有什么问题以及如何解决这个问题。如果它完全错误,那么非常感谢 Gmail 的一些工作代码。

谢谢!

【问题讨论】:

    标签: python email


    【解决方案1】:

    您必须拆分 smpt 服务器地址和端口,并将它们用作 smtplib.SMTP('smtp.gmail.com', 587) 的单独参数,请参阅 https://docs.python.org/3.4/library/smtplib.html

    
    import smtplib
    
    def sendemail(from_addr, to_addr_list, cc_addr_list,
                  subject, message,
                  login, password,
                  smtpserver='smtp.gmail.com', smtpport=587):  # split smtpserver and -port
        header  = 'From: %s\n' % from_addr
        header += 'To: %s\n' % ','.join(to_addr_list)
        header += 'Cc: %s\n' % ','.join(cc_addr_list)
        header += 'Subject: %s\n\n' % subject
        message = header + message
    
        server = smtplib.SMTP(smtpserver, smtpport)  # use both smtpserver  and -port 
        server.starttls()
        server.login(login,password)
        problems = server.sendmail(from_addr, to_addr_list, message)
        server.quit()
    
    sendemail(from_addr    = 'python@RC.net', 
            to_addr_list = ['example@gmail.com'],
            cc_addr_list = ['example@gmail.com'], 
            subject      = 'Howdy', 
            message      = 'Hello!', 
            login        = 'example@gmail.com', 
            password     = 'XXXX')
    

    顺便说一句:更改您在堆栈跟踪中发布的 gmail 密码

    【讨论】:

    • 这不是我的实际密码 :) 感谢您的帮助,现在就试试这个。
    猜你喜欢
    • 2020-07-12
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 2015-10-24
    相关资源
    最近更新 更多