场景:
-
工作沟通邮件;登陆注册;广告;修改密码、激活链接;邮件客户端…等。
-
邮件相关协议:
- SMTP(发):(simple mail transfer protocol)简单邮件传输协议。用于发邮件。
- POP3(收):(Post office protocol)邮件协议。将邮件服务器上资料同步到本地。用于收邮件。 开通以上两种协议后收邮件,发现可以正常收取,但有个问题,通过程序拉取的邮件已下载已阅读,但登陆官方邮件后发现之前下载的邮件仍然是未读状态。说明POP3协议只能简单的收件但不能标记邮件状态。
- IMAP(收,增强版):(internet mail access protocol),交互式邮件存取协议, POP3协议的增强版。标记已读、删除,跟官方邮件服务器状态保持同步,体验较好。
- SSL(加密):数据链路层加密, https基于此技术。qq邮箱的邮件协议也开启了这个加密,代码中注意配置SSL为True。
准备工作:开启邮箱协议 获得权限密钥
授权。各个邮件大同小异。这里以qq邮箱为例。
- qq邮箱首页
- qq邮箱首页/设置/账户 向下翻到POP3/IMAP/SMTP服务。
- 开启 IMAP/SMTP服务
图1> 通过qq端进入邮箱
图2> 点击设置/账户 进入配置页
图3> 向下翻到协议处
(重要)开启IMAP/SMTP协议
图4> 安全验证1
因为是代收,安全验证比较严,点击开启时会弹出验证。
(选做)如果之前qq未绑定手机,会先要求qq号开通二代密保,根据提示向下执行
图5> 安全验证2
如果已经绑定手机号,会看到以下内容
图6> 发短信内容”配置邮件客户端”到1069070069
发送后回到网页点击“我已发送”
图7> (重要)生成密码
验证成功后生成密钥。(建议把密钥先保存到txt备用,以免忘记.如果忘记再来一次验证)
内置包
smtplib 、poplib、 imaplib
第三方包
- zmail是一个邮件收发包。相比内置包,封装程度更高,使用更简单。缺点,有bug,不够流行。
- yagmail, star人数多,稳定,国外邮件公司开发的产品。缺点不会自动识别qq邮件域名,需要手动配置。 pip install yagmail 。注意anaconda环境中只安装这个包的旧版本。
接收邮件服务器 imap.qq.com 端口 993
发送邮件服务器 smtp.qq.com 端口 465或587
ssl开启
安装 pip install yagmail
示例(含html和附件)
# 邮箱内容为html,携带附件
import yagmail
import ossender = 'xxxx@qq.com' # 发送人(你自己的)
password = 'xxxxx' # 邮箱授权服务密码,注意不是qq邮箱 登陆密码
target = 'xxxxxx@qq.com' # 接收人
html = """
<html lang="zh"><head><meta charset="utf-8"><title>示例1<title></head><body><h1>测试</h1><p>dsjdsnewj</p><img src="https://www.baidu.com/img/bd_logo1.png"/></body>
</html>
"""
attachment_path = os.path.join(os.path.dirname(__file__), 'base2.png')
print(attachment_path)
contents = ['测试yagmail示例', html, attachment_path] # [正文, 正文, 附件]yag = yagmail.SMTP(user=sender, password=password, host='smtp.qq.com', port=465, smtp_ssl=True)
yag.send(to=target, subject='yagmail示例', contents=contents) # 群发的话收件人为列表
print('已发送')