python邮件模块
A. python怎么安装sendmail
Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。
您需要下载适用于您使用平台的二进制代码,然后安装Python。
如果您平台的二进制代码是不可用的,你需要使用C编译器手动编译源代码。
编译的源代码,功能上有更多的选择性, 为python安装提供了更多的灵活性。。。
B. python电子邮件系列(三)之POP接收邮件
由上篇文章我们已经得知邮件从发送到接收的过程:
发件人->MUA->MTA->若干MTA->MDA->MUA->收件人
本节接收邮件主要就是编写一个 MUA 客户端,从 MDA 将邮件取回本地。
收取邮件最常用的是 POP协议 ,目前版本是第三版,也称 POP3 。python内置了 poplib 模块,支持POP3协议。
回想上一节 SMTP ,我们对要发送的邮件内容进行了各种编码,包括添加MIME header,编码之后再进行发送。
因此,我们通过POP3协议接收的也不是原内容,而是经过一系列编码等处理的文本。
所以,要想把POP3收取的文本变为可阅读的邮件对象,就需要利用 email 模块对原始邮件进行解析。
所以,邮件收取的流程就是:
由上一篇 文章 最后总结部分可知。邮件由字符到发送到网络经历了如下的格式转化:
纯文本:
str->bytes->base64->str->bytes
二进制文件:
binary code->base64->str->bytes
我们解析邮件也是按这个思路,逆序解析出内容。
这里的 decode('utf-8') 先把字节流转化为字符串,再将字符串转化为 message 结构的对象。这步与发送邮件的 as_string 函数相反。
先从上一节结构化的 msg 中取出信件头,打印出来。
如果是 multipart 结构, get_payload 函数会返回一个包含不同part的list,然后对每一part递归调用 print_info ,打印子信件头和子信件内容。
不是 multipart 时,之后再依据 Content-Type 作不同处理:
如果是 text :
利用 get_payload(decode = Ture) 取出子信件的内容, decode 为True,则按照 Content-Transfer-Type 将 base64 或 QP 解码为 bytes 。
再 guess_charset 猜出编码方式,之后将其解码为字符显示。
如果不是 Text 对象,则为附件:
打印出附件的 Content-Type 。
C. 如何通过python自动发邮件
通过Python自动发送邮件可以利用内置的`smtplib`库或更高级封装库`yagmail`。以下是基本步骤指南和使用`smtplib`库的示例代码。
### 使用 `smtplib` 库发送邮件的基本步骤
1. **导入模块**
python
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
2. **设置邮件内容**
使用`MIMEMultipart`创建邮件对象,添加发件人、收件人、主题和正文。
python
msg = MIMEMultipart()
msg['From'] = '发件人邮箱地址'
msg['To'] = '收件人邮箱地址'
msg['Subject'] = '邮件主题'
# 邮件正文(纯文本)
body = '这是邮件正文'
msg.attach(MIMEText(body, 'plain', 'utf-8'))
3. **添加附件(如需)**
读取文件并作为附件添加到邮件中。
python
with open('附件路径', 'rb') as f:
attachment = MIMEApplication(f.read(), _subtype='pdf')
attachment.add_header('Content-Disposition', 'attachment', filename='附件名.pdf')
msg.attach(attachment)
4. **连接SMTP服务器并身份验证**
选择合适的SMTP服务器和端口连接,输入邮箱地址和密码或授权码。
python
server = smtplib.SMTP_SSL('smtp.qq.com', 465) # 其他服务商使用相应SMTP服务器和端口
server.login('发件人邮箱地址', '授权码或密码') # 使用授权码而非原始密码
5. **发送邮件**
使用`server.sendmail`函数发送邮件。
python
server.sendmail(msg['From'], msg['To'], msg.as_string())
6. **断开连接**
结束与SMTP服务器的连接。
python
server.quit()
### 使用 `yagmail` 库简化发送邮件
首先,使用`pip install yagmail`安装库。
使用`yagmail`发送邮件示例:
python
import yagmail
# 初始化yagmail客户端
yag = yagmail.SMTP(user='发件人邮箱地址', password='授权码')
# 发送邮件
contents = ['邮件正文']
to = ['收件人邮箱地址']
subject = '邮件主题'
yag.send(to=to, subject=subject, contents=contents)
# 如果有附件,可以直接在contents中添加文件路径
attachments = ['附件路径']
yag.send(to=to, subject=subject, contents=contents, attachments=attachments)
确保你已获取合适的SMTP服务地址、端口信息及授权码,邮件服务通常支持SSL加密,SMTP_SSL端口为465。调整示例代码以匹配实际需求。