百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

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

toyiye 2024-09-19 04:42 3 浏览 0 评论

本文我们将学习如何使用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_11nbsp;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="http://www.baidu.com">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_11nbsp;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_11nbsp;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

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码