[Python3]SMTP发送邮件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python3]SMTP发送邮件相关的知识,希望对你有一定的参考价值。
概述
在本文中,主要介绍使用smtplib进行文本格式、HTML格式和带附件的邮件发送处理。
-
导入smtplib模块
import smtplib
-
关键函数说明
# 创建smtp对象 smtp = smtplib.SMTP([host [, port [, localhost]]] ) # 参数说明 # host: smtp服务地址,例如126邮箱的是:smtp.126.com # port: smtp服务端口 # localhost: 如果你的smtp服务在本机,则只需指定localhost即可 # 发送邮件函数 SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]) # 参数说明 # from_addr: 邮件发送地址 # to_addrs: 邮件接收地址列表 # msg: 邮件内容 # mail_options, rcpt_options 可选参数,暂时不需要了解
文本邮件示例
下面演示如何通过126邮箱发送纯文本邮件。
# -*- coding:utf-8 -*- __author__ = ‘谷白‘ import smtplib from email.mime.text import MIMEText from email.header import Header if __name__ == "__main__": print("发送文本邮件示例") # 邮件发送者 sender = "[email protected]" # 邮件接收地址列表 # 请将xxx改为你的qq邮箱名或整个改为你的目标接收邮箱地址 receivers = "[email protected]" # 发送内容构建 # text标识发送内容为文本格式 msg = MIMEText("博客园:谷白", "plain", "utf-8") msg["From"] = "[email protected]" msg["To"] = receivers # 构建邮件标题 msg["Subject"] = Header("Python3_Test", "utf-8") # smtp服务 smtpserver = "smtp.qq.com" smtpport = xx # 发送人邮件用户名或专用于smtp账户用户名 username = "xxx" # 发送人邮件密码或专用于smtp账户的密码 password = "xxxx" # 构建smtp对象 smtp = smtplib.SMTP() # 连接到smtp服务 con = smtp.connect(smtpserver, smtpport) print("连接结果: ", con) # 登录smtp服务 log = smtp.login(username, password) print("登录结果:", log) # 发送邮件 print(receivers) res = smtp.sendmail(sender, receivers, msg.as_string()) print("邮件发送结果: ", res) # 退出 smtp.quit() print("send email finish")
运行上述代码,你的目标邮箱将收到一封测试邮件。
HTML格式邮件
下面我们试着发送html格式的邮件。
将文本格式邮件代码中的以下部分替换如下:
# 发送内容构建 # html标识发送内容为文本格式 msg = MIMEText("<p>博客园:谷白</p><a href=‘http://www.cnblogs.com/igubai/‘>Python3</a>>", "html", "utf-8")
完整的代码示例如下:
# -*- coding:utf-8 -*- __author__ = ‘谷白‘ import smtplib from email.mime.text import MIMEText from email.header import Header if __name__ == "__main__": print("发送HTML邮件示例") # 邮件发送者 sender = "[email protected]" # 邮件接收地址列表 # 请将xxx改为你的126邮箱名或整个改为你的目标接收邮箱地址 receivers = "[email protected]" # 发送内容构建 # html标识发送内容为文本格式 msg = MIMEText("<p>博客园:谷白</p><a href=‘http://www.cnblogs.com/igubai/‘>Python3</a>>", "html", "utf-8") msg["From"] = "[email protected]" msg["To"] = receivers # 构建邮件标题 msg["Subject"] = Header("Python3_DeepTest", "utf-8") # smtp服务 smtpserver = "smtp.126.com" smtpport = 25 # 发送人邮件用户名或专用于smtp账户用户名 username = "xxx" # 发送人邮件密码或专用于smtp账户的密码 password = "xxx" # 构建smtp对象 smtp = smtplib.SMTP() # 连接到smtp服务 con = smtp.connect(smtpserver, smtpport) print("连接结果: ", con) # 登录smtp服务 log = smtp.login(username, password) print("登录结果:", log) # 发送邮件 print(receivers) res = smtp.sendmail(sender, receivers, msg.as_string()) print("邮件发送结果: ", res) # 退出 smtp.quit() print("send email finish")
注:
-
将plain改为html标识邮件内容为html格式
-
邮件内容采用html语言来格式化
附件格式邮件
下面看看如何发送带附件的邮件。 需要导入新的类,如下:
from email.mime.multipart import MIMEMultipart
需要使用MIMEMultipart构建内容结构,关键代码如下:
# 发送内容构建# html标识发送内容为文本格式 msg = MIMEMultipart() msg["From"] = "[email protected]" msg["To"] = receivers # 构建邮件标题 msg["Subject"] = Header("博客园谷白", "utf-8") # 构建邮件正文内容 msg.attach(MIMEText("谷白:Python3", "plain", "utf-8")) # 构造附件,多个附件同理 attach1 = MIMEText(open("发送附件邮件.py", ‘rb‘).read(), "base64", "utf-8") attach1["Content-Type"] = "application/octet-stream" # 这里filename随意写,将会在邮件中显示 attach1["Content-Disposition"] = "attrachment;filename=code.py" # 关联附件到邮件中msg.attach(attach1)
完整的代码示例如下:
# -*- coding:utf-8 -*- __author__ = ‘谷白‘ import smtplib from email.mime.text import MIMEText from email.header import Header from email.mime.multipart import MIMEMultipart if __name__ == "__main__": print("发送HTML邮件示例") # 邮件发送者 sender = "[email protected]" # 邮件接收地址列表 # 请将xxx改为你的126邮箱名或整个改为你的目标接收邮箱地址 receivers = "[email protected]" # 发送内容构建 # html标识发送内容为文本格式 msg = MIMEMultipart() msg["From"] = "[email protected]" msg["To"] = receivers # 构建邮件标题 msg["Subject"] = Header("博客园", "utf-8") # 构建邮件正文内容 msg.attach(MIMEText("谷白:Python3", "plain", "utf-8")) # 构造附件,多个附件同理 attach1 = MIMEText(open("发送附件邮件.py", ‘rb‘).read(), "base64", "utf-8") attach1["Content-Type"] = "application/octet-stream" # 这里filename随意写,将会在邮件中显示 attach1["Content-Disposition"] = "attrachment;filename=code.py" # 关联附件到邮件中 msg.attach(attach1) # smtp服务 smtpserver = "smtp.126.com" smtpport = 25 # 发送人邮件用户名或专用于smtp账户用户名 username = "xxx" # 发送人邮件密码或专用于smtp账户的密码 password = "xxx" # 构建smtp对象 smtp = smtplib.SMTP() # 连接到smtp服务 con = smtp.connect(smtpserver, smtpport) print("连接结果: ", con) # 登录smtp服务 log = smtp.login(username, password) print("登录结果:", log) # 发送邮件 print(receivers) res = smtp.sendmail(sender, receivers, msg.as_string()) print("邮件发送结果: ", res) # 退出 smtp.quit() print("send email finish")
小结
上述各示例最终邮件收到如下所示:
-
构建文本和html格式的邮件使用MIMEText构建,使用plain标识文本内容格式,使用html标识html内容格式
-
对于附件格式则需使用MIMEMultipart
以上是关于[Python3]SMTP发送邮件的主要内容,如果未能解决你的问题,请参考以下文章