两封邮件合并转发_用Python发送自定义电子邮件

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-1 02:53   35   0
882b86483d8a9cec3c2154e80df2eb0f.png

电子邮件仍然是生活中的一个事实。尽管存在各种缺陷,但它仍然是向大多数人发送信息的最佳方式,尤其是以允许消息排队等待收件人的自动化方式。

我的工作重点之一是Feddora社区行动和影响协调员给人们一个关于旅行资金的好消息。我经常通过电子邮件发送这些信息。在这里,我将向您展示如何将自定义消息发送给使用邮件合并,一个命令行Python程序,可以处理简单和复杂的电子邮件。

关注,转发,私信小编“01”即可免费领取Python学习资料!

3c1f685e86e2ff87ea255a149f41beb1.png

安装邮件合并

MailMerge是在Fedora中打包和提供的,您可以通过以下命令行安装它Sudo DNF安装python 3-mailMerge..您还可以使用PIP,因为这个项目自述解释 .

配置邮件合并文件

三个文件控制MailMerge的工作方式。如果你跑邮件合并-样本,它将为您创建模板文件。这些档案是:

  • mailMerge_server.conf:这包含SMTP主机发送电子邮件的配置详细信息。你的密码是存储在这个文件中。
  • mailMerge_database.csv:它保存每个电子邮件的自定义数据,包括收件人的电子邮件地址。
  • mailMerge_template.txt:这是电子邮件的文本,其中包含占位符字段,将使用mailMerge_database.csv .

server.conf

样本邮件合并server.conf文件中包含了一些应该熟悉的示例。如果您曾经添加电子邮件到您的电话或设置桌面电子邮件客户端,您以前见过这些数据。要记住的最重要的事情是更新文件中的用户名,特别是当您使用其中一个示例配置时。

Database.csv

这个mailMerge_database.csv文件有点复杂。它必须包含(至少)收件人的电子邮件地址和任何其他必要的自定义详细信息,以替换您的电子邮件中的字段。编写mailmertemplate.txt文件同时创建此文件的字段列表。我发现使用电子表格捕获这些数据并在完成后将其导出为CSV文件是很有帮助的。此示例文件:

电子邮件,姓名,号码

本人@mydomain.com,“本人”,17

Bob@bobdomain.com,“Bob”,42岁

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

如果您的值中有任何一个包含逗号,则您 将整个值用双引号括起来(")。如果需要在双引号字段中包含双引号,请在一行中使用两个双引号。引用规则很有趣,所以读一下Python 3中的CSV关于细节。

Template.txt

作为我工作的一部分,我可以分享关于我们的fedora贡献者会议的旅行资助决定的新闻,羊群..一封简单的电子邮件告诉人们,他们被选中来申请旅行资金以及他们的具体资助细节。一个特定于用户的细节是我们可以为他们的机票分配多少钱。下面是我的模板文件的简略版本(为了简洁起见,我已经摘除了很多文本):

$cat mailMerge_template.txt

致:{email}

主题:Flock 2019提供资金

出发地:BrianExelbierd

嗨{name},

我代表羊群基金委员会写信给你。你要求资助你去羊群。经过仔细考虑,我们可以向您提供以下资金:

差旅预算:{差旅预算}

<>

模板顶部指定收件人、发件人和主题。在空行之后,有电子邮件的正文。这封邮件需要收件人电子邮件 ,名字,姓名,和旅行预算database.csv档案。请注意,这些字段被双大括号包围({{}})。对应mailMerge_database.csv看起来是这样的:

$cat mailMerge_database.csv

姓名、电子邮件、旅行预算

Brian,bexelbie@redhat.com,1000

人物角色@fedoraproject.org,1500

PèrsonB,Personb@fedoraproject.org,500

注意,我首先列出了自己(用于测试),文件中还有另外两个人。第二个人PèrsonB的名字中有一个重音字符;MailMerge将自动对其进行编码。

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

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

做个试验

首先做一个试运行,打印电子邮件,并在屏幕上完成占位符字段。默认情况下,如果运行命令邮件合并,它将运行第一封电子邮件:

$mailMerge

>编码

>消息0

致:bexelbie@redhat.com

主题:Flock 2019提供资金

出发地:BrianExelbierd

MIME版本:1.0

内容-类型:文本/普通;字符集=“us-ascii”

内容-传输-编码:7位

日期:星期六,2019年7月20日18:17:15-0000

嗨布莱恩

我代表羊群基金委员会写信给你。你要求资助你去羊群。经过仔细考虑,我们可以向您提供以下资金:

差旅预算:1000

<>

>发送消息0试运行

>没有附件与电子邮件一起发送。

>限制为1条消息。若要取消限制,请使用-无限制选项。

>这是一次试验。若要发送消息,请使用-不模拟运行选项。

审查第一封电子邮件(消息0当计数从零开始,就像计算机科学中的许多东西一样),你可以看到我的名字和旅行预算是正确的。如果您想查看每封电子邮件,请输入邮件-无限制告诉MailMerge不要将自己限制在第一封电子邮件上。下面是第三封电子邮件的试运行,它显示了特殊字符编码:

>消息2

致:Personb@fedoraproject.org

主题:Flock 2019提供资金

出发地:BrianExelbierd

MIME版本:1.0

内容-类型:文本/普通;字符集=“iso-8859-1”

内容.传递.编码:引用.可打印

日期:星期六,2019年7月20日18:22:48-0000

嗨P=E8rsonB,

这不是一个错误;P=E8rsonB的编码形式。PèrsonB .

发送测试消息

现在,用命令发送一封测试电子邮件邮件-无试运行,它告诉MailMerge向列表中的第一封电子邮件发送消息:

$mailmerge-无试运行

>编码

>消息0

致:bexelbie@redhat.com

主题:Flock 2019提供资金

出发地:BrianExelbierd

MIME版本:1.0

内容-类型:文本/普通;字符集=“us-ascii”

内容-传输-编码:7位

日期:星期六,2019年7月20日18:25:45-0000

嗨布莱恩

我代表羊群基金委员会写信给你。你要求资助你去羊群。经过仔细考虑,我们可以向您提供以下资金:

差旅预算:1000

<>

>从mailMerge_server.conf读取SMTP服务器配置

>host=smtp.gmail.com

>端口=587

>用户名=bexelbie@redhat.com

>安全性=STARTTLS

>smtp.gmail.com上bexelbie@redhat.com的密码:

>发送消息0

>没有附件与电子邮件一起发送。

>限制为1条消息。若要取消限制,请使用-无限制选项。

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

当我检查我的电子邮件帐户时,我收到了一封格式优美的测试邮件。如果您的测试邮件已准备就绪,请通过以下方式发送所有电子邮件邮件-无试运行-无限制 .

发送复杂的电子邮件

当您利用Jinja 2模板..我发现它对于包含条件文本和发送附件很有用。下面是一个复杂的模板和相应的数据库:

$cat mailMerge_template.txt

致:{email}

主题:Flock 2019提供资金

出发地:BrianExelbierd

附件:附件/{文件}

嗨{name},

我代表羊群基金委员会写信给你。你要求资助你去羊群。经过仔细考虑,我们可以向您提供以下资金:

差旅预算:{差旅预算}

{%如果旅馆=“是”-%}

住宿:周三至周日(4晚)在酒店住宿

{%-endif%}

<>

$cat mailMerge_database.csv

姓名,电子邮件,旅行预算,酒店,档案

Brian,bexelbie@redhat.com,1000,是的,Visa_bex.pdf

人物角色,@fedoraproject.org,1500,No,Visa_Person_a.pdf

PèrsonB,Personb@fedoraproject.org,500,是的,Visa_Person_b.pdf

这封电子邮件里有两件新东西。首先,有一个附件。我必须向国际旅客发送签证邀请信,以帮助他们蜂拥而至。附件部分标头指定要附加哪个文件。为了保持我的目录干净,我将它们全部放在我的附件子目录中。第二,它包括关于酒店的有条件信息,因为有些人会为他们的酒店住宿获得资金,而我需要为那些有条件的人提供这些细节。这是用如果建筑:

{%如果旅馆=“是”-%}

住宿:周三至周日(4晚)在酒店住宿

{%-endif%}

这就像一个如果在大多数编程语言中。Jinja 2具有很强的表现力,可以进行多层次的操作。尝试通过包含控制电子邮件内容的数据库元素来简化您的生活。使用空格对于电子邮件的可读性很重要。负(-)符号如果恩迪夫是Jinja 2如何控制白空间..有很多选择,所以实验看看什么最适合你。

还请注意,我用两个字段扩展了数据库,酒店档案..这些值控制包含酒店文本并提供附件的名称。在我的例子中,PèrsonB和我得到了酒店的资助,而人格却没有。

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

您也可以尝试使用条件词(如果恩迪夫)在标题中。例如,只有在数据库中有附件,或者可能需要为一些电子邮件更改发件人的名称,而不需要更改另一些电子邮件的附件。

MailMerge的优势

MailMerge程序提供了一个强大但简单的方法来发送大量定制的电子邮件。每个人都只得到他们需要的信息,忽略了多余的步骤和细节。

即使是简单的群发邮件,我也发现这种方法比发送一封电子邮件给一群使用CC或BCC的人要有效得多。许多人过滤他们的电子邮件,延迟阅读任何没有直接发送给他们的东西。使用MailMerge可以确保每个人都有自己的电子邮件。邮件将为收件人正确过滤,没有人可以意外地“回复所有”给整个组。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP