利用Python 发送邮件
概要
我们都知道SMTP(简单邮件传输协议),是一组用于从原地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP规定电子邮件应该如何格式化、如何加密,以及如何在邮件服务器之间传递。SMTP服务器就是通过遵循SMTP协议的发送邮件服务器。
如果你使用过邮件客户端,比如Foxmail,outlook等,那么你应该了解SMTP服务器和端口号,除了服务器和端口,我们还需要进行其他配置,默认情况下邮件服务提供商是不允许我们使用程序进行邮件发送的,如果想要使用程序发送电子邮件,就需要我们手动开启SMTP服务,并获取一个专用的授权码(用于登陆)。 -- 需要自行去了解所用邮箱的授权码获取方式
使用smtplib和email模块发送邮件
得到邮箱的授权码就可以使用Python代码发送电子邮件了。Python标准库有多个与邮件相关的模块,其中smtplib负责发送邮件,email模块用来构造邮件和解析邮件内容。
smtplib模块
stmplib发送邮件大概分为以下几个步骤:
连接到SMTP服务器
发送SMTP的“Hello”消息
登陆到SMTP服务器
发送电子邮件
关闭SMTP服务器的连接
对于简单的邮件,smtplib的使用是非常简单的,下面是实例

PS:sendmail的参数为发件人,收件人,邮件内容
注意:可以在创建加密链接之前使用smtp.set_debuglevel(1),来显示与SMTP服务器交互的相关信息
查看发送的邮件会发送,有两个问题,一是收件人栏为空,二是邮件内容缺失,这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,所以,我们必须把From、To和Subject添加到email模块中的MIMEText中,才是一封完整的邮件。(MTA可以理解为邮件代理服务器)。
smtplib模块结合email模块
使用email模块构建一个邮件对象(Message),email模块中支持很多邮件对象
MIMEText:表示一个纯文本的邮件* 常用
MIMEImage:表示一个作为附件的图片
MIMEMultipart:用于把多个对象组合起来
其中还有诸如其他的类:MIMEBase、MIMEAudio等。
MIMEText对象的主要参数是:MIMEText(_text, _subtype='plain', _charset=None),其中:
_text:表示邮件内容
_subtype:表示邮件内容的类型,默认为plain(纯文本),还可以设置为html,表示正文是html文件(会渲染HTML标签)
_charset:表示邮件编码,默认情况下使用ascii编码
下面是一个发送纯文本邮件的例子:

PS:利用msg对象,我们可以构建邮件的header,通过添加header信息,给邮件增加subject等参数,达到补全邮件信息的目的。msg的header添加方式和使用字典的方式相同。
带附件的邮件
前面说明了发送纯文本邮件的方法,在使用邮件发送带附件(图片)的邮件时,需要使用MIMEMultipart对象,并把MIMEImage对象添加。

使用yagmail发送邮件
Python的标准库smtplib和email,相对来说还是比较复杂的,因此许多开源项目提供了更加易用的接口来发送邮件。比如yagmail就是一个使用比较广泛的开源项目,它依旧使用smtplib和email模块,但是相对于直接使用smtplib和email模块,它提供了更加Pythonic的接口,并具有更好的易用性。
由于yagmail属于第三方库,在使用前需要先行安装
pip3 install yagmail
下面使用yagmail发送一封简单的邮件

如果要携带附件那么只需要在send后面添加即可

本文来自博客园,作者:I'm_江河湖海,转载请注明原文链接:https://www.cnblogs.com/jhhh/p/16765185.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库