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

本文介绍了如何使用Python的smtplib和email模块发送格式化的电子邮件。讲解了SMTP、POP3和IMAP的区别,强调了IMAP在邮件管理上的优势。并展示了使用smtplib发送邮件的基本步骤,以及email模块构造邮件内容的方法。最后提供了一个完整的Python代码示例,演示了如何结合两者发送邮件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


theme: jzman

本文正在参加「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、图片、附件等复杂场景,请参考官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值