1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > [Python] [邮件发送] 用Python的smtplib和email库进行邮件发送

[Python] [邮件发送] 用Python的smtplib和email库进行邮件发送

时间:2023-11-20 20:13:26

相关推荐

[Python] [邮件发送] 用Python的smtplib和email库进行邮件发送

目录

1.Intro

2.Details

3.Theory

4.Environment

5.Source

6.Conclusion

1.Intro

眼看就到了12月中旬,除了帮朋友码竞赛题,前半个月可以说是划水摸鱼抓梦jio。

这段时间面试了几个人,赶脚什么人都敢往开发靠啊兄弟,

第一个是某传媒学校毕业的,自学了几年Java,然后干了几年的收银和消防救火员.... Pass

第二个都37了(大哥你确定要从基层做起???),学历牌子很硬,但工作后没有什么像样的项目成果 Pass

第三个前某科技公司的CTO...CTO......你干的好好的离什么职哦,来应聘研发总监,原来做电商的,后来搞大数据,写过人脸识别的算法,我多嘴的问了几句关于Map Reduce的具体实现,包括怎么用Yarn来调度资源,是否有用到Spark参与计算以及人脸识别框架和算法的技术细节等等,就是这种外行问题,人家说他负责搭建环境和整个项目的协同管理,一看公司名,再看他的专业(材料化学),哦,然后我就明白了。Pass

还有不少.....

2.Details

用smtplib和email库进行邮件发送,在之前写的爬虫模块里就有了,这里单独做一个具体的介绍。

如何开启邮箱的SMTP服务?

以QQ为例:

3.Theory

(1) smtplib

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是在Internet传输email的事实标准,是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。说白了,就是email要在网上传输,需要遵循SMTP协议和规范,就和TCP/IP协议、HTTP协议一个道理。

Python的smtplib提供了一种很方便的途径发送电子邮件,对smtp协议进行了简单的封装。

创建 SMTP 对象:

import smtplibemail = smtplib.SMTP(host, port, local_hostname)参数说明:1.host:可选。一般要指定。SMTP服务器主机,可以指定主机ip地址或域名,如 、 等。2.port:可选。host指定了就需要指定端口号,一般端口号为25,QQ邮箱的ssl端口为465。3.local_hostname:可选。如果SMTP服务器设置在了本机上,就指定服务器地址为localhost。Eg:smtp_server = ''email = smtplib.SMTP_SSL(host=smtp_server, port=465)

登录SMTP服务器:

login_code = email.login(from_mail, mail_pass)参数说明1.from_mail:发送方的邮箱地址2.mail_pass:SMTP服务授权码(在邮箱里开启SMTP服务时生成)返回一个元组,包含登录状态码和登录结果。Eg:login_code = email.login(from_mail, mail_pass)# 返回(235, 'Authentication successful')

发送邮件:

email.sendmail(from_mail, to_mail, msg)1.from_mail:邮件发送者地址2.to_mail:邮件接收者地址3.msg:发送消息Eg:email.sendmail(from_mail, to_mail, msg.as_string())email.quit()

2.email

email软件包是用于管理电子邮件、处理邮件消息的库,包括MIME和其他一些基于RFC 2822的消息文档。

这里主要用到的是MIME扩展类型,即MIME消息格式,可支持非ASCII字符文本,非文本格式附件,由多部分组成的消息体和包含非ASCII字符的头信息。

(1)字符文本:邮件主体,即邮件主要内容。

(2)附件:本机文件,可以是二进制、图像、音频、视频等,不要超过邮件服务器声明的最大上传大小。

(3)消息体:有text/plain(纯文本)、text/html(超文本)、image/jpeg(jpg图片)、video/mp4(mp4视频)等多种独立类型,在邮件头部用“Content-Type”域作为标识,其中这些消息体可以分为多段,称作multipart,每个段包括段头段尾,它分为三种类型,分别是multipart/mixed(附件)、multipart/alternative(文本)、multipart/related(内嵌)。

(4)头信息:包括发件人、收件人、主题、日期、邮件内容类型等信息。

4.Environment

Environment:Windows All

Language:Python 2.7.14

IDE:Pycharm

5.Source

import smtplib # SMTP库from email.mime.text import MIMEText # 文本邮件对象from email.mime.multipart import MIMEMultipart # 多个对象的组合,包括文本、附件等from email.header import Header # 邮件名对象from email import encoders # 编码器from email.mime.base import MIMEBase # 附件构造对象from email.utils import parseaddr, formataddr # 邮件规约与格式化class Data_Sender(object):def __init__(self):print("[*] Initialize email send module..")def format_address(self, address):'''格式化邮件地址:param address: 邮件地址:return: 格式化后的邮件地址'''print("[+] Formatting email address..")name, addr = parseaddr(address)print("[+] Format done.")return formataddr((Header(name, 'utf-8').encode(), addr))def send_mail(self, body, attachment):'''发送邮件:param body: 邮件正文:param attachment: 附件地址:return: 发送成功返回True'''print("[+] Begin to send email...")# 要发送的服务器smtp_server = '' # 可以选择别的服务器,如 # 要发送的邮箱用户名/密码from_mail = '发送方的邮箱'mail_pass = 'SMTP服务密码'# 接收的邮箱to_mail = '接收方的邮箱'# 构造一个 MIMEMultipart 对象代表邮件本身msg = MIMEMultipart()# Header 对中文进行转码msg['From'] = self.format_address('发件人地址标识 <%s>' % from_mail).encode()msg['To'] = to_mailmsg['Subject'] = Header('邮件名', 'utf-8').encode()# # plain 代表纯文本msg.attach(MIMEText(body, 'plain', 'utf-8'))# 二进制方式模式文件if len(attachment) != 0:for file_path in attachment:with open(file_path, 'rb') as picture:# MIMEBase 表示附件的名字mime = MIMEBase(file_path[str(file_path).rfind('\\') + 1: -4], 'xls',filename=file_path[str(file_path).rfind('\\') + 1:])# filename 是显示附件名字mime.add_header('Content-Disposition', 'attachment',filename=file_path[str(file_path).rfind('\\') + 1:])# 获取附件内容mime.set_payload(picture.read())encoders.encode_base64(mime)# 作为附件添加到邮件msg.attach(mime)print("[+] Connecting SMTP server")# 创建SMTP对象email = smtplib.SMTP_SSL(smtp_server, 465)print("[+] Connect successfully.")print("[+] Licensing SMTP server")# 登录SMTP服务器login_code = email.login(from_mail, mail_pass)if login_code[0] is 235:print("[+] Successfully!")else:print("[-] Failed!")return Falsetry:# as_string()把 MIMEText 对象变成 strprint("[*] Sending email..")# 发送邮件email.sendmail(from_mail, to_mail, msg.as_string())email.quit()print("[+] Successfully!")return Trueexcept Exception as e:print("[-] Failed!")print("ERROR: " + str(e.message))return False

6.Conclusion

不发GIS开发相关,天天不务正业说的就是本猿。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。