Python如何读取文本文件内容并作为邮件正文发送
实现思路
整体不需要第三方依赖,直接用Python内置的邮件相关标准库就能完成,核心逻辑分3步:
- 读取目标
example.txt的全部文本内容,指定和文件保存时一致的编码(优先用utf-8),读取得到的字符串直接作为邮件正文,不需要构造MIME附件对象。 - 用
email模块构造纯文本格式的MIME邮件对象,填充发件人、收件人、邮件主题、正文内容。 - 用
smtplib模块对接你使用的邮箱服务商的SMTP服务,完成鉴权后把构造好的邮件发送出去。
参考代码
import smtplib from email.mime.text import MIMEText from email.header import Header # -------------------------- 请替换为你自己的配置信息 -------------------------- SMTP_SERVER = "smtp.qq.com" # 替换为你邮箱服务商的SMTP地址,例如163邮箱填smtp.163.com SMTP_PORT = 465 # SSL加密端口一般为465,非加密端口一般为25 SENDER_MAIL = "your_mail@qq.com" # 你的发件邮箱地址 SENDER_AUTH_CODE = "your_smtp_auth_code" # 邮箱SMTP服务的授权码,不是邮箱登录密码 RECEIVER_MAIL = "target_mail@xxx.com" # 收件人邮箱地址 MAIL_SUBJECT = "文本文件内容自动发送" # 邮件主题 # ----------------------------------------------------------------------------- # 读取example.txt的内容作为邮件正文 with open("example.txt", "r", encoding="utf-8") as f: mail_body = f.read() # 构造纯文本邮件 msg = MIMEText(mail_body, "plain", "utf-8") msg["From"] = Header(f"发件人 <{SENDER_MAIL}>", "utf-8") msg["To"] = Header(f"收件人 <{RECEIVER_MAIL}>", "utf-8") msg["Subject"] = Header(MAIL_SUBJECT, "utf-8") # 连接服务发送邮件 try: smtp_conn = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) smtp_conn.login(SENDER_MAIL, SENDER_AUTH_CODE) smtp_conn.sendmail(SENDER_MAIL, RECEIVER_MAIL, msg.as_string()) print("邮件发送完成") except Exception as err: print(f"发送出错: {str(err)}") finally: smtp_conn.quit()
注意事项
- 如果
example.txt不在脚本运行的当前工作目录,open函数里要写文件的完整绝对路径,否则会报文件不存在的错误。 - 绝大多数公共邮箱默认关闭SMTP发信权限,需要先登录邮箱网页端,在账号设置的POP3/SMTP/IMAP配置页手动开启SMTP服务,开启后会生成专用的授权码,代码里要填这个授权码,不能填你平时登录邮箱用的密码,否则会鉴权失败。
- 需要群发邮件的话,把
RECEIVER_MAIL替换成多个收件人邮箱组成的列表即可。 - 如果你的txt里存的是HTML格式内容,只需要把
MIMEText初始化的第二个参数从plain改成html,邮件客户端就会自动按网页格式渲染正文。 - 如果读取文件出现乱码,把
open里的encoding参数改成和你txt文件实际保存的编码一致即可,比如gbk、gb2312等。
内容的提问来源于stack exchange,提问作者Smit Shah
相关产品推荐
相关产品推荐

