
Python3进阶(三) | SMTP发送邮件(发送不同格式、附件)
发布日期:2021-05-10 06:27:21
浏览次数:18
分类:精选文章
本文共 3303 字,大约阅读时间需要 11 分钟。
Python3 SMTP发送邮件
SMTP概述
SMTP(简单邮件传输协议)是一组规则,用于控制信件的中转方式。它是电子邮件系统的基础协议之一,用于将信息从一台邮件服务器传送到另一台邮件服务器,完成邮件的中继。
使用smtplib发送邮件
配置SMTP服务器
在开始编码之前,首先需要了解常用的SMTP服务器地址和端口:
- 如果使用QQ邮箱:SMTP服务器为smtp.qq.com,端口为25。
- 如果使用163邮箱:SMTP服务器为smtp.163.com,端口为25。
- 其他邮箱服务提供商可能有所不同,需查阅其官网获取详细信息。
SMTP对象创建
使用smtplib.SMTP创建SMTP对象:
import smtplibsmtpObj = smtplib.SMTP([host, [port, local_hostname]])
参数说明:
- host:SMTP服务器地址,可以是域名或IP地址。
- port:如果提供了host参数,需指定.QLabel>端口号,通常为25。
- local_hostname:指定本地主机名(可选项。
邮件发送流程
使用SMTP对象的sendmail方法发送邮件:
smtpObj.sendmail(from_addr, to_addrs, msg, [mail_options, rcpt_options])
参数说明:
- from_addr:发件人地址。
- to_addrs:收件人地址列表。
- msg:邮件内容。
- mail_options:邮件选项(可选项。
- rcpt_options:收件人选项(可选项。
邮件内容格式
使用MIMEText创建邮件内容:
from email.mime.text import MIMETextmsg = MIMEText(content, 'plain', 'utf-8')msg['From'] = formataddr(["From昵称", from_addr])msg['To'] = formataddr(["To昵称", to_addr])msg['Subject'] = subject
实际应用示例
以下是一个通过QQ邮箱发送邮件的示例:
# QQ邮箱示例import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrfrom_addrs = '你的QQ邮箱'password = 'QQ邮箱的授权码'to_addrs = '收件人邮箱'msg = MIMEText('邮件内容', 'plain', 'utf-8')msg['From'] = formataddr(["From昵称", from_addrs])msg['To'] = formataddr(["To昵称", to_addrs])msg['Subject'] = "邮件标题"server = smtplib.SMTP_SSL('smtp.qq.com')try: server.login(from_addrs, password) server.sendmail(from_addrs, [to_addrs], msg.as_string()) server.quit()except Exception: print('邮件发送失败!')如果是163邮箱,示例如下:# 163邮箱示例import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrfrom_addrs = '你的163邮箱'password = '163邮箱的授权码'to_addrs = '收件人邮箱'msg = MIMEText('邮件内容', 'plain', 'utf-8')msg['From'] = formataddr(["From昵称", from_addrs])msg['To'] = formataddr(["To昵称", to_addrs])msg['Subject'] = "邮件标题"server = smtplib.SMTP_SSL('smtp.163.com')try: server.login(from_addrs, password) server.sendmail(from_addrs, [to_addrs], msg.as_string()) server.quit()except Exception: print('邮件发送失败!')
HTML格式邮件
为了发送HTML格式的邮件,只需要指定MIME类型为html
。
# 发送HTML邮件msg = MIMEText(content, 'html', 'utf-8')msg['From'] = formataddr(["From昵称", from_addrs])msg['To'] = formataddr(["To昵称", to_addrs])msg['Subject'] = "HTML邮件标题"
附件邮件
将附件添加到邮件中:
# 发送带附件的邮件from email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.application import MIMEApplicationmessage = MIMEMultipart()message['From'] = Header("邮件标题", 'utf-8')message['To'] = Header("Li子们", 'utf-8')# 邮件内容text_part = MIMEText('邮件内容', 'plain', 'utf-8')message.attach(text_part)# 附件1(PDF文件)pdf_path = 'Spring Boot实战 ,丁雪丰 (译者).pdf'pdf_file = MIMEApplication(open(pdf_path, 'rb').read())pdf_file.add_header('Content-Disposition', 'attachment', filename=pdf_path)message.attach(pdf_file)# 附件2(文本文件)txt_path = 'Python学习须知.txt'txt_file = MIMEApplication(open(txt_path, 'rb').read())txt_file.add_header('Content-Disposition', 'attachment', filename=txt_path)message.attach(txt_file)server = smtplib.SMTP('smtp.163.com')try: server.login(from_addrs, password) server.sendmail(from_addrs, [to_addrs], message.as_string()) server.quit()except Exception: print('邮件发送失败!')
注意事项
在实际应用中,需确保:
- 调用
server.login()
时使用正确的邮箱账号和授权码。 - SMTP服务器和端口号与所选邮箱服务一致。
- 该脚本具有异常处理,避免因异常而导致资源未释放或邮件失败。
通过以上方法,可以在Python中便捷地使用SMTP协议发送邮件,灵活配置内容和附件,满足不同场景的需求。
发表评论
最新留言
不错!
[***.144.177.141]2025年04月17日 05时21分34秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
UML-配置图
2019-03-15
JS高级面向对象(二)-构造函数和原型
2019-03-15
python入门到秃顶(10):异常
2019-03-15
ES6_变量生明
2019-03-15
REACT_react的生命周期有哪些
2019-03-15
VUE_vue设置距离顶部距离
2019-03-15
考研复试英语问答
2019-03-15
百度背景换肤案例
2019-03-15
修改ng-zorro中table对齐及宽度等细节
2019-03-15
输出对象的值——踩坑
2019-03-15
angular2项目里使用排他思想
2019-03-15
折线图上放面积并隐藏XY轴的线
2019-03-15
zabbix之自动发现
2019-03-15
Experience of tecent interview
2019-03-15
python实验--太理二
2019-03-15
failed to push some refs to git
2019-03-15
vue基础学习01
2019-03-15
控制流程获取1-100以内的质数质数
2019-03-15
在苹果Mac上如何更改AirDrop名称?
2019-03-15
1110 Complete Binary Tree (25 point(s))
2019-03-15