1、源码实现
注:只需将源码中x和*的位置换上对应邮箱号、密码/授权码就好。此外,收件人和发件人邮箱可以相同,即自己发给自己
from smtplib import SMTP, SMTP_SSL
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
try:
# 连接到服务器
# smtp = SMTP(host="smtp.163.com")
smtp = SMTP_SSL(host="smtp.qq.com", port=465)
# useemail = "xxx@163.com"
useemail = "xxx@qq.com"
# 登录
# smtp.login(useemail, "******")
smtp.login(useemail, "你的邮箱SMTP授权码,不是QQ/邮箱密码") #获取授权码请看下方操作流程
# 构造发送文件内容对象
# sendmulti = MIMEMultipart("<h1>这是<b>Python<b>写的一封邮件</h1>", "html")
sendmulti = MIMEMultipart()
# 显示发件人
sendmulti["from"] = useemail
# 显示收件人
sendmulti["to"] = "xxx@qq.com, xxx@qq.com"
# 邮件主题
sendmulti["subject"] = "测试邮件"
# 构造图片对象并添加进邮件对象
with open("xxx.png", "rb") as f:
imgdata = MIMEImage(f.read())
imgdata.add_header("Content-ID", "img001")
sendmulti.attach(imgdata)
htmlTitle = "<h1>世外桃源</h1><img src='cid:img001' /><p>End</p>"
html = MIMEText(htmlTitle, "html")
sendmulti.attach(html)
# 添加文件附件
with open("xxx.py", "rb") as f:
mess_file = MIMEText(f.read(), "base64", "utf-8")
mess_file["Content-Type"] = "application/octet-stream"
mess_file["Content-Disposition"] = "attachment; filename='new.txt'"
sendmulti.attach(mess_file)
# 发送方法 第一个参数:发件人 第二个参数:收件人列表 第三个参数:邮件转字符串
smtp.sendmail(useemail, ["xxx@qq.com", "xxx@qq.com"], sendmulti.as_string())
smtp.quit()
except Exception as e:
print(e)
2、获取授权码(以QQ邮箱为例)
- 首先,进入QQ邮箱首页 > 点击设置
- 然后,选择账户 > 下滑到 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 > 点击开启
- 完成短信发送点击 我已发送 成功便能收到授权码
- 开启后操作如下图
大功告成