Python 发送邮件

最近通过python写了一个小的用例,现在demo基本上完成了,把用到的知识进行下梳理。
内容就由近到远吧,因为眼前用过的是最热乎的,也就是标题所说明的,发送邮件。

常用的电子邮件协议(此内容来自百度百科电子邮件协议)

常用的电子邮件协议有SMTP、POP3、IMAP4,它们隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110、143建立连接。

协议类型

SMTP协议

SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循SMTP协议的发送邮件服务器。SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

POP协议

POP邮局协议负责从邮件服务器中检索电子邮件。它要求邮件服务器完成下面几种任务之一:从邮件服务器中检索邮件并从服务器中删除这个邮件;从邮件服务器中检索邮件但不删除它;不检索邮件,只是询问是否有新邮件到达。POP协议支持多用户互联网邮件扩展,后者允许用户在电子邮件上附带二进制文件,如文字处理文件和电子表格文件等,实际上这样就可以传输任何格式的文件了,包括图片和声音文件等。在用户阅读邮件时,POP命令所有的邮件信息立即下载到用户的计算机上,不在服务器上保留。

POP3(Post Office Protocol 3)即邮局协议的第3个版本,是因特网电子邮件的第一个离线协议标准。

IMAP协议

互联网信息访问协议(IMAP)是一种优于POP的新协议。和POP一样,IMAP也能下载邮件、从服务器中删除邮件或询问是否有新邮件,但IMAP克服了POP的一些缺点。例如,它可以决定客户机请求邮件服务器提交所收到邮件的方式,请求邮件服务器只下载所选中的邮件而不是全部邮件。客户机可先阅读邮件信息的标题和发送者的名字再决定是否下载这个邮件。通过用户的客户机电子邮件程序,IMAP可让用户在服务器上创建并管理邮件文件夹或邮箱、删除邮件、查询某封信的一部分或全部内容,完成所有这些工作时都不需要把邮件从服务器下载到用户的个人计算机上。

支持种IMAP的常用邮件客户端有:ThunderMail,Foxmail,Microsoft Outlook等。

传输方式

Internet上传送电子邮件是通过一套称为邮件服务器的程序进行硬件管理并储存的。与个人计算机不同,这些邮件服务器及其程序必须每天24小时不停地运行,否则就不能收发邮件了,简单邮件传输协议SMTP(Simple Mail Transfer Protocol)和邮局协议POP(Post Office Protocol)是负责用客户机/服务器模式发送和检索电子邮件的协议。

用户计算机上运行的电子邮件客户机程序请求邮件服务器进行邮件传输,邮件服务器采用简单邮件传输协议标准。很多邮件传输工具,如outlook express、fox mail等,都遵守SMTP标准并用这个协议向邮件服务器发送邮件。SMTP协议规定了邮件信息的具体格式和邮件的管理方式。

邮箱设置

为了能够实时监听变化,我选择了邮箱来接收变化信息。这里,我们需要两个邮箱,一个用来发送变化信息,一个用来接收变化信息。这里,我使用了163邮箱进行了发送者。

开启SMTP功能

首先登录邮箱,设置--POP3/SMTP/IMAP开启SMTP功能。

Python 发送邮件_第1张图片
image.png

客户端授权密码

为了我们的账户安全,建议在邮箱中,开启一个客户端的授权密码,来供我们发送邮件时,登录使用。操作如下图:


Python 发送邮件_第2张图片
image.png

Python代码实现

上面的步骤完成,接下来就是代码实现。

# 倒入相关库
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr,formataddr
import smtplib

# encode方法
def format_addr(s):    
    name,addr = parseaddr(s)    
    return formataddr((Header(name,'utf-8').encode(),addr))

# 发送邮件方法
def send_email(title, subject, content):
    #发送者的邮箱地址
    from_addr = 'l**********@163.com'
    #授权密码
    from_pwd = 's**********'
    #接受者邮箱地址
    to_addr = 'l************@qq.com'
    #smtp服务器地址
    smtp_server = 'smtp.163.com'

    #发送内容设置
    msg = MIMEText(content, 'plain', 'utf-8')
    msg['From'] = format_addr('<%s>'%from_addr)
    msg['To'] = format_addr('Re<%s>'%to_addr)
    msg['Subject'] = Header(subject, 'utf-8').encode()

    #发送邮件 服务器和端口配置
    smtp = smtplib.SMTP_SSL(smtp_server,465)
    #测试环境下,打印出交互信息
    smtp.set_debuglevel(1)
    #登录账户
    smtp.login(from_addr, from_pwd)
    #发送邮件内容
    #正文是一个str,as_string()把MIMEText对象变成str
    smtp.sendmail(from_addr,to_addr,msg.as_string())
    smtp.quit()

    print 'email send success!'
    return

接收邮箱查看

在接收邮箱查看下,看您发送的内容是否成功接收到了呢?好了,今天的内容就到这里了!

参考内容:百度百科,百度知道等。

上面代码为markdown下直接敲入的,有的可能没有验证,可能出现关键字书写错误,如果直接拷贝出现错误,欢迎留言,谢谢!!!

你可能感兴趣的:(Python 发送邮件)