如何使用Python脚本来处理电子邮件?
本文我们将学习如何使用脚本来处理电子邮件。首先,我们将学习电子邮件消息格式,并使用模块发送和接收电子邮件。然后将学习使用的Email程序包发送带附件和HTML内容的电子邮件。最后将学习电子邮件的不同协议。
本章将介绍以下内容。
1邮件消息格式
本节我们将学习电子邮件的消息格式。电子邮件包含3个主要组件,如下所示。
消息中还包括其他组件,例如主题行、电子邮件签名和附件等。
下面是一个简单的示例程序,它通过Gmail邮箱发送纯文本电子邮件,我们可以从中了解如何编写电子邮件并发送邮件。现在创建一个脚本,命名为.py,并在其中添加以下代码。
import smtplib
import getpass
host_name = "smtp.gmail.com"
port = 465
sender = 'sender_emil_id'
receiver = 'receiver_email_id'
password = getpass.getpass()
msg = """\
Subject: Test Mail
Hello from Sender !!"""
s = smtplib.SMTP_SSL(host_name, port)
s.login(sender, password)
s.sendmail(sender, receiver, msg)
s.quit()
print("Mail sent successfully")
运行脚本程序,如下所示。
student@ubuntu:~/work/Chapter_11$ python3 write_email_message.py
输出如下。
Password:
Mail sent successfully
上面的示例程序使用的模块发送了电子邮件。首先确认是通过Gmail邮箱向收件人发送电子邮件。变量保存发件人的电子邮件地址。变量中,可以直接输入密码,也可以使用模块在运行时提示输入密码,这里使用提示输入密码。接下来创建了一个变量msg,它存储了电子邮件消息的内容,其中首先指出了邮件主题,然后是将要发送的消息正文。然后,在login()函数中,传入了和变量。之后在()函数中,传入了、和msg变量。如此,就可成功发送电子邮件。
2添加HTML和多媒体内容
本节我们将了解如何添加HTML内容,以及如何将多媒体内容作为附件发送。这里使用的Email程序包。
首先我们来看如何添加HTML内容。创建一个脚本,命名为.py,并在其中添加以下代码。
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import getpass
host_name = 'smtp.gmail.com'
port = 465
sender = 'sender_emailid'
password = getpass.getpass()
receiver = 'receiver_emailid'
text = MIMEMultipart()
text['Subject'] = 'Test HTML Content'
text['From'] = sender
text['To'] = receiver
msg = """\
Hello there,
Good day !!
Home
"""
html_content = MIMEText(msg, "html")
text.attach(html_content)
s = smtplib.SMTP_SSL(host_name, port)
print("Mail sent successfully !!")
s.login(sender, password)
s.sendmail(sender, receiver, text.as_string())
s.quit()
运行脚本程序,如下所示。
student@ubuntu:~/work/Chapter_11$ python3 add_html_content.py
输出如下。
Password:
Mail sent successfully !!
在上面的示例程序中,使用了Email程序包发送包含HTML内容的消息。其中的msg变量用于存储HTML内容。
现在我们来学习如何添加附件,并通过脚本发送带附件的电子邮件。创建一个脚本,命名为.py,并在其中添加以下代码。
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
import getpass
host_name = 'smtp.gmail.com'
port = 465
sender = 'sender_emailid'
password = getpass.getpass()
receiver = 'receiver_emailid'
text = MIMEMultipart()
text['Subject'] = 'Test Attachment'
text['From'] = sender
text['To'] = receiver
txt = MIMEText('Sending a sample image.')
text.attach(txt)
f_path = 'path_of_file'
with open(f_path, 'rb') as f:
img = MIMEImage(f.read())
img.add_header('Content-Disposition',
'attachment',
filename=os.path.basename(f_path))
text.attach(img)
s = smtplib.SMTP_SSL(host_name, port)
print("Attachment sent successfully !!")
s.login(sender, password)
s.sendmail(sender, receiver, text.as_string())
s.quit()
运行脚本程序,如下所示。
student@ubuntu:~/work/Chapter_11$ python3 add_attachment.py
输出如下。
Password:
Attachment sent successfully !!
上面的示例程序中,首先给出了发件人和收件人的电子邮件ID。然后在中,给出了作为附件发送的图像的文件路径。最后将该图像作为附件发送给收件人。
3POP3和IMAP服务器
本节我们将学习如何通过POP3和IMAP服务器接收电子邮件。提供了和模块,用于通过脚本接收电子邮件。
3.1使用模块接收电子邮件
POP3代表邮局协议版本3(Post 3)。此标准协议可帮助我们接收从远程服务器发送到本地计算机的电子邮件。POP3的主要优点是允许将电子邮件下载到本地计算机上,从而可以离线阅读下载的电子邮件。
POP3使用两个端口。
现在我们来看一些示例程序,首先是一个接收大量电子邮件的示例程序。创建一个脚本,命名为.py,并在其中添加以下代码。
import poplib
import getpass
pop3_server = 'pop.gmail.com'
username = 'Emaild_address'
password = getpass.getpass()
email_obj = poplib.POP3_SSL(pop3_server)
print(email_obj.getwelcome())
email_obj.user(username)
email_obj.pass_(password)
email_stat = email_obj.stat()
print("New arrived e-Mails are : %s (%s bytes)" % email_stat)
运行脚本程序,如下所示。
student@ubuntu:~$ python3 number_of_emails.py
程序输出的是邮箱中相当数量的电子邮件。
上面的示例首先导入模块,该模块在中通过POP3安全地接收电子邮件。然后,指定了具体的电子邮件服务器和电子邮件证书,即用户名和密码。之后输出来自服务器的响应消息,并向POP3 SSL服务器提供用户名和密码。登录后,程序会收到邮箱统计信息,并在终端输出多封电子邮件。
首先,我们编写一个脚本来获取最新的电子邮件。创建一个脚本,命名为.py接收邮件服务器,并在其中添加以下代码。
import poplib
import getpass
pop3_server = 'pop.gmail.com'
username = 'Emaild_address'
password = getpass.getpass()
email_obj = poplib.POP3_SSL(pop3_server)
print(email_obj.getwelcome())
email_obj.user(username)
email_obj.pass_(password)
print("\nLatest Mail\n")
latest_email = email_obj.retr(1)
print(latest_email[1])
运行脚本程序,如下所示。
student@ubuntu:~$ python3 latest_email.py
这将获取最近收到的邮件。
在上面的示例程序中,导入了中的模块,并通过POP3安全地接收电子邮件。在给出指定的电子邮件服务器以及用户名和密码后,程序输出了来自服务器的响应消息,并向POP3 SSL服务器提供用户名和密码,然后从邮箱中获取最新的电子邮件。
然后,编写一个脚本来获取所有电子邮件。创建一个脚本.py,并在其中添加以下代码。
import poplib
import getpass
pop3_server = 'pop.gmail.com'
username = 'Emaild_address'
password = getpass.getpass()
email_obj = poplib.POP3_SSL(pop3_server)
print(email_obj.getwelcome())
email_obj.user(username)
email_obj.pass_(password)
email_stat = email_obj.stat()
NumofMsgs = email_stat[0]
for i in range(NumofMsgs):
for mail in email_obj.retr(i+1)[1]:
print(mail)
运行脚本程序,如下所示。
student@ubuntu:~$ python3 latest_email.py
这将获取邮箱中所有电子邮件。
3.2使用模块接收电子邮件
IMAP代表消息访问协议( ),它通过本地计算机访问远程服务器上的电子邮件。IMAP允许多个客户端同时访问服务器上用户的电子邮件。当用户需要在不同客户端访问电子邮件时,更适合用IMAP完成这类操作。
IMAP使用两个端口。
现在我们来看一个使用模块的示例程序。创建一个脚本,命名为.py,并在其中添加以下代码。
import imaplib
import pprint
import getpass
imap_server = 'imap.gmail.com'
username = 'Emaild_address'
password = getpass.getpass()
imap_obj = imaplib.IMAP4_SSL(imap_server)
imap_obj.login(username, password)
imap_obj.select('Inbox')
temp, data_obj = imap_obj.search(None, 'ALL')
for data in data_obj[0].split():
temp, data_obj = imap_obj.fetch(data, '(RFC822)')
print('Message: {0}\n'.format(data))
pprint.pprint(data_obj[0][1])
break
imap_obj.close()
运行脚本程序,如下所示。
student@ubuntu:~$ python3 imap_email.py
这将在指定文件夹中获取所有电子邮件。
在上面的示例程序中,首先导入了模块,该模块可以通过IMAP安全地接收电子邮件。然后,指定了电子邮件服务器和电子邮件证书,即用户名和密码。之后将该用户名和密码提供给IMAP SSL服务器。其中,在上使用()函数来显示收件箱中的所有邮件。然后使用for循环来逐个显示邮件消息。其中使用()函数格式化对象接收邮件服务器,并将其写入数据流。最后,程序关闭了连接。
4总结
在本章中,我们学习了如何在脚本中编写电子邮件消息,并且了解了 的模块,该模块可以使用脚本发送和接收电子邮件。还了解了如何通过POP3和IMAP接收电子邮件。提供了和模块,我们可以使用它们完成相关操作。
在第12章中,我们将学习和SSH。
5问题
1.什么是POP3和IMAP?
2.什么是for循环中的break和?举例说明。
3.什么是?
4.什么是负索引,为什么要使用负索引?
5.文件扩展名pyc和py有什么区别?
6.使用循环语句生成以下文本。
1010101
10101
101
1
1.从基础到高级编程,全面系统地介绍脚本在系统管理中的作用。
2.市场上少见的介绍将脚本应用于系统管理的图书。
3.本书附有配套资源,帮助读者学以致用,将所学应用到真实场景中。
随着时间的推移,不断发展并扩展了其与IT操作相关的功能。简单易学,但具有功能强大的库,可用于 编写脚本以解决实际问题并自动执行管理员的日常活动。本书的目的是通过完成一系列项目,帮助读者掌握在项目中使用脚本的方法。
本书首先介绍的安装,并讲解编程基础知识。然后,本书将侧重于解析整个开发过程,从配置到准备再到构建 不同的工具,包括IT管理员的日常活动(文本处理、正则表达式、文件存档和加密)、网络管理(套接字编程、电子邮 件处理、使用/SSH远程控制设备以及SNMP/DHCP等协议)、创建图形用户界面、网站处理(日志 文件处理、SOAP和REST API通信、Web抓取),以及数据库管理(MySQL和相似数据库数据管理、数据分析和报告)。学完本书,读者将能够使用功能构建强大的工具以解决具有挑战性的实际任务。
**读者将学到以下内容: **
■ 了解如何安装和调试脚本;
■ 了解和编写用于自动化测试和日常管理活动的脚本;
■ 了解如何编写用于文本处理、加密、解密和归档的脚本;
■ 处理PDF、Excel、CSV和文本文件,并生成报告;
■ 编写用于远程网络管理(包括处理电子邮件)的脚本;
■ 使用图形用户界面构建交互式工具;
■ 处理日志文件,以及SOAP和REST API的通信;
■ 自动化数据库管理并执行统计分析。
我来说两句