python发送邮件

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

Python对SMTP支持有smtplibemail两个模块,email负责构造邮件,smtplib负责发送邮件。

发送纯文本文件

import smtplib
from email.mime.text import MIMEText

mail_user, mail_pass = "xxxxxx@qq.com", 'xxxxxxxxxxxx'
receivers = ['xxx@xxxx.com', 'xxxx@xxxx.com']

# 构造MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype,传入'plain'表示纯文本,最终的MIME就是'text/plain',最后一定要用utf-8编码保证多语言兼容性。
message = MIMEText("邮件内容", 'plain', 'utf-8')

try:
    smtp = smtplib.SMTP()  # 创建一个SMTP实例
    smtp.connect('smtp.qq.com', 25)  # 连接到stmp服务器,默认端口为25
    smtp.login(mail_user, mail_pass)  # 设置登录用户名和用户密码
    smtp.sendmail(mail_user, receivers, message.as_string())  # 发送邮件,receivers是一个列表,可以同时给对多个邮箱发送邮件
    print("邮件发送成功")
except smtplib.SMTPException:
    print("邮件发送失败")

发送HTML

无论是纯文本内容还是html或者二进制内容,都是通过email这个库来实现的

msg = MIMEText('<html><body><h1>Hello</h1>' +
    '<p>send by <a href="http://www.python.org">Python</a>...</p>' +
    '</body></html>', 'html', 'utf-8') # 设置第二个参数为html

发送附件

1、实例化一个MIMEMultipart对象

2、attach一个MIMEText对象作为邮件正文

3、attach MIMEBase对象作为附件

msg = MIMEMultipart()
    msg.attach(MIMEText("附件", 'plain', 'utf-8'))
    with open('emailDemo.py', 'rb') as fp:
        # # 设置附件的MIME和文件名
        attach = MIMEBase('text', 'plain', filename='emailDemo.py')
        # 读入文件
        attach.set_payload(fp.read())
        # 加上必要的头信息:
        attach.add_header('Content-Disposition', 'attachment', filename='emailDemo.py')
        attach.add_header('Content-ID', '<0>')
        attach.add_header('X-Attachment-Id', '0')
        # # 用Base64编码
        encoders.encode_base64(attach)
        msg.attach(attach)