我的环境是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: 亲爱的
有人可以帮忙吗?
答案 0 :(得分:0)
真的是初学者的悲伤。当我从SO或其他网站尝试许多解决方案时,此错误一次又一次地发生。 所以我认为这一定是个傻瓜问题,然后我转而检查是否存在拼写错误。是的,我错误地设置了MIMEText的参数。所以我将脚本行更改为:
MIMEText(html,'html','utf8')
现在它正在运作。