转载自菜鸟脚程http://www.runoob.com/python3/python3-smtp.html
代码如下,以QQ邮箱为例:
1. 发送邮件的附件,需要自己添加在与此文件同目录下
2. QQ邮箱需要设置 http://service.mail.qq.com/cgi-bin/help?subtype=1&no=166&id=28
QQ邮箱开启SSL服务设置后,因为是第三方插件的原因,,需要QQ邮箱提供的授权码当做密码,不使用自己的密码
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
# 第三方 SMTP 服务
mail_host= "smtp.qq.com" # 设置服务器
mail_user= "1111111111@qq.com" # 邮箱名
mail_pass= "********" # 邮箱密码(由于是第三方登录,密码使用设置的授权码,否则会发送失败)
sender = '1111111111@qq.com'
receivers = ['1111111111@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
message = MIMEMultipart() # 创建邮件主体message
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
# message = MIMEText('Python 邮件发送测试 陶大爷首次发送成功', 'plain', 'utf-8') # 邮件正文
message['From'] = Header("菜鸟教程", 'utf-8') # 发送者
message['To'] = Header("测试", 'utf-8') # 接收者
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
# 邮件正文内容
# mail_msg = "Python 邮件发送测试..." # 文本格式的邮件正文
# html格式邮件正文
mail_msg = """ python邮件测试
<p>Python 邮件发送测试...</p>
<p><a href="http://www.runoob.com">菜鸟教程链接</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""
# message.attach(MIMEText(mail_msg, 'plain', 'utf-8')) # plain文本格式
message.attach(MIMEText(mail_msg, 'html', 'utf-8')) # html格式
# 指定图片为当前目录
fp = open('test.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
message.attach(msgImage)
# 构造附件1,传送当前目录下的 test.txt 文件
att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="test.txt"'
message.attach(att1)
# 构造附件2,传送当前目录下的 runoob.txt 文件(跟本文件在同一目录下的文件,否则报错)
att2 = MIMEText(open('runoob.txt', 'rb').read(), 'base64', 'utf-8')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="runoob.txt"'
message.attach(att2)
# 构造附件3,传送当前目录下的test.png 图片
att3 = MIMEText(open('test.png', 'rb').read(), 'base64', 'utf-8')
att3["Content-Type"] = 'application/octet-stream'
att3["Content-Disposition"] = 'attachment; filename="test.png"'
message.attach(att3)
try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # qq域名端口号 ,一般域名端口都是25 (奇怪的是qq的端口应该是465,但是我填465就发送失败,填25就发送成功)
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送邮件格式
print("邮件发送成功")
except smtplib.SMTPException:
print("Error: 无法发送邮件")
网易@163.com, smtp服务器:smtp.163.com,端口:25 网易@yeah.com, smtp服务器:smtp.yeah.com,端口:25 网易@126.com, smtp服务器:smtp.126.com,端口:25 搜狐@sohu.com, smtp服务器:smtp.sohu.com,端口:25 搜狗@sogou.com, smtp服务器:smtp.sogou.com,端口:25 新浪@sina.com, smtp服务器:smtp.sina.com,端口:25 tom@tom.com, smtp服务器:smtp.tom.com,端口:25 21cn@21cn.com, smtp服务器:smtp.21cn.com,端口:25 以下三个邮箱需要勾选SSL安全连接: gmail@gmail.com, smtp服务器:smtp.gmail.com,端口:465或者587 qq@qq.com, smtp服务器:smtp.qq.com,端口:465 msn邮箱(包括hotmail.com,live.com,outlook.com), smtp服务器:smtp.live.com, 注:以上为免费邮箱的smtp,收费邮箱请查阅服务提供商的说明。 中盛客户管理软件的群发邮件设置方法请参阅:http://www.zscrm.cn/zsemailsmtp.htm |