本文正在参加「Python主题月」,详情查看 活动链接。
python 在自定义模块中包括
smtplib
和
一、SMTP、POP3、IMAP
SMTP协议能发送邮件,POP3/IMAP协议能接收邮件,上图是一次完整的跨服务器的邮件传输过程。
1.1 SMTP(发送)
SMTP
的全称是Simple Mail Transfer Protocol,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
1.2 POP3(接收)
POP3
是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
1.3 IMAP(接收)
IMAP
全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。
IMAP vs POP3
操作位置 | 操作内容 | IMAP | POP3 |
---|---|---|---|
收件箱 | 阅读、标记、移动、删除邮件等 | 客户端与邮箱更新同步 | 仅客户端内 |
发件箱 | 保存到已发送 | 客户端与邮箱更新同步 | 仅客户端内 |
创建文件夹 | 新建自定义的文件夹 | 客户端与邮箱更新同步 | 仅客户端内 |
草稿 | 保存草稿 | 客户端与邮箱更新同步 | 仅客户端内 |
垃圾文件夹 | 接收误移除垃圾文件夹的邮件 | 支持 | 不支持 |
广告邮件 | 接收被移入广告邮件夹的邮件 | 支持 | 不支持 |
总之,IMAP 整体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或多次下载相同的邮件,但 IMAP 通过邮件客户端与webmail 之间的双向同步功能很好地避免了这些问题。
二、smtplib用法
第一步是创建一个SMTP对象,每个对象用于连接与一个服务器的连接。
import smtplib
server = smtplib.SMTP('smtp.163.com', 25)
接着登录SMTP服务器。
server.login("youremailusername", "password")
最后发送邮件。
msg = " Hello!" # The /n separates the message from the headers
server.sendmail("you@gmail.com", "target@163.com", msg)
smtplib
模块主要负责发送邮件,不负责构造邮件的内容,内容包括发件人、收件人、主题、正文、附件等,要通过email
模块构造这些内容。
三、email 用法
首先导入我们要使用的类库。
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
接着组合消息头。
fromaddr = "you@gmail.com"
toaddr = "target@example.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Python email"
接下来,将电子邮件的正文附加到 MIME 消息。
body = "Python test mail"
msg.attach(MIMEText(body, 'plain'))
四、完整例子
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
fromaddr = "fromYou@163.com"
toaddr = "toOther@qq.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Python email"
server = smtplib.SMTP('smtp.163.com', 25)
server.ehlo()
server.starttls()
server.ehlo()
# 注意密钥是单独授权开的,不是邮箱的登录密码
server.login(fromaddr, "auth password")
#为了发送邮件,我们必须将对象转换为字符串
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
当然,这只是一个简单的例子,如果要发送文字、html、图片、附件等复杂场景,请参考官方文档。
今天的文章器 | 了解一下,使用Python 发送邮件分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/18924.html