You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:57:23