Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用Python发送自定义电子邮件

使用Python发送自定义电子邮件

作者头像
用户7886150
修改于 2021-01-28 02:05:06
修改于 2021-01-28 02:05:06
2.9K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: 合并邮件的Python程序

电子邮件仍然是事实。 尽管存在各种弊端,但它仍然是向大多数人发送信息的最佳方法,特别是允许邮件排队等待收件人的自动方式。  

 Fedora社区行动与影响协调员正在为人们提供有关差旅资金的好消息。 

 我经常通过电子邮件发送此信息。 

 在这里,我将向您展示如何使用Mailmerge (一个可处理简单和复杂电子邮件的命令行Python程序)向一群人发送自定义消息。 

  安装Mailmerge  

  Mailmerge已打包并在Fedora中可用,您可以使用sudo dnf install python3-mailmerge从命令行安装它。 您也可以使用pip从PyPI安装它,如项目的自述文件所述 。  

  配置您的Mailmerge文件  

  三个文件控制Mailmerge的工作方式。 如果运行mailmerge --sample ,它将为您创建模板文件。 这些文件是:  

  mailmerge_server.conf:这包含您的SMTP主机发送电子邮件的配置详细信息。 您的密码未存储在此文件中。  mailmerge_database.csv:此文件包含每封电子邮件的自定义数据,包括收件人的电子邮件地址。  mailmerge_template.txt:这是带有占位符字段的电子邮件文本,将使用mailmerge_database.csv中的数据替换 。  

  Server.conf  

  示例mailmerge_server.conf文件包含一些应熟悉的示例。 如果您曾经将电子邮件添加到手机中或设置了桌面电子邮件客户端,那么您之前已经看过这些数据。 要记住的最大事情是更新文件中的用户名,尤其是在使用示例配置之一时。  

  数据库.csv  

  mailmerge_database.csv文件要复杂一些。 它必须(至少)包含收件人的电子邮件地址以及替换电子邮件中的字段所必需的任何其他自定义详细信息。 在创建该文件的字段列表的同时,最好写出mailmerge_template.txt文件。 我发现使用电子表格捕获数据并在完成后将其导出为CSV文件很有帮助。 该样本文件:  

     email,name,number

myself@mydomain.com,"Myself",17

bob@bobdomain.com,"Bob",42

  允许您使用两个人的名字并告诉他们一个数字向两个人发送电子邮件。 该文件虽然不是很有趣,但却说明了一个重要的习惯:始终使自己成为文件中的第一个收件人。 这样,您就可以向自己发送测试电子邮件,以在向整个列表发送电子邮件之前验证一切正常。  

  如果任何值包含逗号,则必须将整个值括在双引号( “ )中。如果需要在双引号字段中包含双引号,请在一行中使用两个双引号。很有趣,因此请阅读Python 3中的CSV以获得更多细节。  

  Template.txt  

  作为我工作的一部分,我将分享有关Fedora贡献者会议Flock的旅行资助决定的新闻。 一封简单的电子邮件告诉人们他们已被选中用于旅行资金及其具体的资金详细信息。 一个针对用户的详细信息是我们可以为他们的机票分配多少钱。 这是我的模板文件的缩写版本(为简洁起见,我摘录了很多文本):  

     $ cat mailmerge_template.txt

TO: {{Email}}

SUBJECT: Flock 2019 Funding Offer

FROM: Brian Exelbierd <bexelbie@redhat.com>

Hi {{Name}},

I am writing you on behalf of the Flock funding committee.  You requested funding for your attendance at Flock.  After careful consideration we are able to offer you the following funding:

Travel Budget: {{Travel_Budget}}

<<snip>>

  模板的顶部指定了收件人,发件人和主题。 空行之后是电子邮件的正文。 该电子邮件需要database.csv文件中收件人的Email , Name和Travel_Budget 。 请注意,这些字段用双花括号( {{和}} )包围。 相应的mailmerge_database.csv如下所示:  

     $ cat mailmerge_database.csv

Name,Email,Travel_Budget

Brian,bexelbie@redhat.com,1000

PersonA,persona@fedoraproject.org,1500

PèrsonB,personb@fedoraproject.org,500

  请注意,我首先列出了自己(供测试),并且文件中还有两个人。 第二人称PèrsonB,其名字带有重音符号; Mailmerge将自动对其进行编码。  

  这就是整个模板的概念:编写电子邮件,然后将占位符放在双花括号中。 然后创建一个提供这些值的数据库。 现在让我们测试一下电子邮件。  

  测试并发送简单的电子邮件合并  

  试运行  

  首先进行试运行,将占位符字段完成的电子邮件打印到屏幕上。 默认情况下,如果您运行命令mailmerge ,它将对第一封电子邮件进行试运行:  

     $ mailmerge

>>> encoding ascii

>>> message 0

TO: bexelbie@redhat.com

SUBJECT: Flock 2019 Funding Offer

FROM: Brian Exelbierd <bexelbie@redhat.com>

MIME-Version: 1.0

Content-Type: text/plain; charset="us-ascii"

Content-Transfer-Encoding: 7bit

Date: Sat, 20 Jul 2019 18:17:15 -0000

Hi Brian,

I am writing you on behalf of the Flock funding committee.  You requested funding for your attendance at Flock.  After careful consideration we are able to offer you the following funding:

Travel Budget: 1000

<<snip>>

>>> sent message 0 DRY RUN

>>> No attachments were sent with the emails.

>>> Limit was 1 messages.  To remove the limit, use the --no-limit option.

>>> This was a dry run.  To send messages, use the --no-dry-run option.

  查看第一封电子邮件( 消息0 ,因为计数从零开始,就像计算机科学中的许多事情一样),您可以看到我的姓名和差旅预算正确。 如果要查看每封电子邮件,请输入mailmerge --no-limit告诉Mailmerge不要将自身限制为第一封电子邮件。 这是第三封电子邮件的试运行,其中显示了特殊字符编码:  

     >>> message 2

TO: personb@fedoraproject.org

SUBJECT: Flock 2019 Funding Offer

FROM: Brian Exelbierd <bexelbie@redhat.com>

MIME-Version: 1.0

Content-Type: text/plain; charset="iso-8859-1"

Content-Transfer-Encoding: quoted-printable

Date: Sat, 20 Jul 2019 18:22:48 -0000

Hi P=E8rsonB,

  那不是错误; P = E8rsonB是PèrsonB的编码形式。  

  发送测试信息  

  现在,使用命令mailmerge --no-dry-run发送测试电子邮件,该命令告诉Mailmerge将消息发送到列表中的第一封电子邮件:  

     $ mailmerge --no-dry-run

>>> encoding ascii

>>> message 0

TO: bexelbie@redhat.com

SUBJECT: Flock 2019 Funding Offer

FROM: Brian Exelbierd <bexelbie@redhat.com>

MIME-Version: 1.0

Content-Type: text/plain; charset="us-ascii"

Content-Transfer-Encoding: 7bit

Date: Sat, 20 Jul 2019 18:25:45 -0000

Hi Brian,

I am writing you on behalf of the Flock funding committee.  You requested funding for your attendance at Flock.  After careful consideration we are able to offer you the following funding:

Travel Budget: 1000

<<snip>>

>>> Read SMTP server configuration from mailmerge_server.conf

>>>   host = smtp.gmail.com

>>>   port = 587

>>>   username = bexelbie@redhat.com

>>>   security = STARTTLS

>>> password for bexelbie@redhat.com on smtp.gmail.com: 

>>> sent message 0

>>> No attachments were sent with the emails.

>>> Limit was 1 messages.  To remove the limit, use the --no-limit option.

  在倒数第四行,您会看到它提示您输入密码。 如果您使用的是双重身份验证或域管理的登录名,则需要创建一个绕过这些控件的应用程序密码。 如果您使用的是Gmail和类似系统,则可以直接在界面中进行操作; 否则,请联系您的电子邮件系统管理员。 这不会损害电子邮件系统的安全性,但是您仍然应该保持密码的复杂性和机密性。  

  当我检查电子邮件帐户时,我收到了格式精美的测试电子邮件。 如果您的测试电子邮件准备就绪,请通过输入mailmerge --no-dry-run --no-limit发送所有电子邮件。  

  发送复杂的电子邮件  

  当您利用Jinja2模板制作时,您真的可以看到Mailmerge的强大功能。 我发现它对于包含条件文本和发送附件很有用。 这是一个复杂的模板和相应的数据库:  

     $ cat mailmerge_template.txt

TO: {{Email}}

SUBJECT: Flock 2019 Funding Offer

FROM: Brian Exelbierd <bexelbie@redhat.com>

ATTACHMENT: attachments/{{File}}

Hi {{Name}},

I am writing you on behalf of the Flock funding committee.  You requested funding for your attendance at Flock.  After careful consideration we are able to offer you the following funding:

Travel Budget: {{Travel_Budget}}

{% if Hotel == "Yes" -%}

Lodging: Lodging in the hotel Wednesday-Sunday (4 nights)

{%- endif %}

<<snip>>

$ cat mailmerge_database.csv

Name,Email,Travel_Budget,Hotel,File

Brian,bexelbie@redhat.com,1000,Yes,visa_bex.pdf

PersonA,persona@fedoraproject.org,1500,No,visa_person_a.pdf

PèrsonB,personb@fedoraproject.org,500,Yes,visa_person_b.pdf

  这封电子邮件有两件事。 首先,有一个附件。 我必须向国际旅行者发送签证邀请函,以帮助他们来到弗洛克,标题的ATTACHMENT部分指定要附加的文件。 为了保持目录干净,我将所有目录都放在了Attachments子目录中。 其次,它包括有关酒店的条件信息,因为有些人会获得其酒店住宿的资金,我需要为那些住宿的人提供这些详细信息。 这是通过if构造完成的:  

     {% if Hotel == "Yes" -%}

Lodging: Lodging in the hotel Wednesday-Sunday (4 nights)

{%- endif %}

  在大多数编程语言中,这就像if一样。 Jinja2具有很高的表现力,可以执行多级条件。 通过包含控制电子邮件内容的数据库元素,尝试使生活更轻松。 使用空格对于电子邮件的可读性很重要。 if和endif中的减号( - )是Jinja2如何控制空白的一部分 。 有很多选择,因此请尝试看看最适合您的选择。  

  还要注意,我用两个字段( Hotel和File)扩展了数据库。 这些值控制着酒店文本的包含并提供附件的名称。 在我的示例中,PèrsonB和我获得了酒店资金,而PersonA没有。  

  无论您使用的是简单模板还是复杂模板,试运行和发送电子邮件都是相同的。 试试看!  

  您还可以尝试在标头中使用条件条件( 如果 … endif )。 例如,只有在数据库中有一个附件时,您才可以具有附件,或者您可能需要更改某些电子邮件的发件人名称,而其他电子邮件则不需要。  

  Mailmerge的优势  

  Mailmerge程序提供了一种强大而简单的方法来发送大量自定义的电子邮件。 每个人都只获得他们需要的信息,并且省略了多余的步骤和细节。  

  即使对于简单的组电子邮件,我发现这种方法也比使用CC或BCC向一群人发送一封电子邮件有效得多。 许多人会过滤电子邮件,并延迟阅读未直接发送给他们的任何内容。 使用Mailmerge可确保每个人都收到自己的电子邮件。 邮件将为收件人正确过滤,并且没有人会意外地“全部答复”整个组。  

  翻译自: https://opensource.com/article/19/8/sending-custom-emails-python

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python: 通过QQ邮箱发送电子邮件
文章背景:自学Python编程快速上手中关于发送电子邮件的章节。本文讲述如何通过Python,使用QQ邮箱发送电子邮件。
Exploring
2022/09/20
3.2K0
Python: 通过QQ邮箱发送电子邮件
Spring Boot – 通过 SMTP 发送电子邮件
Spring Boot提供了使用JavaMail库通过 SMTP 发送电子邮件的功能。在这里,我们将说明开发可用于发送带或不带附件的电子邮件的 Restful Web 服务的分步指南。为了开始执行这些步骤,我们首先使用 Spring Initializer 创建一个 Spring Boot 项目。
用户1418987
2023/10/26
5520
Spring Boot – 通过 SMTP 发送电子邮件
电子邮件实现详解(下)
书接上回,上篇中主要介绍了电子邮件协议格式等理论相关内容,这篇中我们从JavaMail、Python的smtplib以及Django的django.core.mail模块三个视角来实现发送邮件这件事。
才浅Coding攻略
2022/12/12
1.9K0
电子邮件实现详解(下)
深入探究电子邮件三大协议
电子邮件系统中,SMTP、POP 和 IMAP 这三种协议起着至关重要的作用。SMTP 负责邮件的发送,将邮件从发件人传输到邮件服务器,并在服务器之间转发。POP 负责邮件的接收,允许用户从邮件服务器下载邮件到本地设备进行离线阅读,下载后通常会从服务器删除此邮件。IMAP 也负责邮件的接收,它提供了更灵活的邮件管理功能,用户可以在多个设备上同步邮件状态,并且邮件始终保存在服务器上,方便随时访问和管理。这三大协议相互配合,共同构建了一个高效、稳定的电子邮件系统。
M.Talen
2024/09/09
7660
深入探究电子邮件三大协议
如何用Python实现电子邮件的自动化
用Python自动化日常任务很容易。通过api和库的结合,您可以轻松地设置系统来抓取网站、发送电子邮件、管理数据和分析。
HuangWeiAI
2020/07/27
1.5K0
如何用Python实现电子邮件的自动化
.NET Core 使用MailKit发送电子邮件
发送邮件通知的功能在各种系统里都很常见。我的博客也能在有新评论、新回复,或者文章被其他网站引用时向管理员发送邮件。那么在.NET Core里,如何实现发送电子邮件呢?
Edi Wang
2019/07/08
6K0
.NET Core 使用MailKit发送电子邮件
发送邮件那些事
世界的第一封电子邮件 1969年10月世界上的第一封电子邮件是由计算机科学家Leonard K.教授发给他的同事的一条简短消息。 据《互联网周刊》报道世界上的第一封电子邮件是由计算机科学家Leonard K.教授发给他的同事的一条简短消息(时间应该是1969年10月),这条消息只有两个字母:"LO"。Leonard K.教授因此被称为电子邮件之父。所以第一条网上信息就是‘LO’,意思是‘你好!’” 当然这个说法也有一点争议,另外一种说法是麻省理工学院博士Ray Tomlinson发送的第一封邮件,这里不再展
纯洁的微笑
2018/04/18
1.4K0
发送邮件那些事
收发电子邮件
本主题描述如何使用InterSystems IRIS发送和接收MIME电子邮件消息。
用户7741497
2022/06/09
3.1K0
Windows Live Hotmail 即将推出速度更快的电子邮件
今天 Hotmail 邮箱收到一封邮件,Windows Live 即将推出更快更好的 Hotmail:
Denis
2023/04/13
6130
Python 自动化指南(繁琐工作自动化)第二版:十八、发送电子邮件和短信
例如,您可能有一个充满客户记录的电子表格,并希望根据每个客户的年龄和位置信息向他们发送不同的套用信函。商业软件可能无法为你做到这一点;幸运的是,您可以编写自己的程序来发送这些电子邮件,从而节省大量复制和粘贴表单电子邮件的时间。
ApacheCN_飞龙
2023/04/04
11.3K0
Python 自动化指南(繁琐工作自动化)第二版:十八、发送电子邮件和短信
电子邮件伪造
电子邮件伪造是指发送者故意篡改邮件头部信息,以使邮件看起来似乎是来自另一个人或组织的行为。这种行为可能用于欺骗、诈骗、垃圾邮件发送等目的。以下是一些常见的电子邮件伪造技术。
zy010101
2024/05/25
3200
电子邮件伪造
31.1企业级开发进阶3.1:发送电子邮件
从古代的八百里加急,到现在的电子邮件,邮件的发展见证了上下五千年的发展史,这些当然是废话,只是要说说邮件的重要性。
大牧莫邪
2018/08/27
1.7K0
如何使用Java发送电子邮件
使用Java编程语言可以轻松方便地实现自动发送电子邮件,以此来提高效率和准确性,下面将介绍如何使用Java编程语言及相关支持库发送电子邮件。
用户1289394
2024/01/13
2180
如何使用Java发送电子邮件
Python自动发送4种形式的邮件,你会了吗?
Hi,大家好。自动化测试过程中,一般测试结果都会以邮件的形式发送给相关人员,在Python中,如何通过编写代码将邮件发送给对应的接收人呢?
可可的测试小栈
2022/06/06
1K1
Python自动发送4种形式的邮件,你会了吗?
利用java实现发送邮件
电子邮件的应用非常广泛,常见的如在某网站注册了一个账户,自动发送一封激活邮件,通过邮件找回密码,自动批量发送活动信息等。很显然这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。
全栈程序员站长
2022/08/28
1.4K0
利用java实现发送邮件
他居然发邮件请我去吃饭——邮件伪造那些事儿
今天中午吃午饭的时候,突然收到一封邮件,我一看,不得了啊,居然是美国前总统给我发来的邮件,还说要我助他一臂之力成为新总统。下午再看他的新闻,感觉他现在都自身难保了,怎么会请我吃饭呢?于是怀疑这封邮件是伪造的…
Regan Yue
2022/09/20
1.1K0
他居然发邮件请我去吃饭——邮件伪造那些事儿
JavaMail邮件发送-能发送附件和带背景音乐的邮件的小系统
这里使用的是JavaMail技术,前台使用了fckeditor做邮件美化,由于只是示例,后台发送时只是将邮件保存在本地,但是可以查看,如果需要实际发送,请参考我的其他博客文章,我写了很多关于邮件发送的示例!
Java帮帮
2018/08/06
1.1K0
JavaMail邮件发送-能发送附件和带背景音乐的邮件的小系统
使用 PHP发送电子邮件
PHP 运行邮件函数需要一个已安装且正在运行的邮件系统(如:sendmail、postfix、qmail等)。所用的程序通过在 php.ini 文件中的配置设置进行定义。
小颖club
2022/04/11
2.5K0
31.2企业级开发进阶3.2:接收电子邮件引入解析需要的模块解析邮件内容引入需要的模块定义解析邮件内容的函数decode_header解码操作函数
上一节内容中,我们通过Python进行了电子邮件发送功能的处理 本节内容内容主要讲解接收邮件功能的处理
大牧莫邪
2018/08/27
8280
网络安全宣传周 - 电子邮件截获
在当今数字化时代,电子邮件已成为人们日常通信和业务交流的重要工具。然而,网络攻击者利用各种手段来截获和窃取电子邮件内容,给个人和企业带来了严重的安全威胁。其中,仿冒免费公用 Wi-Fi 热点进行电子邮件截获是一种较为常见且具有较大危害的攻击方式。
Khan安全团队
2024/08/18
1500
推荐阅读
相关推荐
Python: 通过QQ邮箱发送电子邮件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文