Skip to content

Latest commit

 

History

History
183 lines (120 loc) · 10.8 KB

File metadata and controls

183 lines (120 loc) · 10.8 KB

十一、使用 Python 脚本处理电子邮件

在本章中,您将了解如何使用 Python 脚本处理电子邮件。您将了解电子邮件格式。我们将探索发送和接收电子邮件的smtplib模块。我们将使用 Python 电子邮件包发送带有附件和 HTML 内容的电子邮件。您还将了解用于处理电子邮件的不同协议。

在本章中,您将了解以下内容:

  • 电子邮件格式
  • 添加 HTML 和多媒体内容
  • POP3 和 IMAP 服务器

电子邮件格式

在本节中,我们将学习电子邮件格式。电子邮件由三个主要组成部分组成:

  • 收件人的电子邮件地址
  • 发件人的电子邮件地址
  • 信息

邮件格式中还包括其他组件,如主题行、电子邮件签名和附件。

现在,我们将看到一个从你的 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 Output: Password: Mail sent successfully

在前面的示例中,我们使用smtplibPython 模块发送电子邮件。确保您正在通过 Gmail ID 向收件人发送电子邮件。sender变量保存发件人的电子邮件地址。在password变量中,您可以输入密码,也可以使用getpass模块提示输入密码。在这里,我们提示输入密码。接下来,我们创建了一个名为msg的变量,它将成为我们的实际电子邮件。在这篇文章中,我们首先提到了一个主题,然后是我们想要发送的消息。然后,在login()中,我们提到了sender和password变量。接下来,在sendmail()中,我们提到了sender、receivers和text变量。因此,通过这个过程,我们成功地发送了电子邮件。

添加 HTML 和多媒体内容

在本节中,我们将了解如何将多媒体内容作为附件发送,以及如何添加 HTML 内容。为此,我们将使用 Pythonemail包。

首先,我们将了解如何添加 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.imdb.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 Output: Password: Mail sent successfully !!

在前面的示例中,我们使用电子邮件包通过 Python 脚本将 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 Output: Password: Attachment sent successfully !!

在前面的示例中,我们将图像作为附件发送到接收器。我们提到了发件人和收件人的电子邮件 ID。接下来,在f_path中,我们提到了作为附件发送的图像的路径。接下来,我们将该图像作为附件发送到接收器。

POP3 和 IMAP 服务器

在本节中,您将了解如何通过 POP 和 IMAP 服务器接收电子邮件。Python 提供了poplib和imaplib库,用于通过 Python 脚本接收电子邮件。

使用 poplib 库接收电子邮件

POP3代表邮局协议版本 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

作为输出,您将收到邮箱中收到的所有电子邮件。

使用 imaplib 库接收电子邮件

IMAP 代表 Internet 消息访问协议。它用于通过本地计算机访问远程服务器上的电子邮件。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库,它在 Python 中用于通过 IMAP 协议安全地接收电子邮件。然后,我们声明特定的电子邮件服务器和我们的用户凭据,即用户名和密码。之后,我们将该用户名和密码提供给 IMAP SSL 服务器。我们正在使用imap_obj上的'select('Inbox')'功能在收件箱中显示消息。然后我们使用一个for循环来显示一个接一个地获取的消息。为了显示消息,我们使用“pretty print”——即pprint.pprint()函数,因为它格式化对象,将其写入数据流,并将其作为参数传递。最后,连接被关闭。

**# 总结

在本章中,我们学习了如何用 Python 脚本编写电子邮件。我们还了解了 Pythonsmtplib模块,该模块用于通过 Python 脚本发送和接收电子邮件。我们还学习了如何通过 POP3 和 IMAP 协议接收电子邮件。Python 提供了我们可以执行任务的poplib和imaplib库。

在下一章中,您将了解 Telnet 和 SSH。

问题

  1. 什么是 POP3 和 IMAP?
  2. 中断和继续用于什么?举一个适当的例子。
  3. 什么是 pprint?
  4. 什么是负指数?为什么使用负指数?
  5. pyc和py文件扩展名之间有什么区别?
  6. 使用循环生成以下图案:
 1010101
 10101 
 101 
 1  
```**