Python如何发送包含中文字符的邮件?
我的环境是python3.3.4和django1.6.2。当我在做一个django项目时,我需要通过一个邮件代理服务给我的用户发送邮件,但在使用django的send_mail时遇到了问题。所以我用python的stmplib和email库写了一个函数。代码如下:
def email_user(context):
fromEmail = 'admin@***.cn'
toEmail = ['***@qq.com']
msg = MIMEMultipart('alternative')
msg.set_charset('utf8')
msg['Subject'] = '欢迎注册心优雅社区,请激活您的账号'
msg['From'] = fromEmail
msg['To'] = ','.join(toEmail)
html = """
亲爱的%(username)s:
您好!
您在心优雅社区注册账号时使用了这个邮箱,现在您需要点击下面的链接激活该账号:
%(protocol)s://%(domain)s
如果链接无法点击,请将它完整复制到浏览器的地址栏进行访问.
链接有效期为%(expiration_days)s天,失效后需重新注册.
如果您并未进行过此操作,那么可能是有人误用了您的邮箱,请忽略此邮件."""%context
part = MIMEText(html,'html',_charset='UTF-8')
msg.attach(part)
username = 'postmaster@***org'
password = '****'
s = smtplib.SMTP('****.com:25')
s.login(username,password)
s.sendmail(fromEmail,toEmail,msg.as_string())
s.quit()
我在python的IDLE中测试时,一切都运行得很好。但是,当我在我的django项目中调用这个函数发送邮件时,却遇到了UnicodeEncodeError的问题,让我很头疼。
'ascii' codec can't encode characters in position 439-441: ordinal not in range(128)
Unicode error hint
The string that could not be encoded/decoded was: 亲爱的
有人能帮忙吗?
1 个回答
0
这真是初学者的悲哀。当我尝试了很多来自StackOverflow或其他网站的解决方案时,这个错误还是一次又一次地出现。于是我觉得这肯定是个傻问题,就去检查有没有拼写错误。结果发现,没错,我错误地设置了MIMEText的参数。所以我把代码改成了:
MIMEText(html,'html','utf8')
现在它可以正常工作了。