Python SMTP协议发送邮件

       几乎所有编程语言都支持发送和接收电子邮件,Python也不例外。本节我们将学习使用Python来发送邮件。

一、电子邮件发送流程

       假设我们自己的电子邮件地址是xxx@163.com,对方的电子邮件地址是xxx@qq.com,现在我们用邮件客户端软件(如Outlook或者Foxmail)写好邮件,填上对方Email地址,点击“发送”,电子邮件就发送出去了。

       邮件客户端软件被称为MUA(Mail User Agent——邮件用户代理),Email从邮件用户代理(MUA)发送出去,不是直接到达对方电脑,而是发到MTA(Mail Transfer Agent——邮件传输代理),就是那些Email服务提供商,如网易、新浪等等。由于我们自己的电子邮件是163.com,所以,Email首先被投递到网易提供的MTA,再由网易的MTA发到对方服务商,也就是腾讯的MTA。这个过程中间可能还会经过别的MTA,但是我们不关心具体路线,我们只关心速度。Email到达腾讯的MTA后,由于对方使用的是qq.com的邮箱,因此,腾讯的MTA会把Email投递到邮件的最终目的地MDA(Mail Delivery Agent——邮件投递代理)。Email到达MDA后,就静静地躺在腾讯的某个服务器上,存放在某个文件或特殊的数据库里,我们将这个长期保存邮件的地方称之为电子邮箱。对方要取到邮件,必须通过MUA从MDA上把邮件取到自己的电脑上。

       简单总结上述内容,一封电子邮件的旅程就是:

发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人

       有了上述基本概念,要编写程序来发送和接收邮件,本质上就是:

               1.编写MUA把邮件发到MTA;

               2.编写MUA从MDA上收邮件。

       发邮件时,MUA和MTA使用的协议就是SMTP:Simple Mail Transfer Protocol,后面的MTA到另一个MTA也是用SMTP协议。

       收邮件时,MUA和MDA使用的协议有两种:①POP:Post Office Protocol,目前版本是3,俗称POP3;②IMAP:Internet Message Access Protocol,目前版本是4,优点是不但能取邮件,还可以直接操作MDA上存储的邮件,比如从收件箱移到垃圾箱,等等。

 二、开通邮箱授权码

1. QQ邮箱授权码获取(QQ邮箱-->其他邮箱)

       用第三方客户端登录QQ邮箱时不是用QQ邮箱密码,而是要使用授权码,那么如何获取QQ邮箱授权码呢?这个授权码获取步骤为:QQ邮箱网页版进入设置—>账户—>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务—>点击POP3/SMTP服务后边的开启按钮—>进入验证密保页面,可以选择使用密保手机发短信“配置邮件客户端”到1069 0700 69,发送完成后,点击我已发送—>验证通过后生成一组16位授权码,页面弹窗显示验证码,注意保存。

       在第三方邮箱客户端上设置QQ邮箱时就拿它当邮箱密码输入,但QQ邮箱的真正密码并没有改变,还是原来的密码。不用每一次登录都要重新生成授权码,已经使用的授权码可一直使用,直到更改QQ密码或邮箱密码,才会使旧的授权码过期,需要重新获取。

     2.网易邮箱获取授权码(网易邮箱-->其他邮箱)

       网易邮箱开启POP3协议获得授权码步骤为:登录网易邮箱—>设置—>POP3/SMTP/IMAP—>在弹出的页面中勾选POP3/SMTP服务—>勾选之后系统会立刻弹出一个提醒界面,选择“确定”即可!—>在新弹出的授权界面中将授权码设置为“开启”模式—>由于获取授权码需要接收手机验证,因此建议大家在操作之前先将手机绑定一下!—>获取验证码之后我们将验证码输入就可以开始设置授权码—>进入授权码设置界面,自定义授权码之后使用“确定”按钮保存即可—>授权码设置好之后会出现提示界面,在这里直接使用“确定”按钮进行关闭,不用点击别的项目!

       注:验证码每天好像只能输入3次,请在确定手机能收取短信的情况下获取验证码!

三、SMTP发送邮件

       首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用SMTP协议。SMTP协议的默认TCP端口号是25。Python对SMTP支持有smtplibemail两个模块,email负责构造邮件,smtplib负责发送邮件。

      1.纯文本邮件

#构造最简单的纯文本邮件:QQ邮箱 —>网易邮箱
'''
控制台输入参数说明:
    from_addr:用户qq邮箱名,xxx@qq.com
    passwoed:16位qq邮箱授权码
    to_addr:用户163邮箱名,xxx@163.com
    smtp_server:qq SMTP服务器地址(即要发到哪个MTA上):smtp.qq.com,如果是网易邮箱—>QQ邮箱,改为smtp.163.com

'''
from email.mime.text import MIMEText
#1.构造纯文本文件
#构造MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype,传入'plain'表示
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值