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

本章将介绍以下内容。

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

1 邮件消息格式

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

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

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

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

import smtplib
import getpasshost_name = "smtp.gmail.com"
port = 465sender = '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 getpasshost_name = 'smtp.gmail.com'
port = 465sender = 'sender_emailid'
password = getpass.getpass()
receiver = 'receiver_emailid'text = MIMEMultipart()
text['Subject'] = 'Test HTML Content'
text['From'] = sender
text['To'] = receivermsg = """\
<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 getpasshost_name = 'smtp.gmail.com'
port = 465sender = 'sender_emailid'
password = getpass.getpass()
receiver = 'receiver_emailid'text = MIMEMultipart()
text['Subject'] = 'Test Attachment'
text['From'] = sender
text['To'] = receivertxt = 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 getpasspop3_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 getpasspop3_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 getpassimap_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])
    breakimap_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的通信;
■ 自动化数据库管理并执行统计分析。

如何使用Python脚本来处理电子邮件?相关推荐

  1. python接收邮件内容启动程序_如何使用Python脚本来处理电子邮件?

    Hello there, Good day !! Home

  2. python数据变更邮件提醒_如何使python脚本在某些数据更改时自动发送电子邮件?...

    所以基本上,我做了一个python脚本,每12小时给我发送一封包含我公共IP地址的电子邮件.我的目标是使它自动发送电子邮件只有当我的IP更改.如果我能帮上忙的话.在 我的密码是:from json i ...

  3. python脚本编写_如何用Python包编写一个简单的脚本,表达你对父母的爱?

    全文共2800字,预计学习时长6分钟 在繁忙的工作生活中,我们经常忘记给所爱的人发WhatsApp.本教程将使用Python包Twilio编写一个简单的Python脚本来发送WhatsApp消息.我们 ...

  4. 一切尽在掌控之中:这个Python脚本,让工作自动向你汇报进度!

    图源:unsplash 笔者经常编写Python脚本来进行数据处理.数据传输和模型训练.随着数据量和数据复杂性的增加,运行脚本可能需要一些时间.在等待数据处理完成时可以同时做一些其他工作. 很多人学习 ...

  5. python脚本转二进制_使用此Python脚本在Base94中编码二进制文件

    python脚本转二进制 人类以许多不同的方式传递信息. 在互联网上,主要格式是文本,这就是您阅读本文的方式. 但是,Internet上还有其他数据,例如图像和声音文件等. 在您意识到HTTP / 1 ...

  6. asp python 定时任务_Ubuntu使用crontab定时执行python脚本

    转载其他博主的博客,记录过程,及使用中的一些问题 有时会遇到需要在linux的主机上定时的执行某个python脚本来处理事情的需求,这时可以考虑使用crontab来实现. 关于crontab的介绍,参 ...

  7. 用于自动化的 10 个杀手级 Python 脚本

    用于自动化的 10 个杀手级 Python 脚本 您是否厌倦了在繁琐的任务上浪费时间? 您是否梦想着一个计算机为您完成所有工作的世界?别无所求,因为我们有 5 个 Python 脚本,准备好告别体力劳 ...

  8. 25 个超棒的 Python 脚本合集(迷你项目)

    激动的心,颤抖的手. 微信搜索关注<Python学研大本营>,加入读者群,分享更多精彩 在本文中,我编译了 25 个 Python 程序的集合. 我已包含链接以了解有关每个脚本的更多信息, ...

  9. python程序run不了_无法通过计划程序正确运行Python脚本

    因此,我研究并测试了多种方法以使其发挥作用,但我们的IT人员和我自己都不确定如何继续.最终,我需要在服务器上运行三个python脚本,这些脚本查看一组Excel文件并扫描错误.如果有错误,它会通过电子 ...

最新文章

  1. 排好序的数组中,找出两数之和为m的所有组合
  2. EntityFramework之摸索EF底层(八)
  3. android开发控件水波纹,Android实现水波纹控件的方法
  4. js urlencode 20 php,js实现php函数urlencode
  5. J2EE常用Listener(转载)
  6. 奥巴马吐槽川普“笨蛋”的视频火了,这又得“归功”于AI
  7. 解决applet覆盖遮罩层div的问题
  8. 大数据开发笔记(五):Zookeeper
  9. mac vulkan_基于 mac 的 ncnn vulkan iOS集成参考
  10. delphi 获取计算机,Delphi中用GetTickCount获取计算机运行时间
  11. python开发桌面时钟_python+PyQT实现系统桌面时钟
  12. 国内搜索引擎技术现状 zZ
  13. markdown和marktop是啥关系?
  14. 2018年要过去了,年初说好要上完的网课呢?
  15. 著名歌唱家大衣哥太豪横了,参加商演被主办方请到五星级酒店就餐
  16. html 的页眉页脚,html – 带滚动条的页眉,页脚和内容的CSS布局
  17. bigemap大地图软件功能对比分析
  18. Github上收集了70个微信小程序源码
  19. java 重写paint_java – JLabel:重写paintComponent()之后.如何...
  20. BetaFlight深入传感设计之九:传感坐标系/机体坐标系/导航坐标系/经纬度坐标系

热门文章

  1. 我以为自己MySQL够牛逼了,直到看到了Alibaba的面试题
  2. npm 设置和取消代理配置
  3. 数千万,打水漂了。。
  4. 没有大神的技术社群,我如何做到高达75%的沟通率?
  5. url 参数生成函数
  6. 仙道录 第一卷 天道门 第八章 练气诀
  7. hulu dpp_您可以立即流式传输的10个最佳Hulu原创电视节目(2020年4月)
  8. 千万别在有WiFi的房间里摆这种姿势,只因…
  9. 她把花生扔进水发成芽,结果发生了意想不到的事…
  10. Nvidia2070显卡配置win10+ubuntu18.04双系统+解决N卡驱动+解决Ubuntu中wifi网络不稳定(intel网卡)+修改开机启动win10