器 | 了解一下,使用Python 发送邮件

器 | 了解一下,使用Python 发送邮件python 在自定义模块中包括`smtplib`和`email`模块,组合起来用于发送带有格式的电子邮件。

本文正在参加「Python主题月」,详情查看 活动链接

python 在自定义模块中包括smtplibemail模块,组合起来用于发送带有格式的电子邮件。

一、SMTP、POP3、IMAP

互联网医院对接平台.jpg

SMTP协议能发送邮件,POP3/IMAP协议能接收邮件,上图是一次完整的跨服务器的邮件传输过程。

1.1 SMTP(发送)

SMTP 的全称是Simple Mail Transfer Protocol,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。

SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

1.2 POP3(接收)

POP3Post 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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注