Python 如何向国际地址发送电子邮件
如何在Python中通过Python 如何向国际地址发送电子邮件,python,python-2.7,email,unicode,Python,Python 2.7,Email,Unicode,如何在Python中通过smtplib向国际地址发送电子邮件 如果我使用以下代码 try: server = None msg = MIMEMultipart('alternative') msg['From'] = formataddr((from_email_name, from_email)) msg['To'] = Header(to_email, 'utf-8') msg['Subject'] =
smtplib
向国际地址发送电子邮件
如果我使用以下代码
try:
server = None
msg = MIMEMultipart('alternative')
msg['From'] = formataddr((from_email_name, from_email))
msg['To'] = Header(to_email, 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
plain_text_part = MIMEText(plain_text_body, 'plain', _charset='utf-8')
msg.attach(plain_text_part)
html_part = MIMEText(html_body, 'html', _charset='utf-8')
msg.attach(html_part)
server = smtplib.SMTP(smtp_server)
server.starttls()
server.login(from_email, from_email_password)
server.sendmail(from_email, to_email, msg.as_string())
finally:
if server is not None:
server.quit()
然后,当我用ñoñó调用此代码时,脚本在下面一行失败1234@server.com
将电子邮件作为目标地址(发送至电子邮件):
输出
“ascii”编解码器无法对位置9中的字符u'\xf1'进行编码:序号不在范围内(128)
但是,如果我将sendmail
函数调用更改为
server.sendmail(from_email, to_email.encode('utf-8'), msg.as_string())
它失败,出现以下错误:
{'\xc3\xb1o\xc3\xb1\xc3\xb31234@server.com':(555,'5.5.2语法
错误.i7sm368361lbo.39-gsmtp')}
我正在使用GMail的SMTP服务器发送这些电子邮件
我怎样才能修好它
提前感谢。声明服务器端:
必须使用SMTP中继
- 或者明确承认格式,并同意通过 ESMTP选项,或
- 拒绝邮件,或在必要时返回未送达邮件 通知消息,以便发件人可以进行另一次 计划
- 与此扩展关联的EHLO关键字值为 “SMTPUTF8”
- MAIL命令中添加了一个可选参数SMTPUTF8
- 如果要发送的信封或消息需要 SMTPUTF8扩展,SMTPUTF8感知SMTP客户端必须提供 SMTPUTF8参数与MAIL命令一起使用
smtplib
在mail命令中提供SMTPUTF8
选项。您只需将sendmail
命令更改为:
server.sendmail(from_email, to_email.encode('utf-8'), msg.as_string(), ['SMTPUTF8'])
由于您已经在正文中处理了最终的非ASCII字符,并使用MIMEMultipart和MIMEText设置了适当的标题,所以一切都应该正常。试试这个:msg['To']=str(Header(To_email,'utf-8'))告诉我这是否有效。@Prav001不幸的是,它不起作用。请注意,
sendmail
函数调用上的应用程序崩溃可能是因为您应该尝试除utf-8
之外的其他编码方案?@Iron First utf-16也不起作用--{'\xff\xfe\xf1\x00o\x00\xf1\x00\x00\x03\x001\x002\x003\x004\x00@\x00s\x00e\x00r\x00v\x00e\x00r\x00.\x00c\x00o\x00':(555,'5.5.2语法错误.qp7sm484744lbc.24-gsmtp'))
国际化地址是一个特殊的用例,根据RFC 6530,服务器应该宣布SMTPUTF8功能,客户端在其MAIL
命令中传递SMTPUTF8选项。如果服务器宣布SMTPUTF8选项,并且程序员要求,Python smtplib可以传递SMTPUTF8选项。您应该添加服务器。设置调试级别(7)
server=smtplib.SMTP(SMTP\u服务器)之后立即报告会话记录。
server.sendmail(from_email, to_email.encode('utf-8'), msg.as_string(), ['SMTPUTF8'])