python发送邮件
先说好,只是python,没用到django封装的类。
要实现发送邮件功能,要用到两个类,一是smtplib,用于发邮件,二是MiMEText,用于制作邮件。
先定义好发信人和收件人的大概信息,如下:
mailto_list=['XXXXXXXXX@qq.com','XXX@163.com'] #收件人列表 mail_host = "smtp.163.com" #发送邮件的邮箱的smtp服务器地址 mail_user = "username" #用户名 mail_pass = "password" #密码 mail_postfix = "163.com" #发信人邮箱的后缀
定义一个发送邮件的函数:
def send_mail(to_list,subject,content): me = "Hello"+"<"+mail_user+"@"+mail_postfix+">" msg = MIMEText(content,_subtype='plain',_charset='utf-8') msg['Subject'] = subject #主题 msg['Form'] = me #from,发件人 msg['To'] = ";".join(to_list) #to,收件人 try:
server = smtplib.SMTP() server.connect(mail_host) #连接到发送邮件的服务器 server.login(mail_user,mail_pass) #用户登录 server.sendmail(me,to_list,msg.as_string()) #发邮件 server.close() #关闭连接 return True except Exception,e: print str(e) return False
然后直接调用该函数,
if send_mail(mailto_list,'你好','你好啊'): print("Done") else: print('Fail')
做到这个程度,但是发送邮件失败,提示了一个错误:User has no permission,这个是邮箱的问题,去邮箱页面-->设置-->POP3/SMTP/IMAP(我的是163邮箱),把这三个服务都开启就好。
能发送邮件了。
但是为什么会这样
,乱码了。那就修改一下代码。
先规定主题的字符编码格式:
if send_mail(mailto_list,u'你好',u'你好啊'):
第二手准备:
def send_mail(to_list,sub,content):
if not isinstance(subject,unicode)
sub = unicode(subject)
这样主题就ok了,其次是发件人
me = ("%s<XXXXXXXX@163.com>") % (Header('我是发件人名字','utf-8'),)
最后是文件内容:
msg = MIMEText(content,_subtype='plain',_charset='utf-8') msg["Accept-Language"]="zh-CN" msg["Accept-Charset"]="ISO-8859-1,utf-8"
MIMEText的charset设置为utf-8,还有规定接收的语言和编码方式。
至此,基本上乱码问题就解决啦。