Python天气报告邮件主题缺失问题求助
邮件主题不显示问题的解决方案
问题原因
你在第二个脚本中虽创建了EmailMessage对象并设置了主题,但调用sendmail时参数使用错误——直接传递了文本文件内容和msg对象,导致邮件主题未被正确包含到发送的邮件内容中。smtplib.SMTP.sendmail()的第三个参数需要是完整的邮件字符串(包含所有邮件头和正文),而非单独的正文内容。
修正后的第二个脚本代码
from data import extract_data import smtplib, os from email.message import EmailMessage from dotenv import load_dotenv _ = load_dotenv() extract_data() email_address = os.environ.get("gmail_username") email_password = os.environ.get("gmail_password") msg = EmailMessage() # 设置邮件主题 msg['Subject'] = 'Daily Weather Report' # 设置发件人和收件人 msg['From'] = email_address msg['To'] = "my_email@gmail.com" with open("weather.txt", "r") as my_file: file_content = my_file.read() # 将文件内容设置为邮件正文 msg.set_content(file_content) server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(email_address, email_password) # 发送完整的邮件(包含主题、正文等所有信息) server.send_message(msg) server.quit()
关键修改点
- 给
EmailMessage对象添加From和To头信息,符合邮件标准要求。 - 使用
msg.set_content(file_content)将天气报告内容设置为邮件正文,替代直接传递正文给sendmail的错误方式。 - 使用
server.send_message(msg)发送完整邮件,确保主题被正确包含在邮件头中。
内容的提问来源于stack exchange,提问作者Mark Moralls
相关产品推荐
相关产品推荐

