如何使用Python脚本来处理电子邮件?

本文我们将学习如何使用Python脚本来处理电子邮件。首先,我们将学习电子邮件消息格式,并使用smtplib模块发送和接收电子邮件。然后将学习使用Python的Email程序包发送带附件和HTML内容的电子邮件。最后将学习电子邮件的不同协议。

本章将介绍以下内容。

  • 邮件消息格式。
  • 添加HTML和多媒体内容。
  • POP3和IMAP服务器。

1 邮件消息格式

本节我们将学习电子邮件的消息格式。电子邮件包含3个主要组件,如下所示。

  • 收件人的邮件地址。
  • 发件人的邮件地址。
  • 消息。

消息中还包括其他组件,例如主题行、电子邮件签名和附件等。

下面是一个简单的示例程序,它通过Gmail邮箱发送纯文本电子邮件,我们可以从中了解如何编写电子邮件并发送邮件。现在创建一个脚本,命名为write_email_message.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

上面的示例程序使用Python的smtplib模块发送了电子邮件。首先确认是通过Gmail邮箱向收件人发送电子邮件。变量sender保存发件人的电子邮件地址。变量password中,可以直接输入密码,也可以使用getpass模块在运行时提示输入密码,这里使用getpass提示输入密码。接下来创建了一个变量msg,它存储了电子邮件消息的内容,其中首先指出了邮件主题,然后是将要发送的消息正文。然后,在login()函数中,传入了senderpassword变量。之后在sendmail()函数中,传入了senderreceiversmsg变量。如此,就可成功发送电子邮件。

2 添加HTML和多媒体内容

本节我们将了解如何添加HTML内容,以及如何将多媒体内容作为附件发送。这里使用Python的Email程序包。

首先我们来看如何添加HTML内容。创建一个脚本,命名为add_html_content.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 = """\
<html>
  <body>
    <p>Hello there, <br>
       Good day !!<br>
       <a href="http://www.baidu.com">Home</a>
    </p>
  </body>
</html>
"""

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内容。

现在我们来学习如何添加附件,并通过Python脚本发送带附件的电子邮件。创建一个脚本,命名为add_attachment.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。然后在f_path中,给出了作为附件发送的图像的文件路径。最后将该图像作为附件发送给收件人。

3 POP3和IMAP服务器

本节我们将学习如何通过POP3和IMAP服务器接收电子邮件。Python提供了poplibimaplib模块,用于通过Python脚本接收电子邮件。

3.1 使用poplib模块接收电子邮件

POP3代表邮局协议版本3(Post Office Protocol version 3)。此标准协议可帮助我们接收从远程服务器发送到本地计算机的电子邮件。POP3的主要优点是允许将电子邮件下载到本地计算机上,从而可以离线阅读下载的电子邮件。

POP3使用两个端口。

  • 端口110:默认的不加密端口。
  • 端口995:加密端口。

现在我们来看一些示例程序,首先是一个接收大量电子邮件的示例程序。创建一个脚本,命名为number_of_emails.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

程序输出的是邮箱中相当数量的电子邮件。

上面的示例首先导入poplib模块,该模块在Python中通过POP3安全地接收电子邮件。然后,指定了具体的电子邮件服务器和电子邮件证书,即用户名和密码。之后输出来自服务器的响应消息,并向POP3 SSL服务器提供用户名和密码。登录后,程序会收到邮箱统计信息,并在终端输出多封电子邮件。

首先,我们编写一个脚本来获取最新的电子邮件。创建一个脚本,命名为latest_email.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

这将获取最近收到的邮件。

在上面的示例程序中,导入了Python中的poplib模块,并通过POP3安全地接收电子邮件。在给出指定的电子邮件服务器以及用户名和密码后,程序输出了来自服务器的响应消息,并向POP3 SSL服务器提供用户名和密码,然后从邮箱中获取最新的电子邮件。

然后,编写一个脚本来获取所有电子邮件。创建一个脚本all_emails.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 使用imaplib模块接收电子邮件

IMAP代表Internet消息访问协议(Internet Message Access Protocol),它通过本地计算机访问远程服务器上的电子邮件。IMAP允许多个客户端同时访问服务器上用户的电子邮件。当用户需要在不同客户端访问电子邮件时,更适合用IMAP完成这类操作。

IMAP使用两个端口。

  • 端口143:默认的不加密端口。
  • 端口993:加密端口。

现在我们来看一个使用imaplib模块的示例程序。创建一个脚本,命名为imap_email.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

这将在指定文件夹中获取所有电子邮件。

在上面的示例程序中,首先导入了imaplib模块,该模块可以通过IMAP安全地接收电子邮件。然后,指定了电子邮件服务器和电子邮件证书,即用户名和密码。之后将该用户名和密码提供给IMAP SSL服务器。其中,在imap_obj上使用select()函数来显示收件箱中的所有邮件。然后使用for循环来逐个显示邮件消息。其中使用pprint()函数格式化对象,并将其写入数据流。最后,程序关闭了连接。

4 总结

在本章中,我们学习了如何在Python脚本中编写电子邮件消息,并且了解了Python 的smtplib模块,该模块可以使用Python脚本发送和接收电子邮件。还了解了如何通过POP3和IMAP接收电子邮件。Python提供了poplibimaplib模块,我们可以使用它们完成相关操作。

在第12章中,我们将学习Telnet和SSH。

5 问题

1.什么是POP3和IMAP?

2.什么是for循环中的breakcontinue?举例说明。

3.什么是pprint

4.什么是负索引,为什么要使用负索引?

5.文件扩展名pyc和py有什么区别?

6.使用循环语句生成以下文本。

1010101
   10101
     101
       1

本文摘自《写给系统管理员的Python脚本编程指南》

1.从基础到高级编程,全面系统地介绍Python脚本在系统管理中的作用。
2.市场上少见的介绍将Python脚本应用于系统管理的图书。
3.本书附有配套资源,帮助读者学以致用,将所学应用到真实场景中。

随着时间的推移,Python不断发展并扩展了其与IT操作相关的功能。Python简单易学,但具有功能强大的库,可用于 编写脚本以解决实际问题并自动执行管理员的日常活动。本书的目的是通过完成一系列项目,帮助读者掌握在项目中使用Python脚本的方法。

本书首先介绍Python的安装,并讲解编程基础知识。然后,本书将侧重于解析整个开发过程,从配置到准备再到构建 不同的工具,包括IT管理员的日常活动(文本处理、正则表达式、文件存档和加密)、网络管理(套接字编程、电子邮 件处理、使用Telnet/SSH远程控制设备以及SNMP/DHCP等协议)、创建图形用户界面、网站处理(Apache日志 文件处理、SOAP和REST API通信、Web抓取),以及数据库管理(MySQL和相似数据库数据管理、数据分析和报告)。学完本书,读者将能够使用Python功能构建强大的工具以解决具有挑战性的实际任务。

**读者将学到以下内容: **
■ 了解如何安装Python和调试Python脚本;
■ 了解和编写用于自动化测试和日常管理活动的脚本;
■ 了解如何编写用于文本处理、加密、解密和归档的脚本;
■ 处理PDF、Excel、CSV和文本文件,并生成报告;
■ 编写用于远程网络管理(包括处理电子邮件)的脚本;
■ 使用图形用户界面构建交互式工具;
■ 处理Apache日志文件,以及SOAP和REST API的通信;
■ 自动化数据库管理并执行统计分析。

发布了516 篇原创文章 · 获赞 292 · 访问量 88万+

猜你喜欢

转载自blog.csdn.net/epubit17/article/details/104254215