import smtplib
import base64
smtpobj=smtplib.SMTP('smtp.qq.com',587)
smtpobj.ehlo()
smtpobj.starttls()
smtpobj.login('xxxxxx@qq.com',"授权码")
smtpobj.sendmail('"=?utf-8?B?5aSc5q6H?=" <xxxxxxx@qq.com>','xxxxxxxx@163.com',
'Subject:so long.\ndear alecw,so long and thanks for all the fish. sincerely,bob')
smtpobj.quit()
出现错误提示
(550, b'The "From" header is missing or invalid. Please follow RFC5322, RFC2047, RFC822 standard protocol. https://service.mail.qq.com/detail/124/995.')
File "C:\python2\发送电子邮件和短信\连接到SMTP服务器.py", line 19, in <module>
smtpobj.sendmail('<1584635173@qq.com>','cb18675328318@163.com',
smtplib.SMTPDataError: (550, b'The "From" header is missing or invalid. Please follow RFC5322, RFC2047, RFC822 standard protocol. https://service.mail.qq.com/detail/124/995.')
主要问题出现在发送地址上,按提示对地址修改为昵称+<地址>的格式,依然报错,请问有没有遇到相同问题的人。
引用 皆我百晓生 小程序回复内容作答:
根据你的代码和错误提示,看起来问题出现在发送地址的格式上。SMTP服务器要求发送地址的格式按照 RFC5322、RFC2047 和 RFC822 的标准协议。
请尝试按照以下格式修改你的发送地址:
smtpobj.sendmail('昵称 <xxxxxx@qq.com>', 'xxxxxxxx@163.com', 'Subject: so long.\ndear alecw, so long and thanks for all the fish. sincerely, bob')
将 xxxxxx@qq.com
替换为你的发件人邮箱地址,昵称
替换为你的昵称。确保发送地址的格式符合 RFC 标准,参考错误提示中提供的链接了解详细信息。
如果问题仍然存在,你可以检查以下几点:
确保你的邮箱地址和授权码是正确的,能够成功登录到 SMTP 服务器。
检查是否需要启用 "Less secure apps" 选项。对于某些邮箱提供商(如 Gmail),需要在账户设置中启用该选项以允许通过 SMTP 发送邮件。
检查网络连接和代理设置,确保程序能够正常连接到 SMTP 服务器。
如果以上方法仍然无法解决问题,请提供更多详细信息,例如完整的错误提示,以便进一步排查问题原因。
【以下回答由 GPT 生成】
问题分析: 根据错误提示,问题出现在发送地址上,错误提示要求遵循RFC5322,RFC2047和RFC822标准协议。尽管你尝试使用了昵称+地址的格式,但仍然报错。可能原因是编码问题或者格式不正确。
解决方案: 1. 确保发送地址的格式正确。发送地址应该是邮件地址,类似于'xxxxxxx@qq.com',而不是昵称+地址的格式。 2. 确保邮件的发送者地址和接收者地址都是有效的邮箱地址。 3. 确保邮件主题和内容都符合RFC5322,RFC2047和RFC822标准协议。 4. 确保使用正确的编码方式。对于中文字符,可以使用UTF-8编码。
下面是修改后的代码示例:
import smtplib
from email.mime.text import MIMEText
# 发件人地址
sender = 'xxxxxx@qq.com'
# 接收人地址
receivers = ['xxxxxxxx@163.com']
# 创建邮件对象
message = MIMEText('Dear Alecw, so long and thanks for all the fish.', 'plain', 'utf-8')
message['Subject'] = 'so long.'
message['From'] = sender
message['To'] = ','.join(receivers)
try:
# 连接SMTP服务器
smtpobj = smtplib.SMTP('smtp.qq.com', 587)
smtpobj.ehlo()
smtpobj.starttls()
# 登录邮箱账号
smtpobj.login('xxxxxx@qq.com','授权码')
# 发送邮件
smtpobj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
except smtplib.SMTPException as e:
print("Error: 无法发送邮件")
finally:
# 退出连接
smtpobj.quit()
请注意,以上代码中使用了email.mime.text.MIMEText
来创建邮件对象,并设置邮件的主题、发件人、收件人等信息。使用message.as_string()
将邮件对象转换为字符串形式发送。
希望这个解决方案可以帮助到你!如果还有其他问题,请随时告诉我。
【相关推荐】
问题点:发送邮箱地址不符合规范.邮箱地址用<>时, 需要添加 昵称. 要么就直接把<>去掉,那也是可以的.
根据RFC2047, RFC822协议,邮件标头中的'From'形式为:
邮箱地址形式:prefix@domain, 如 'abc@qq.com'。
昵称+空格+<邮箱地址>形式:nickname <prefix@domain>,其中,nickname为ASCII字符集中字符组合或编码文本:
(1)如果昵称全为ASCII字符,如'ABC',邮箱地址为'abc@qq.com',则标头中的'From'为'ABC abc@qq.com'。注意'ABC'和'abc@qq.com'之间用空格隔开;
(2)如果昵称包含非ASCII字符,如中文,则请使用base64对昵称进行编码。nickname最终的形式为:"=?" charset "?" encoding "?" encoded-text "?="。其中,charset为字符集;encoding为编码方式,'B'代表base64;encoded-text为编码后的文本。例如,昵称为'QQ邮箱昵称示例',邮箱地址为'abc@qq.com',则对昵称进行base64编码,字符集使用UTF-8,则nickname为 '=?UTF-8?B?UVHpgq7nrrHmmLXnp7DnpLrkvos=?=',最终邮件标头中的'From'为'"=?utf-8?B?UVHpgq7nrrHmmLXnp7DnpLrkvos=?=" abc@qq.com'。注意编码文本和邮件地址间用空格隔开。