如何用中文字符python发送邮件?

时间:2014-04-28 17:35:32

标签: python django email

我的环境是python3.3.4 django1.6.2,当我在django项目上工作时,我需要通过电子邮件代理服务向我的用户发送电子邮件,但是我的django的send_mail出了问题。所以我用python的stmplib和电子邮件Lib编写了一个函数。代码如下:

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 :(得分:0)

真的是初学者的悲伤。当我从SO或其他网站尝试许多解决方案时,此错误一次又一次地发生。 所以我认为这一定是个傻瓜问题,然后我转而检查是否存在拼写错误。是的,我错误地设置了MIMEText的参数。所以我将脚本行更改为:

MIMEText(html,'html','utf8')

现在它正在运作。