博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 发送邮件
阅读量:5027 次
发布时间:2019-06-12

本文共 3214 字,大约阅读时间需要 10 分钟。

1邮件发送过程

通常我们通过一个邮箱程序填好邮件信息(如163邮箱等),点击发送按钮就将该电子邮件发送出去了。这个邮箱程序被称为邮件用户代理(Mail User Agent,MUA),它的功能就是用于收发邮件。

Email从MUA发出后,不是直接到达对方电脑,而是发送到邮件传输代理(Mail Transfer Agent,MTA),就是邮件服务提供商,如网易、阿里云等。

假设自己的邮箱是me@163.com,对方的是friend@qq.com。由于自己的邮箱是163.com,Email首先投递到网易提供的MTA,再由网易提供的MTA发送到对方的服务商(也就是腾讯提供的MTA)。在这个过程中也许会经过别的MTA,但是对用户透明,我们不用去管。

Email到达腾讯的MTA之后,因为对方使用的是qq邮箱,因此腾讯的MTA会将Email投递到最终的目的地邮件投递代理(Mail Delivery Agent,MDA)。

Email到达MDA后,会存放在腾讯服务器的某个文件或者数据库里,我们将长期保存电子邮件的地方称之为电子邮箱。对放要到取邮件,必须通过MUA从MDA上获得。

简单的说一封电子邮件的旅程是:发件人->MUA->MTA->...->MTA->MDA->MUA->收件人

 

2邮件的协议

发邮件时,MUA和MTA使用的协议是SMTP(Simple Mail Transfer Protocol),从一个MTA到另一个MTA也是使用SMTP协议。

收邮件时,MUA和MDA使用的协议有两种:一种是POP(Post Office Protocol),目前是版本3,俗称POP3;

另一种是IMAP(Internet Message Access Protocol),该协议的优点是不但能取邮件,还可以直接操作MDA上存储的邮件,如删除等操作。

 

3 SMTP发送邮件

python对SMTP的支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

下面是简单邮件发送的demo

#!/usr/bin/python#!coding:utf-8import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartmail_host = 'smtp.163.com'mail_port = 465sender = 'me@163.com' # 填写你的邮件和密码(授权码)pwd = '******'receivers = ['friend1@qq.com','friend2@qq.com']subject = 'python smtp test'content = '这是一个测试邮件,被ouym创建。'html_content = """

欢迎进入ouym的博客

点击www.ouym.top

"""# send函数封装连接登陆,以及实际的发送操作def send(message): try: smtpObj = smtplib.SMTP_SSL(mail_host,mail_port) smtpObj.login(sender,pwd) smtpObj.sendmail(sender,receivers,message.as_string()) print("success!") except smtplib.SMTPException as e: print('邮件发送失败,原因为:%s'%e)# 简单发送文本邮件def send_text_mail(): message = MIMEText(content,'plain','utf-8') message['From'] = "{}".format(sender) message['To'] = ",".join(receivers) message['Subject'] = subject send(message)# 简单发送html格式邮件def send_html_mail(): message = MIMEText(html_content,'html','utf-8') message['From'] = "{}".format(sender) message['To'] = ",".join(receivers) message['Subject'] = subject send(message)# 简单发送带附件的邮件def send_image_mail(): message = MIMEMultipart() message['From'] = "{}".format(sender) message['To'] = ",".join(receivers) message['Subject'] = subject message.attach(MIMEText(html_content, 'html', 'utf-8')) # txt附件 att1 = MIMEText(open('test1.txt', 'rb').read(), 'base64', 'utf-8') att1['Content-Type'] = 'application/octet-stream' att1['Content-Disposition'] = 'attachment;filename="ouym.txt"' message.attach(att1) # 文档附件 att2 = MIMEText(open('test2.doc', 'rb').read(), 'base64', 'utf-8') att2['Content-Type'] = 'application/octet-stream' att2['Content-Disposition'] = 'attachment;filename="ouym.doc"' message.attach(att2) # 图片附件 att3 = MIMEText(open('test3.png', 'rb').read(), 'base64', 'utf-8') att3['Content-Type'] = 'application/octet-stream' att3['Content-Disposition'] = 'attachment;filename="ouym.png"' message.attach(att3) send(message)def main(): send_text_mail()if __name__ == '__main__': main()

注意这里SMTP不是使用的25端口,而是使用的465端口,这两个端口都是用来发送邮件的。

465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。

完~

转载于:https://www.cnblogs.com/ouym/p/9150621.html

你可能感兴趣的文章
T-SQL 类型转换
查看>>
在eclipse中设计BPMN 2.0工作流定义的根本步骤
查看>>
Json对象与Json字符串互转(4种转换方式)
查看>>
PAT甲级1002 链表实现方法
查看>>
查看Linux信息
查看>>
Python中sys模块sys.argv取值并判断
查看>>
【详记MySql问题大全集】四、设置MySql大小写敏感(踩坑血泪史)
查看>>
并查集
查看>>
ubuntu 11.04下android开发环境的搭建!
查看>>
Bzoj 3343: 教主的魔法
查看>>
括号序列(栈)
查看>>
一件趣事
查看>>
DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
查看>>
atom 调用g++编译cpp文件
查看>>
H3C HDLC协议特点
查看>>
iptables 网址转译 (Network address translation,NAT)
查看>>
ios __block typeof 编译错误解决
查看>>
android 插件形式运行未安装apk
查看>>
ios开发之 manage the concurrency with NSOperation
查看>>
Android权限 uses-permission
查看>>