python-发送邮件

Posted D.零下的小书屋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-发送邮件相关的知识,希望对你有一定的参考价值。

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 [‘[email protected]‘,‘[email protected]] :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 [‘[email protected]‘,‘[email protected]] 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=[email protected], passwd=test123456, recv=[[email protected],[email protected]], 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-发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

超实用的php代码片段

Javascript - 使用 HTML 片段通过电子邮件发送 JSON 输出

Github 大牛封装 Python 代码,实现自动发送邮件只需三行代码

C#和ASP.NET通过Gmail账户发送邮件的代码

python笔记- 发送邮件

实现Python代码发送邮件