python smtp和yagmail发送邮件

1、邮件协议介绍

SMTP(Simple Mail Transfer Protocol)、POP3(Post Office Protocol version 3)和 IMAP(Internet Message Access Protocol)是电子邮件系统中使用的三种主要协议。它们各自承担着邮件服务中的不同职责,并且在使用场景和底层原理上有所不同。

  • SMTP 主要是用于发送邮件。

  • POP3 适合那些希望将邮件保存到本地而不占用服务器空间的用户。

  • IMAP 则更适合那些需要在多台设备间保持一致性的用户,因为它允许用户在服务器上管理和检索邮件。

2、邮件相关库

smptlib库:标准库,是互联网上传输电子邮件的标准协议。Python内置的smtplib模块提供了与SMTP服务器交互的功能,从而实现邮件的发送。

email.mime库:smtplib模块邮件内容主体的扩展,从原先默认只支持纯文本格式扩展到HTML,同时支持附件、音频、图像等格式,smtplib只负责邮件的投递即可。

from email.mime.text import MIMEText #构造一个MIMEText,表示文本邮件对象
#MIMEText对象中有三个需要我们设置的参数,一个是正文内容,一个是正文内容的类型,例如:”text/plain”和”text/html”,一个是正文内容的编码。
from email.mime.image import MIMEImage #构造一个MIMEImage,表示附件的图片邮件对象
from email.mime.multipart import MIMEMultipart #构造一个MIMEMultipart,表示整个邮件

yagmail库:yagmail 是一个 Python 包,旨在简化电子邮件的发送和接收。它建立在 Python 的 smtplib、email 和 keyring 模块之上,提供了一个高级的接口,使电子邮件操作更加容易。yagmail 的设计目标是使电子邮件发送和附件处理变得尽可能简单,同时保持灵活性。

3、smplib

python发送邮件存在以下步骤:登录邮件,编辑邮件内容,发送邮件。流程图参考网上:

(1)smtplib常用方法

  • smtplib.SMTP():初始化 SMTP 对象, 创建一个 SMTP 连接,也可以带上server和port连接到指定邮箱服务器。smtplib.SMTP(host, port)

  • smtplib.SMTP_SSL():初始化 SMTP 对象, 创建一个带有 SSL 加密的 SMTP 连接,也可以带上server和port连接到指定邮箱服务器。smtplib.SMTP_SSL(host, port)

  • SMTP.connect([host[,port]]):smtp对象没有连接到指定服务器可以用connect连接到指定服务器

  • obj.login(user,password):登录 SMTP 服务器。163和qq的password为授权码

  • obj.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]):发送邮件,其中 from_addr 是发件人地址,to_addrs 是收件人地址,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。

  • obj.quit():断开与 SMTP 服务器的连接。

  • obj.starttls():启用 TLS 安全传输协议,增加安全性。

  • obj.set_debuglevel(level):设置调试等级,输出调试信息。

通常情况下会使用smtplib.SMTP来实例化,但是有些邮件服务器好多企业邮件是支持安全邮件的,认为它是不安全的而报错,所以需要使用加密过的SMTP_SSL来实例化或者obj.starttls()启动安全传输协议,不可以同时开启ssl和tls。

SMTP邮件服务器常用端口

25:最古老的一个SMTP端口,通过明文传输数据,经常被用来恶意发送垃圾邮件,现在大多数云服务器都会禁用掉25出口。

465:是为SMTPS(SMTP-over-SS)协议开放的,使用SSL加密信息,可以防止黑客截取邮件,但并未得到IETF机构的认证,SMTP/SMTPS之间关系类似于HTTP/HTTPS。

587:TLS/STARTTLS,基于身份验证的,使用该端口的SMTP服务 客户端必须要登录验证身份才能发送邮件,有效的避免垃圾邮件。

邮箱 SMTP服务器 登录口令 支持加密方式 对应端口号
163 smtp.163.com 个人设置授权码 明文/SSL加密 25/465
126 smtp.126.com 个人设置授权码 明文/SSL加密 25/465
QQ smtp.qq.com 系统分配授权码 明文/SSL加密/TLS加密 25/465/587
Gmail smtp.gmail.com 邮箱登录密码 TLS加密 587

4、email.mime

一封Email邮件,不仅仅是有一些字符串组成的内容,它是一个结构,有收件人,发件人,抄送名单,邮件主题等等。要组织好这样一个结构,我们才能发送邮件。而组织Email邮件内容结构的任务,不属于smtplib模块范围,我们需要用到email模块(标准库中的模块)提供的一些工具。

(1)email.mime常用方法

在python中,MIME的这些对象的继承关系如下:

MIMEBase |-- MIMENonMultipart |-- MIMEApplication |-- MIMEAudio |-- MIMEImage |-- MIMEText |-- MIMEMultipart

一般不会用到MIMEBase,而是直接使用它的继承类。MIMEMultipart有attach方法,而MIMENonMultipart没有,只能被attach。MIME有很多种类型,这个略麻烦,如果附件是图片格式,我要用MIMEImage,如果是音频,要用MIMEAudio,如果是word、excel,我都不知道该用哪种MIME类型了,得上google去查。

最懒的方法就是,不管什么类型的附件,都用MIMEApplication,MIMEApplication默认子类型是application/octet-stream。application/octet-stream表明“这是个二进制的文件,希望你们那边知道怎么处理”,然后客户端,比如qq邮箱,收到这个声明后,会根据文件扩展名来猜测。

  1. email.mime.MIMEText()

    构造一个文本邮件对象,有三个参数

    _text:邮件正文内容,可以是纯文本或HTML格式。

    _subtype:邮件正文内容的类型,"plain"(纯文本)、“html”(HTML格式),默认为plain。

    _charset:邮件正文内容的编码方式,常用的有"utf-8"、"gbk"等。

  2. email.mime.MIMEImage()

    MIME

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值