一个简单的命令行邮件合并工具

mailmerge的Python项目详细描述


邮件合并
==


[![pypi](https://img.shields.io/pypi/v/mailmerge.svg)(https://pypi.org/project/mailmerge/)
[![构建状态](https://travis-ci.com/awdeorio/mailmerge.svg?branch=develop)(https://travis ci.com/awdeorio/mailmerge)

命令行邮件合并工具。

`mail merge`使用纯文本文件和[jinja2模板引擎](http://jinja.pocoo.org/docs/latest/templates/)。

**示例](高级模板示例)
-[HTML格式](HTML格式)
-[标记格式](标记格式)
-[附件](附件)
-[贡献](贡献)
-[确认](确认)

快速启动
``控制台
$pip安装mailmerge
$mailmerge
```

`mailmerge'将指导您完成此过程。别担心,默认情况下它不会发送真正的电子邮件。

或者,请参阅开发安装说明。
``控制台
$sudo pip install mailmerge
```

然后,它将显示如何在发送真正的电子邮件之前对其进行测试。

和config
`` console
$mailmerge--sample
创建示例模板email mailmerge_template.txt
创建示例数据库mailmerge_database.csv
创建示例配置文件mailmerge_server.conf
编辑这些文件,然后再次运行mailmerge,编辑smtp服务器配置mailmerge server.conf,默认设置为gmail。请务必更改您的用户名。如果使用2因素身份验证,则可能需要设置一次性密码以供应用程序使用。` mailmerge'将给出一个错误,该错误的url指向右侧的gmail支持页面。其他配置示例见"mailmerge戋server.conf"的注释。
```
[smtp戋server]
host=smtp.gmail.com
port=465
security=ssl/tls
username=your戋username戋here
```

` subject和from字段是必需的。其余部分是消息的主体。使用{{}来指示将从数据库中读取的自定义参数。例如,`{email}`将从"mailmerge_database.csv"的"email"列中填写。
```
到:{{email}
主题:testing mailmerge
来自:my self<;my@mydomain.com>;

hi,{name},

您的号码是{{number}。
````

这有助于测试。
```
电子邮件、姓名、号码
我自己@mydomain.com,"我自己",17
bob@bobdomain.com,"bob",42
````

试运行
首先,试运行一封电子邮件。这将填写第一封电子邮件的模板字段并将其打印到终端。
``控制台
$mailmerge--试运行--限制1
>;>邮件0
发送给:my self@mydomain.com
主题:测试mailmerge
发件人:myself<;myself@mydomain.com>;

hi myself,

您的号码是17。

若要删除限制,请使用--no limit选项。
>;>;这是一次试运行。要发送消息,请使用--no dry run选项。
```


如果这看起来正确,请尝试第二次dry run,这次所有收件人都使用--no limit`选项。
``控制台
$mailmerge--dry run--no limit
>;消息0
发送给:my self@mydomain.com
主题:测试mailmerge
发件人:myself<;myself@mydomain.com>;

hi,myself,

您的号码是17。

>;发送消息0 dry run
>;消息1
收件人:bob@bobdomain.com
主题:testing mailmerge
发件人:my self<;myself@mydomain.com>;


hi,bob,

>您的号码是42。

>;发送消息1 dry run
>;这是一次dry run。要发送邮件,请使用--no dry run选项。
```

回想一下,您将自己添加为第一个电子邮件收件人。
``控制台
$mailmerge--无试运行--限制1
>;>邮件0
发送给:my self@mydomain.com
主题:测试mailmerge
发件人:myself<;myself@mydomain.com>;

嗨,我自己,

您的号码是17。

>;>;已发送邮件0
>;>;限制为1封邮件。要删除限制,请使用--no limit选项。
```

如果一切看起来正常,那么是时候发送所有邮件了。


我自己,

您的号码是17。

>;>向:bob@bobdomain.com发送消息0
>;
>;消息1

发送消息1
```

高级模板示例
此示例将向学生发送进度报告。该模板使用了[jinja2模板引擎文档](http://jinja.pocoo.org/docs/latest/templates/)的更多高级功能来定制给学生的消息。


来自:我的我自己<;我自己@mydomain.com>;



亲爱的{{{name}},











这封电子邮件包含了我们的成绩记录,eecs 280的成绩,以及估计的字母成绩。

项目1:{{{{{p1}}
>项目2:{{{p2}
>项目3:{{{{p3}}

>期中考试:{{{{期中考试{{{中考试}


是的时间,你估计的字母成绩是{{grade}。

{%首先,你必须交出所有的作业。参加讲座和讨论部分。尽早开始编程作业并寻求帮助。最后,制定一个策略来帮助你为期末考试做好准备。

好消息是我们已经完成了课程成绩的一半,所以有机会解决这个问题。其他教授和我很高兴在办公时间一起讨论策略。
{%elif grade in["d+","d","d-","e","f"]-%}
我写这篇文章是因为我很关心你在eecs 280的成绩。我担心的是,如果你的成绩继续保持目前的趋势,你将无法通过这门课程。

如果你打算继续这门课程,我敦促你在办公时间见你的老师,讨论下学期的计划。否则,如果你打算退学,请咨询你的学术顾问。
{%endif-%}
`````

期中,年级
我自己@mydomain.com,"我自己",100100100100,A+
边界@fixme.com,"borderline name",50,50,50,50,c-
failing@fixme.com,"failing name",0,0,0,0,f
`````

>;邮件0
收件人:my self@mydomain.com
主题:EECS 280期中进度报告
发件人:myself<;myself@mydomain.com>;


亲爱的我自己,

这封电子邮件包含了我们对您的EECS 280成绩的记录,以及估计的字母等级。

project 1:100
project 2:100
project 3:100
期中考试:100

此时,您的估计字母等级为A+。



>;>;发送消息0 dry run
>;>;限制为1条消息。若要删除限制,请使用--no limit选项。
>;>;这是一次试运行。要发送邮件,请使用--no dry run选项。
```

\html格式化
mailmerge支持html格式化。

在邮件标题下添加"content type:text/html",然后以"<;html>;"开始您的邮件。

` ` ` ` ` ` ` ` ` ` ` ` ` ` ` mailmerge ` ` ` ` ` ` `
主题:testing mailmerge
发件人:my self<;my@mydomain.com>;
内容类型:text/html

<;
<;lt;lt;lt;lt;lt;lt;p>;lt;p>;您好,{{{name}}},<;p>;

>
<;p>;您的号码是{{{{}}}。<;p>;lt;p>;lt;p>;

此示例演示如何在同一消息中同时提供html和纯文本版本。用户的邮件阅读器可以选择其中一个。


boundary="outer boundary"

这是一条mime编码的消息。如果你看到这个,你的邮件读卡器已经过时了。

--外部边界
内容类型:text/plain;charset=us ascii

hi,{{name},

您的号码是{{number}。






--内边界
>内容类型:文本/html;charset=us ascii
内容处理:内联
>内容id:<;body@here>;








>


<;p>;由<;a href="https://github.com/awdeorio/mailmerge">;邮件合并<;/a>;<;/p>;

<;/body>;
<;/html>;发送;
``



MailMerge会将标记呈现为HTML,然后在多部分邮件中同时包含HTML和纯文本版本。收件人的邮件读取器可以选择任一格式。


*星号*
-强强调,也称为粗体,带有**星号**。
-将强调与**星号和下划线组合在一起。
-像这样的无序列表。
-带数字的有序列表:
1。项目1
2.项目2
-使用"backticks"预格式化文本。
-一些[超链接](http://bit.ly/eecs485-wn19-p6)如何?

这是一个标题。
和另一个标题。

这是一张没有附上电子邮件的图片:
![未附加Python徽标](http://pluspng.com/img png/python-logo-png-open-2000.png)
````

mailmerge
发件人:my self<;myself@mydomain.com>;
附件:file1.docx
附件:../file2.pdf
附件:/z/shared/{{name}}}u submission.txt

hi,{{name},

此电子邮件包含三个附件。
pro tip:使用jinja根据您的数据库!
```

如果附件文件名包含模板,最好使用"--无限制"标志进行试运行。
``控制台
$mailmerge
>;消息0
发送给:my self@mydomain.com
主题:测试mailmerge
发件人:myself<;myself@mydomain.com>;

嗨,我自己,

此电子邮件包含三个附件。
专业提示:使用Jinja根据您的数据库自定义附件!

>;>ascii编码
>;>attached/users/awdeorio/documents/test/file1.docx
>;>attached/users/awdeorio/documents/file2.pdf
>;>attached/z/shared/myself\submission.txt
>;>;>这是一次干跑。要发送消息,请使用--no dry run选项。
```

查看[投稿指南](contributing.md)。



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
API调用时返回java Null   JavaJAXB:如何从嵌套元素中检索文本属性?   java如何在Windows机器上用Maven创建Dockerfile,然后发送到远程Linux服务器以构建映像,然后运行?   并行处理集群java独立应用程序   java使用POST将图像上传到服务器   分发组的java JavaMail/Exchange AuthAs标头   swing Java JScrollPane多个组件   JAXB将XML文档映射到Java对象   java如何在JDK中实现OpenCSV CSVReader,我正在使用VSC代码   基于屏幕大小的java翻译动画   在java中比较堆栈元素和对象的搜索   java如何在Swing中更改化身?   java JAXB将1个XML标记映射到2个变量   java面试问题:递归生成素数的最快方法是什么?   JavaEclipseIDE频繁关闭   Java中从像素读取RGB值的图像   通过查询oracle DB列值获得的字符串中的java转义XML特殊字符   java从ArrayList中删除多个项