龙空技术网

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

异步社区 189

前言:

此刻同学们对“python读取邮件”大概比较珍视,同学们都想要知道一些“python读取邮件”的相关资讯。那么小编也在网络上收集了一些关于“python读取邮件””的相关资讯,希望你们能喜欢,姐妹们快快来了解一下吧!

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

本章将介绍以下内容。

· 邮件消息格式。

· 添加HTML和多媒体内容。

· POP3和IMAP服务器。

1 邮件消息格式

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

· 收件人的邮件地址。

· 发件人的邮件地址。

· 消息。

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

下面是一个简单的示例程序,它通过Gmail邮箱发送纯文本电子邮件,我们可以从中了解如何编写电子邮件并发送邮件。现在创建一个脚本,命名为write_email_message.py,并在其中添加以下代码。

1. import smtplib
2. import getpass
3. 
4. host_name = "smtp.gmail.com"
5. port = 465
6. 
7. sender = 'sender_emil_id'
8. receiver = 'receiver_email_id'
9. password = getpass.getpass()
10. 
11. msg = """\
12. Subject: Test Mail
13. Hello from Sender !!"""
14. 
15. s = smtplib.SMTP_SSL(host_name, port)
16. s.login(sender, password)
17. s.sendmail(sender, receiver, msg)
18. s.quit()
19. 
20. print("Mail sent successfully")

运行脚本程序,如下所示。

1. student@ubuntu:~/work/Chapter_11$ python3 write_email_message.py

输出如下。

1. Password:
2. Mail sent successfully

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

2 添加HTML和多媒体内容

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

首先我们来看如何添加HTML内容。创建一个脚本,命名为add_html_content.py,并在其中添加以下代码。

1. import os
2. import smtplib
3. from email.mime.text import MIMEText
4. from email.mime.multipart import MIMEMultipart
5. import getpass
6. 
7. host_name = 'smtp.gmail.com'
8. port = 465
9. 
10. sender = 'sender_emailid'
11. password = getpass.getpass()
12. receiver = 'receiver_emailid'
13. 
14. text = MIMEMultipart()
15. text['Subject'] = 'Test HTML Content'
16. text['From'] = sender
17. text['To'] = receiver
18. 
19. msg = """\
20. <html>
21.   <body>
22.     <p>Hello there, <br>
23.        Good day !!<br>
24.        <a href=";>Home</a>
25.     </p>
26.   </body>
27. </html>
28. """
29. 
30. html_content = MIMEText(msg, "html")
31. text.attach(html_content)
32. s = smtplib.SMTP_SSL(host_name, port)
33. print("Mail sent successfully !!")
34. 
35. s.login(sender, password)
36. s.sendmail(sender, receiver, text.as_string())
37. s.quit()

运行脚本程序,如下所示。

1. student@ubuntu:~/work/Chapter_11$ python3 add_html_content.py

输出如下。

1. Password:
2. Mail sent successfully !!

在上面的示例程序中,使用了Email程序包发送包含HTML内容的消息。其中的msg变量用于存储HTML内容。

现在我们来学习如何添加附件,并通过Python脚本发送带附件的电子邮件。创建一个脚本,命名为add_attachment.py,并在其中添加以下代码。

1. import os
2. import smtplib
3. from email.mime.text import MIMEText
4. from email.mime.image import MIMEImage
5. from email.mime.multipart import MIMEMultipart
6. import getpass
7. 
8. host_name = 'smtp.gmail.com'
9. port = 465
10. 
11. sender = 'sender_emailid'
12. password = getpass.getpass()
13. receiver = 'receiver_emailid'
14. 
15. text = MIMEMultipart()
16. text['Subject'] = 'Test Attachment'
17. text['From'] = sender
18. text['To'] = receiver
19. 
20. txt = MIMEText('Sending a sample image.')
21. text.attach(txt)
22. f_path = 'path_of_file'
23. with open(f_path, 'rb') as f:
24.     img = MIMEImage(f.read())
25. img.add_header('Content-Disposition',
26.                'attachment',
27.                filename=os.path.basename(f_path))
28. 
29. text.attach(img)
30. s = smtplib.SMTP_SSL(host_name, port)
31. print("Attachment sent successfully !!")
32. s.login(sender, password)
33. s.sendmail(sender, receiver, text.as_string())
34. s.quit()

运行脚本程序,如下所示。

1. student@ubuntu:~/work/Chapter_11$ python3 add_attachment.py

输出如下。

1. Password:
2. Attachment sent successfully !!

上面的示例程序中,首先给出了发件人和收件人的电子邮件ID。然后在f_path中,给出了作为附件发送的图像的文件路径。最后将该图像作为附件发送给收件人。

3 POP3和IMAP服务器

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

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

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

POP3使用两个端口。

· 端口110:默认的不加密端口。

· 端口995:加密端口。

现在我们来看一些示例程序,首先是一个接收大量电子邮件的示例程序。创建一个脚本,命名为number_of_emails.py,并在其中添加以下代码。

1. import poplib
2. import getpass
3. 
4. pop3_server = 'pop.gmail.com'
5. username = 'Emaild_address'
6. password = getpass.getpass()
7. 
8. email_obj = poplib.POP3_SSL(pop3_server)
9. print(email_obj.getwelcome())
10. email_obj.user(username)
11. email_obj.pass_(password)
12. email_stat = email_obj.stat()
13. print("New arrived e-Mails are : %s (%s bytes)" % email_stat)

运行脚本程序,如下所示。

1. student@ubuntu:~$ python3 number_of_emails.py

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

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

首先,我们编写一个脚本来获取最新的电子邮件。创建一个脚本,命名为latest_email.py,并在其中添加以下代码。

1. import poplib
2. import getpass
3. 
4. pop3_server = 'pop.gmail.com'
5. username = 'Emaild_address'
6. password = getpass.getpass()
7. 
8. email_obj = poplib.POP3_SSL(pop3_server)
9. print(email_obj.getwelcome())
10. email_obj.user(username)
11. email_obj.pass_(password)
12. 
13. print("\nLatest Mail\n")
14. latest_email = email_obj.retr(1)
15. print(latest_email[1])

运行脚本程序,如下所示。

1. student@ubuntu:~$ python3 latest_email.py

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

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

然后,编写一个脚本来获取所有电子邮件。创建一个脚本all_emails.py,并在其中添加以下代码。

1. import poplib
2. import getpass
3. 
4. pop3_server = 'pop.gmail.com'
5. username = 'Emaild_address'
6. password = getpass.getpass()
7. 
8. email_obj = poplib.POP3_SSL(pop3_server)
9. print(email_obj.getwelcome())
10. email_obj.user(username)
11. email_obj.pass_(password)
12. 
13. email_stat = email_obj.stat()
14. NumofMsgs = email_stat[0]
15. for i in range(NumofMsgs):
16.     for mail in email_obj.retr(i+1)[1]:
17.         print(mail)

运行脚本程序,如下所示。

1. student@ubuntu:~$ python3 latest_email.py

这将获取邮箱中所有电子邮件。

3.2 使用imaplib模块接收电子邮件

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

IMAP使用两个端口。

· 端口143:默认的不加密端口。

· 端口993:加密端口。

现在我们来看一个使用imaplib模块的示例程序。创建一个脚本,命名为imap_email.py,并在其中添加以下代码。

1. import imaplib
2. import pprint
3. import getpass
4. 
5. imap_server = 'imap.gmail.com'
6. username = 'Emaild_address'
7. password = getpass.getpass()
8. 
9. imap_obj = imaplib.IMAP4_SSL(imap_server)
10. imap_obj.login(username, password)
11. imap_obj.select('Inbox')
12. temp, data_obj = imap_obj.search(None, 'ALL')
13. for data in data_obj[0].split():
14.     temp, data_obj = imap_obj.fetch(data, '(RFC822)')
15.     print('Message: {0}\n'.format(data))
16.     pprint.pprint(data_obj[0][1])
17.     break
18. 
19. imap_obj.close()

运行脚本程序,如下所示。

1. student@ubuntu:~$ python3 imap_email.py

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

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

4 总结

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

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

5 问题

1.什么是POP3和IMAP?

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

3.什么是pprint?

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

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

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

1. 1010101
2.    10101
3.      101
4.        1

标签: #python读取邮件 #python读取邮件附件 #html如何制作电子邮件文件 #python接收邮件内容启动程序 #python伪造邮件