python使用SMTP发送电子邮件

                                         python使用SMTP发送电子邮件

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

一、发送纯文本邮件

注:以qq邮箱发送邮件为例,使用QQ邮箱发送邮件时,须提前开通SMTP服务,密码输入QQ邮箱的授权码。

使用到email模块中MIMEText构造文本邮件对象,在参数中传入。第一个参数是邮件正文,第二个参数是MIME的subtype,传入’plain’表示纯文本,最终的MIME就是’text/plain’,最后一定要用utf-8编码保证多语言兼容性。

使用smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。模块中的sendmail实例方法,用于执行邮件发送的工作。它需要三个参数 –

sender – 具有发件人地址的字符串。

receiver – 字符串列表,每个收件人一个。

message – 作为格式如在各种RFC中指定的字符串。

示例代码:

from email.mime.text import MIMEText

from email.header import Header

from smtplib import SMTP_SSL

# 发送纯文本格式邮件

def send_email_text():

    # 邮件服务信息:邮件服务+发件人QQ邮箱信息+发件人邮箱+收件人邮箱

    smtp_server = ‘smtp.qq.com’

    sender_qq = ‘296****177@qq.com’

    password = ‘wsvh********dcjg’

    sender_email = ‘296****177@qq.com’

    receiver = ‘130****7364@163.com’

    # receiver = [‘1@123.com’,’2@123.com’,’3@123.com’]  # 给多人发送邮件,收件人传入列表中,以逗号隔开

    # 邮件内容:正文+标题

    mail_content = ‘您好,这是一封使用python登录QQ邮箱发送文本邮件的测试’

    mail_title = ‘文本格式邮件测试’

    # 发送邮件:连接smtp服务+登录账号+组装邮件

    smtp = SMTP_SSL(smtp_server)  # 连接服务器

    smtp.ehlo(smtp_server) 

    smtp.login(sender_qq, password)  # 登录账号

    msg = MIMEText(mail_content, ‘plain’, ‘utf-8’)  # 指定邮件正文为纯文本格式,以utf-8编码

msg[‘Subject’] = Header(mail_title, ‘utf-8’)  # 邮件主题中包含中文,需要通过Header对象进行编码

    msg[‘From’] = sender_email

    msg[‘To’] = receiver

    smtp.sendmail(sender_email, receiver, msg.as_string())

    smtp.close()

二、发送html格式邮件

发送html格式邮件,在构造MIMEText对象时,把HTML字符串传进去,再把第二个参数由plain变为html就可以了。

示例代码:

from email.mime.text import MIMEText

from email.header import Header

from smtplib import SMTP_SSL

# 使用Python发送HTML格式的邮件

    def send_email_html(self):

        # 邮件服务信息:邮件服务+发件人QQ邮箱信息+发件人邮箱+收件人邮箱

        smtp_server = ‘smtp.qq.com’

        sender_qq = ‘296****177@qq.com’

        password = ‘wsvh********dcjg’

        sender_email = ‘296****177@qq.com’

        receiver = ‘130****7364@163.com’

        # receiver = [‘1@123.com’,’2@123.com’,’3@123.com’]  # 给多人发送邮件

        # 邮件内容:正文+标题

        # 传入Html格式的邮件内容

mail_content = ‘<html><body><h2>您好</h2>,<p>这是一封使用python登录QQ邮箱发送文本邮件的测试</p></body></html>’

        mail_title = ‘发送网页格式邮件测试’

        # 登录smtp服务器并发送邮件

        smtp = SMTP_SSL(smtp_server)

        smtp.ehlo(smtp_server)  # 由客户端发送,指示 ESMTP 会话开始

        smtp.login(sender_qq, password)

        msg = MIMEText(mail_content, ‘html’, ‘utf-8’)# 构建邮件对象,指定为html格式,以utf-8编码

        msg[‘Subject’] = Header(mail_title, ‘utf-8’)  # 邮件主题中包含中文,需要通过Header对对象进行编码

        msg[‘From’] = sender_email

        msg[‘To’] = receiver

        smtp.sendmail(sender_email, receiver, msg.as_string())

        smtp.close()

三、发送混合格式(带附件)的邮件

发送带附件格式的邮件,使用到email模块下multipart中的MIMEMultipart方法,构建混合格式邮件对象,构造附件变量对象,再加载附件。

  # 使用Python发送带附件的邮件

    def send_email_mixture(self, report_file):

        # 邮件服务信息:邮件服务+发件人QQ邮箱信息+发件人邮箱+收件人邮箱

        smtp_server = ‘smtp.qq.com’

        sender_qq = ‘296****177@qq.com’

        password = ‘wsv********lndcjg’

        sender_email = ‘296****177@qq.com’

        receiver = ‘130****7364@163.com’

        # receiver = [‘1@123.com’,’2@123.com’,’3@123.com’]  # 给多人发送邮件

        # 邮件内容:正文+标题

        # 传入Html格式的邮件内容

        mail_content = ‘<html><body><h2>您好</h2>,<p>这是一封使用python登录QQ邮箱发送网页格式带附件邮件的测试</p></body></html>’

        mail_title = ‘发送网页格式带附件的邮件测试’

        # 登录smtp服务器并发送邮件

        smtp = SMTP_SSL(smtp_server)

        smtp.ehlo(smtp_server)  # 由客户端发送,指示 ESMTP 会话开始

        smtp.login(sender_qq, password)

       msg = MIMEMultipart()  # 构建混合格式邮件对象

        msg.attach(MIMEText(mail_content, ‘html’, ‘utf-8’))  # 邮件正文

        msg[‘Subject’] = Header(mail_title, ‘utf-8’)  # 邮件主题中包含中文,需要通过Header对对象进行编码

        msg[‘From’] = sender_email

        msg[‘To’] = receiver

        # 加载附件

       att = MIMEText(open(report_file, ‘rb’).read(), ‘base64’, ‘utf-8’)  # 打开文件并以二进制方式读取,以base64位加密,utf-8编码保存作为附件

        att[‘Content-Type’] = ‘application/octet-stream’  # 声明附件内容类型

        att[‘Content-Disposition’] = ‘attachment; filename=”report.html”‘  # 声明附件描述及附件名称

        msg.attach(att)

        smtp.sendmail(sender_email, receiver, msg.as_string())

        smtp.close()

四、发送HTML文本中带图片的邮件

将图片嵌于邮件中,需要使用到email中的image模块的MIMEImage方法,先构建混合邮件对象并指定指定subtype是alternative,同时兼容HTML和Plain格式。使用MIMEImage方法实例化图片对象,并加载到邮件中。邮件正文HTML内容中添加图片,在HTML中通过引用src=”cid:0″就可以把附件作为图片嵌入了。如果有多个图片,给它们依次编号,然后引用不同的cid:x即可。

示例代码:

from email.mime.multipart import MIMEMultipart

from email.mime.image import MIMEImage

from smtplib import SMTP_SSL

from config.cif import *

# 发送HTML文本中带图片的邮件

    def send_email_html_img(self, data_file):

        # 邮件服务信息:邮件服务+发件人QQ邮箱信息+发件人邮箱+收件人邮箱

        smtp_server = ‘smtp.qq.com’

        sender_qq = ‘296****177@qq.com’

        password = ‘wsv********lndcjg’

        sender_email = ‘296****177@qq.com’

        receiver = ‘130****7364@163.com’

        # receiver = [‘1@123.com’,’2@123.com’,’3@123.com’]  # 给多人发送邮件

        # 邮件内容:正文+标题

        # 传入Html格式的邮件内容

        mail_content = ”’

                    <html><body>

                    <h2>您好</h2>,

                    <p>这是一封使用python登录QQ邮箱发送网页格式带图片邮件的测试</p>,

                    <p>图片演示:</p>,

<p><img src=”cid:01″></p>

                    </body></html>

                    ”’

        mail_title = ‘发送网页格式带图片邮件测试’

        # 登录smtp服务器并发送邮件

        smtp = SMTP_SSL(smtp_server)

        smtp.ehlo(smtp_server)  # 由客户端发送,指示 ESMTP 会话开始

        smtp.login(sender_qq, password)

        msg = MIMEMultipart(‘alternative’)  # 同时支持HTML和Plain格式

        msg.attach(MIMEText(mail_content, ‘html’, ‘utf-8’))  # 构建邮件对象,指定为html格式,以utf-8编码

        msg[‘Subject’] = Header(mail_title, ‘utf-8’)  # 邮件主题中包含中文,需要通过Header对对象进行编码

        msg[‘From’] = sender_email

        msg[‘To’] = receiver

        # 指定图片

      img = MIMEImage(open(data_file, ‘rb’).read())

        # 定义图片ID

       img.add_header(‘Content-ID’, ‘0’)

       msg.attach(img)

        smtp.sendmail(sender_email, receiver, msg.as_string())

        smtp.close()

参考:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432005226355aadb8d4b2f3f42f6b1d6f2c5bd8d5263000

https://www.yiibai.com/python/python_sending_email.html

https://www.jianshu.com/p/abb2d6e91c1f

    原文作者:小娟_bb93
    原文地址: https://www.jianshu.com/p/954168409be7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞