如果你曾设置了 Thunderbird、Outlook 或其他程序,连接到你的电子邮件账户,
你可能熟悉配置 SMTP 服务器和端口。这些设置因电子邮件提供商而不同,但在网上搜索“<你的提供商> SMTP 设置”,应该能找到相应的服务器和端口。
SMTP 服务器的域名通常是电子邮件提供商的域名,前面加上 SMTP。例如, Gmail 的 SMTP 服务器是 smtp.gmail.com。表 16-1 列出了一些常见的电子邮件提供商及其
SMTP 服务器(端口是一个整数值,几乎总是 587,该端口由命令加密标准 TLS 使用)。
得到电子邮件提供商的域名和端口信息后,调用 smtplib.SMTP()创建一个 SMTP
对象,传入域名作为一个字符串参数,传入端口作为整数参数。SMTP 对象表示与 SMTP 邮件服务器的连接,它有一些发送电子邮件的方法。例如,下面的调用创建了一个 SMTP 对象,连接到Gmail:
>>> smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
>>> type(smtpObj)
<class 'smtplib.SMTP'>
输入 type(smtpObj)表明,smtpObj 中保存了一个 SMTP 对象。你需要这个 SMTP对象,以便调用它的方法,登录并发送电子邮件。如果 smtplib.SMTP()调用不成功,你的
SMTP 服务器可能不支持 TLS 端口 587。在这种情况下,你需要利用 smtplib.SMTP_SSL()和 465 端口,来创建SMTP 对象。
>>> smtpObj = smtplib.SMTP_SSL('smtp.gmail.com', 465)
意 如果没有连接到因特网,Python 将抛出 socket.gaierror: [Errno 11004] getaddrinfo failed 或类似的异常。
对于你的程序,TLS 和 SSL 之间的区别并不重要。只需要知道你的 SMTP 服务器使用哪种加密标准,这样就知道如何连接它。在接下来的所有交互式环境示例中, smtpObj
变量将包含smtplib.SMTP()或smtplib.SMTP_SSL()函数返回的SMTP 对象。