SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知[参考文献5]。Python中的smtplib模块支持创建SMTP 客户端会话对象,能将邮件发送到互联网上任何带有SMTP或ESMTP监听程序的计算机。本文学习并测试参考文献1中的发送邮件示例代码,测试使用smtplib模块发送简单的电子邮件。
  smtplib模块支持普通连接和加密连接SMTP服务器,前者使用SMTP类,后者使用SMTP_SSL类。测试代码主要使用的函数如下表所示:

序号

类或函数

说明

1

MIMEText

本类用于创建主类型为 text 的 MIME 对象,测试代码中用于保存邮件主体内容,同时保存邮件的其它信息,如发件人、收件人、邮件标题等

2

MIMEText .as_string

所属基类Message中的函数,以展平的字符串形式返回整个消息对象。

3

SMTP_SSL

加密连接SMTP服务器,默认端口为465

4

SMTP_SSL.sendmail

发送邮件函数,最重要的参数包括发件人地址,收件人地址及消息字符串。

5

SMTP_SSL.login

登录到需要认证的SMTP服务器,输入参数是用户名和授权码。

6

SMTP_SSL. quit

终结 SMTP 会话并关闭连接

  测试代码主要来自参考文献1,在这里主要是列出程序代码及程序执行结果:

# coding=utf-8

import smtplib
from email.mime.text import MIMEText

sender='XXXXXXXXX@qq.com'
password='NNNNNNNNNNN'
to='YYYYYYYYYY@qq.com'

def mail():
    ret=True
    try:
        msg=MIMEText('smtp发送邮件测试','plain','utf-8')
        msg['From']=sender
        msg['To']=to
        msg['Subject']='通过SMTP协议发送邮件测试'

        server=smtplib.SMTP_SSL('smtp.qq.com')
        server.login(sender,password)

        server.sendmail(sender,to,msg.as_string())
        print(msg.as_string())
        server.quit()

    except Exception as e:
        ret=False
        print(e)
    return ret
                     

if mail():
    print('邮件发送成功')
else:
    print('邮件发送失败')

Python smtplib读取邮件 python中smtplib_smtplib

  除了参考文献1中的测试代码,参考文献2中也有类似的测试代码,唯一的区别是参考文献2中的SMTP示例连接SMTP服务器后,没有调用login函数登录服务器,而是直接调用sendmail函数发送邮件,此时会发送失败,并报下面的错误。参考文献1中给出的解释是使用126或QQ等免费邮箱的话,发送Email前必须先登录到自己的Email,才能利用Email发送邮件。事实也确实如此。

Python smtplib读取邮件 python中smtplib_发送邮件_02


  本文学习了使用smtplib模块发送简单邮件,后续还会继续学习参考文献1中的发送带附件的电子邮件。