廖雪峰《python3 基础教程》读书笔记——第十九章 电子邮件

本文介绍了Python3中处理电子邮件的流程,包括MUA、MTA、MDA的角色,以及SMTP和POP3协议的使用。讲解了如何使用Python的smtplib和email模块发送邮件,包括纯文本、HTML邮件和带附件的邮件,并展示了如何通过POP3协议接收邮件。此外,还涵盖了邮件头部信息的设置,如From、To、Subject等,以及邮件的加密发送。文章提供了一整套使用Python发送和接收邮件的示例代码。
摘要由CSDN通过智能技术生成

第十九章 电子邮件

MUA:mail user agent——邮件用户代理

MTA:mail transfer agent——邮件传输代理

MDA:mail delivery agent——邮件投递代理

1、email邮件处理流程

假设我们自己的邮件地址是me@163.com,对方邮件地址是friend@sina.com

1)用outlook或foamail写好邮件,填上对方地址,点击发送,电子邮件就发送了出去。这些电子邮件软件被称为MUA

2)email从MUA发出去,不是直接到达对方电脑,而是发送到MTA,即email服务提供商,如网易、新浪等。由于我们自己的电子邮件是163.com,所以email首先被投递到网易提供的MTA,再由网易的MTA发送到对方服务商,即新浪MTA

3)email到达新浪MTA后,由于对方是用的是@sina.com的邮箱,新浪MTA会把email投递到最终目的地MDA。Email到达MDA后,就静静的躺在新浪的某个服务器上,存放在某个文件或特殊的数据库里,将这个长期保存邮件的地方称为电子邮箱。

4)email不会直接到达对方的电脑,因为对方电脑不一定开机,开机也不一定联网。对方要取到邮件,必须通过MUA从MDA上把邮件取到自己的电脑上。

一封电子邮件的流程就是:

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

2、要编写程序来发送和接收邮件,本质上就是:

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上存储的邮件,比如从收件箱移到垃圾箱,等等。

邮件客户端软件在发邮件时,会让你先配置SMTP服务器,也就是你要发到哪个MTA上。假设你正在使用163的邮箱,你就不能直接发到新浪的MTA上,因为它只服务新浪的用户,所以,你得填163提供的SMTP服务器地址:smtp.163.com,为了证明你是163的用户,SMTP服务器还要求你填写邮箱地址和邮箱口令,这样,MUA才能正常地把Email通过SMTP协议发送到MTA。

类似的,从MDA收邮件时,MDA服务器也要求验证你的邮箱口令,确保不会有人冒充你收取你的邮件,所以,Outlook之类的邮件客户端会要求你填写POP3或IMAP服务器地址、邮箱地址和口令,这样,MUA才能顺利地通过POP或IMAP协议从MDA取到邮件。

在使用Python收发邮件前,请先准备好至少两个电子邮件,如xxx@163.com,xxx@sina.com,xxx@qq.com等,注意两个邮箱不要用同一家邮件服务商。

19.1 SMTP发送邮件

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

首先,我们来构造一个最简单的纯文本邮件:

from email.mime.text import MIMEText

msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')

注意到构造MIMEText对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype,传入'plain'表示纯文本,最终的MIME就是'text/plain',最后一定要用utf-8编码保证多语言兼容性。

然后,通过SMTP发出去:

# 输入Email地址和口令:

from_addr = input('From: ')

password = input('Password: ')

# 输入收件人地址:

to_addr = input('To: ')

# 输入SMTP服务器地址:

smtp_server = input('SMTP server: ')

import smtplib

server = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25

server.set_debuglevel(1)

server.login(from_addr, password)

server.sendmail(from_addr, [to_addr], msg.as_string())

server.quit()

我们用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。SMTP协议就是简单的文本命令和响应。login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,由于可以一次发给多个人,所以传入一个list,邮件正文是一个str,as_string()把MIMEText对象变成str。

如果一切顺利,就可以在收件人信箱中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值