码迷,mamicode.com
首页 > 编程语言 > 详细

python-发送邮件

时间:2017-12-11 18:49:34      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:网络   isp   utf-8   必须   code   安全   上下文   另一个   推导   

python发送邮件使用smtplib模块,是一个标准包,直接import导入使用即可,使用email.mime处理邮件内容和附件

import
smtplib,os from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart import base64 class SendMail(object): def __init__(self,username,passwd,recv,title,content, file=None,ssl=False, email_host=smtp.163.com,port=25,ssl_port=465): ‘‘‘ :param username: 用户名 :param passwd: 密码 :param recv: 收件人,多个要传list [‘a@qq.com‘,‘b@qq.com] :param title: 邮件标题 :param content: 邮件正文 :param file: 附件路径,如果不在当前目录下,要写绝对路径,默认没有附件 :param ssl: 是否安全链接,默认为普通 :param email_host: smtp服务器地址,默认为163服务器 :param port: 非安全链接端口,默认为25 :param ssl_port: 安全链接端口,默认为465 ‘‘‘ self.username = username #用户名 self.passwd = passwd #密码 self.recv = recv #收件人,多个要传list [‘a@qq.com‘,‘b@qq.com] self.title = title #邮件标题 self.content = content #邮件正文 self.file = file #附件路径,如果不在当前目录下,要写绝对路径 self.email_host = email_host #smtp服务器地址 self.port = port #普通端口 self.ssl = ssl #是否安全链接 self.ssl_port = ssl_port #安全链接端口 def send_mail(self): msg = MIMEMultipart() #发送内容的对象 if self.file:#处理附件的 file_name = os.path.split(self.file)[-1]#只取文件名,不取路径 try: f = open(self.file, rb).read() except Exception as e: raise Exception(附件打不开!!!!) else: att = MIMEText(f,"base64", "utf-8") att["Content-Type"] = application/octet-stream #base64.b64encode(file_name.encode()).decode() new_file_name==?utf-8?b? + base64.b64encode(file_name.encode()).decode() + ?= #这里是处理文件名为中文名的,必须这么写 att["Content-Disposition"] = attachment; filename="%s"%(new_file_name) msg.attach(att) msg.attach(MIMEText(self.content))#邮件正文的内容 msg[Subject] = self.title # 邮件主题 msg[From] = self.username # 发送者账号 msg[To] = ,.join(self.recv) # 接收者账号列表 if self.ssl: self.smtp = smtplib.SMTP_SSL(self.email_host,port=self.ssl_port) else: self.smtp = smtplib.SMTP(self.email_host,port=self.port) #发送邮件服务器的对象 self.smtp.login(self.username,self.passwd) try: self.smtp.sendmail(self.username,self.recv,msg.as_string()) pass except Exception as e: print(出错了。。,e) else: print(发送成功!) self.smtp.quit() if __name__ == __main__: m = SendMail( username=555555@163.com, passwd=test123456, recv=[tttttttt@qq.com,tttttt@qq.com], title=新的发送邮件, content=如果是一个计算为主的程序(专业一点称为CPU密集型程序),这一点确实是比较吃亏的,每个线程运行一遍,就相当于单线程再跑,甚至比单线程还要慢——CPU切换线程的上下文也是要有开销的。但是,如果是一个磁盘或网络为主的程序(IO密集型)就不同了。一个线程处在IO等待的时候,另一个线程还可以在CPU里面跑,有时候CPU闲着没事干,所有的线程都在等着IO,这时候他们就是同时的了,而单线程的话此时还是在一个一个等待的。我们都知道IO的速度比起CPU来是慢到令人发指的,python的多线程就在这时候发挥作用了。比方说多线程网络传输,多线程往不同的目录写文件,等等。, file=rE:\byzzuoye\duguanglong_lib\day10\列表推导式.py, ssl=True, ) m.send_mail()

 

python-发送邮件

标签:网络   isp   utf-8   必须   code   安全   上下文   另一个   推导   

原文地址:http://www.cnblogs.com/lingxia/p/8023849.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!