python2.7实现邮件发送功能
要想实现一个能够发送带有文本、图片、附件的python程序,首先要熟悉两大模块:
email以及smtplib
然后对于MIME(邮件扩展)要有一定认知,因为有了扩展才能发送附件以及图片这些媒体或者非文本信息
最后一个比较细节的方法就是MIMEMultipart,要理解其用法以及对应参数所实现的功能区别
发送邮件三部曲:
创建协议对象
连接邮件服务器
登陆并发送邮件
from email.header import Header from email.mime.base import MIMEBase from email.mime.text import MIMEText import mimetypes from email.mime.multipart import MIMEMultipart import os import smtplib from email import Encoders as email_encoders class Message(object): def __init__(self, from_addr, to_addr, subject="", html="", text=None, cc_addr=[], attachment=[]): self.from_addr = from_addr self.subject = subject if to_addr: if isinstance(to_addr, list): self.to_addr = to_addr else: self.to_addr = [d for d in to_addr.split(',')] else: self.to_addr = [] if cc_addr: if isinstance(cc_addr, list): self.cc_addr = cc_addr else: self.cc_addr = [d for d in cc_addr.split(',')] else: self.cc_addr = [] if html is not None: self.body = html self.body_type = "html" else: self.body = text self.body_type = "plain" self.parts = [] if isinstance(attachment, list): for file in attachment: self.add_attachment(file) def add_attachment(self, file_path, mimetype=None): """ If *mimetype* is not specified an attempt to guess it is made. If nothing is guessed then `application/octet-stream` is used. """ if not mimetype: mimetype, _ = mimetypes.guess_type(file_path) if mimetype is None: mimetype = 'application/octet-stream' type_maj, type_min = mimetype.split('/') with open(file_path, 'rb') as fh: part_data = fh.read() part = MIMEBase(type_maj, type_min) part.set_payload(part_data) email_encoders.encode_base64(part) part_filename = os.path.basename(file_path) part.add_header('Content-Disposition', 'attachment; filename="%s"' % part_filename) part.add_header('Content-ID', part_filename) self.parts.append(part) def __to_mime_message(self): """Returns the message as :py:class:`email.mime.multipart.MIMEMultipart`.""" ## To get the message work in iOS, you need use multipart/related, not the multipart/alternative msg = MIMEMultipart('related') msg['Subject'] = self.subject msg['From'] = self.from_addr msg['To'] = ','.join(self.to_addr) if len(self.cc_addr) > 0: msg['CC'] = ','.join(self.cc_addr) body = MIMEText(self.body, self.body_type) msg.attach(body) # Add Attachment for part in self.parts: msg.attach(part) return msg def send(self, smtp_server='localhost'): smtp = smtplib.SMTP() smtp.connect(smtp_server) smtp.sendmail(from_addr=self.from_addr, to_addrs=self.to_addr + self.cc_addr, msg=self.__to_mime_message().as_string()) smtp.close()
对于实际发送程序,要注意个参数的类型,比如from_addr是字符串,to_addr和cc_addr以及attachment都是列表
from mail_base import Message import datetime from_addr = 'xxx' mail_to = 'xxx' def send_go(): time_now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M') attach_files = ['testcsv.xlsm','test1.jpg','test2.jpg','test3.jpg'] mail_msg = """ <p>Hi Lockey:</p> <p><img src="cid:test1.jpg"></p>####要特别注意这里,正文插入图片的特殊格式!!! <hr/> <p style="text-indent:16px">Here is the latest paper link from The Economist, you can click <a href="https://lockeycheng.github.io/iooi/index.html" rel="external nofollow" >Go</a> for a full view!</p> <hr/> <p>Best Regards</p> <p> Any question please mail to <a href='mailto:iooiooi23@163.com'>Lockey23</a>. </p> <p>Sent at {} PST</p> """.format(time_now) subject = '[Halo] - ' + 'A new paper published!' msg = Message(from_addr=from_addr, to_addr=[mail_to], cc_addr=[mail_to], subject=subject, attachment=attach_files, html=mail_msg ) msg.send() if __name__ == '__main__': send_go()
对于测试程序我们命名为sendGo.py,运行测试程序
~$ python sendGo.py
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- python实现邮件发送功能
- python生成每日报表数据(Excel)并邮件发送的实例
- python实现QQ邮箱/163邮箱的邮件发送
- python3.4实现邮件发送功能
- python模块smtplib实现纯文本邮件发送功能
- python邮件发送smtplib使用详解
- Python实现的查询mysql数据库并通过邮件发送信息功能
- Python实现定时备份mysql数据库并把备份数据库邮件发送
- python实现12306抢票及自动邮件发送提醒付款功能
- python实现自动发送邮件发送多人、群发、多附件的示例
- 利用python实现简单的邮件发送客户端示例
- python定时利用QQ邮件发送天气预报的实例
- python实现SMTP邮件发送功能
- python使用smtplib模块通过gmail实现邮件发送的方法
- python实现邮件自动发送
相关文章
windows10系统中安装python3.x+scrapy教程
本文给大家主要介绍了在windows10系统中安装python3以及scrapy框架的教程以及有可能会遇到的问题的解决办法,希望大家能够喜欢2016-11-11TensorFlow实现Batch Normalization
这篇文章主要为大家详细介绍了TensorFlow实现Batch Normalization,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-03-03Opencv-Python图像透视变换cv2.warpPerspective的示例
今天小编就为大家分享一篇关于Opencv-Python图像透视变换cv2.warpPerspective的示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-04-04
最新评论