公司每天要发送日报,最近没事搞了一下如何自动发邮件,用的是腾讯企业邮箱,跟大家分享一下我的研究过程吧。
以前弄的发邮件的是用qq邮箱发的,当时在网上查资料最后达到了能发图片,网页,自定义收件人展示,主题等比较简
单的,但没想到说发送个word附件,后来才发现原来email里的MIMEText就可以,先上代码吧
1 #coding:utf8 2 ‘‘‘ 3 日报 4 ‘‘‘ 5 import email 6 import smtplib 7 import os 8 from email.mime.text import MIMEText 9 from email.mime.multipart import MIMEMultipart 10 11 class MyEmail: 12 def __init__(self): 13 self.user = None 14 self.passwd = None 15 self.to_list = [] 16 self.cc_list = [] 17 self.tag = None 18 self.doc = None 19 20 21 def send(self): 22 ‘‘‘ 23 发送邮件 24 ‘‘‘ 25 try:27 server = smtplib.SMTP_SSL("smtp.exmail.qq.com",port=465) 28 server.login(self.user,self.passwd) 29 server.sendmail("<%s>"%self.user, self.to_list, self.get_attach()) 30 server.close() 31 print "send email successful" 32 except Exception,e: 33 print "send email failed %s"%e45 46 def get_attach(self): 47 ‘‘‘ 48 构造邮件内容 49 ‘‘‘ 50 attach = MIMEMultipart() 51 if self.tag is not None: 52 #主题,最上面的一行 53 attach["Subject"] = self.tag 54 if self.user is not None: 55 #显示在发件人 56 attach["From"] = "发件人姓名,可以自定义<%s>"%self.user 57 if self.to_list: 58 #收件人列表 59 attach["To"] = ";".join(self.to_list) 60 if self.cc_list: 61 #抄送列表 62 attach["Cc"] = ";".join(self.cc_list) 63 if self.doc: 64 #估计任何文件都可以用base64,比如rar等 65 #文件名汉字用gbk编码代替 66 name = os.path.basename(self.doc).encode("gbk") 67 f = open(self.doc,"rb") 68 doc = MIMEText(f.read(), "base64", "gb2312") 69 doc["Content-Type"] = ‘application/octet-stream‘ 70 doc["Content-Disposition"] = ‘attachment; filename="‘+name+‘"‘ 71 attach.attach(doc) 72 f.close() 73 return attach.as_string() 74 75 76 if __name__=="__main__": 77 my = MyEmail() 78 79 my.user = "[email protected]" 80 my.passwd = "password" 81 my.to_list = ["",] 82 my.cc_list = ["",] 83 my.tag = "日报" 84 my.doc = u"C:\Documents and Settings\Administrator\Desktop\日报.doc" 85 my.send() (好吧,第一次发,还不会编辑,怎么插入代码后就不能在外面写字了??) 在这里继续吧首先使用腾讯企业邮箱需要使用ssl,不过在smtplib中有这个功能,一般使用SMTP,需要ssl的时候使用SMTP_SSL,在明白这个之前我费了好大的力气去找怎么用ssl,后来才发现原来除了换个模块外别的根本不用变化,在登录的时候我用的是@前面的帐号名,一直上不去,一直不知道为什么,第二天心里突然闪过一个想法:把完整邮箱地址当做帐号,一试,哈哈,登录成功了然后就是发送附件了,首先是需要发送一个word文档,找了半天才发现用
(from email.mime.text import MIMEText)
MIMEText就可以,本来我以为他只能处理文本的T0T,原来他不仅可以处理文本,doc,rar都可以用它添加到附件里,只要在初始化的时候使用base64就可以,后面的参数是doc使用的字符集吧,这个没研究过,不确定
doc["Content-Type"] = ‘application/octet-stream‘ doc["Content-Disposition"] = ‘attachment; filename=123.doc‘ 这个指定类型和描述,在描述里可以自定义文件名貌似这个文件名是gbk编码的,我的附件名字是中文,先使用u""把文件名声明为unicode,再转为gbk,如果使用unicode的话好像不行,文件名会变成系统定义的文件名,不过文件仍然可以用,下载下来改个名字没什么区别,使用utf8会出现乱码
时间: 2024-08-08 10:49:35