使用 Python 发送电子邮件时,msg["Subject"] 变量的行为不正常

Posted

技术标签:

【中文标题】使用 Python 发送电子邮件时,msg["Subject"] 变量的行为不正常【英文标题】:Sending email with Python, the msg["Subject"] variable doesn't behave as it should 【发布时间】:2021-03-24 21:47:47 【问题描述】:

我正在使用 Python 发送电子邮件,但是 msg["Subject"] 变量填充了电子邮件的正文而不是主题框,而变量 body 什么也不填充...

其他一切都很好,但我不明白为什么主题是身体而身体是空的? 我错过了什么?

代码如下:

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

msg = MIMEMultipart()
msg['From'] = "myemail@gmail.com"
msg['To'] = 'anemail@hotmail.com'
msg['Subject'] = "for next delivery, please supply"

body = Merged_Dp_Ind_str
msg.attach(MIMEText(body, 'plain'))

text = msg.as_string()
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login('username@gmail.com', 'password1')
server.sendmail(msg['From'], msg['To'], msg['Subject'])
server.quit()

screenshot of the inbox

【问题讨论】:

您可能想更改密码.... 如果你再看一下语法高亮,你可以看到msg['From'] = "myemail@gmail.com'这行是不正确的。您使用" 打开字符串,但没有正确结束它,因为您以' 结尾(而不是")。所以应该是正确的:msg['From'] = "myemail@gmail.com" 编辑帖子不会删除以前的值,我们仍然可以看到您的密码,请确保实际更改它 是的,这是一个复制/粘贴错误。我也改了密码,谢谢提醒。 【参考方案1】:

你的消息很好,但你实际上并没有发送它;您只是发送主题。

server.sendmail(msg['From'], msg['To'], msg['Subject'])

你的意思是

server.sendmail(msg['From'], msg['To'], text)

但是,您可能应该更新您的代码以改用现代 Python 3.6+ API。

格式化和发送消息的正确现代方式类似于

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg['From'] = "myemail@gmail.com"
msg['To'] = 'anemail@hotmail.com'
msg['Subject'] = "for next delivery, please supply"
msg.set_content(Merged_Dp_Ind_str)

with smtplib.SMTP('smtp.gmail.com', 587) as server:
    server.starttls()
    server.login('username@gmail.com', 'password1')
    server.send_message(msg)
    server.quit()

【讨论】:

以上是关于使用 Python 发送电子邮件时,msg["Subject"] 变量的行为不正常的主要内容,如果未能解决你的问题,请参考以下文章

为什么发送电子邮件时不显示消息? - smtplib - Python

python之发送邮件----文本格式

python--smtp邮件使用

Python--发送邮件

使用python发邮件:

使用 smtp 和 Python 发送电子邮件时出现 SSL 错误