将mailman邮件列表打造成电子邮件营销系统
大多数站长知道有QQ邮件列表这个东东。但QQ邮件列表功能比较简单,每天只能给用户发两篇文章,不能对它个性化配置。其他功能较强大的邮件营销工具如aweber是要花钱的。其实捏,在QQ邮件列表出现之前,国外早就有了一款强大的邮件列表程序,这就是免费开源的mailman。在上一篇文章中,我向大家初步介绍了如何在Debian 8 + Nginx + FastCGI+Postfix环境下安装mailman邮件列表程序。现在,我们要将mailman打造成一个强大的邮件营销系统。
1.更改语言
首先要做的就是更改mailman的语言,在浏览器中访问下面的地址登录mailman网页管理后台:
http://example.com/cgi-bin/mailman/admin/listname
将example.com修改成你自己的域名,listname修改成你的邮件列表名称。默认的listname是mailman,你可以访问下面的地址新建一个列表:
https://example.com/cgi-bin/mailman/create
登录邮件列表管理后台,点击左上方的”Language options“,然后在下方的”Default Language for this list“中选择“Chinese(China)“,最后提交修改就行了。如果下拉菜单中没有中文这一项,那么先要在下面添加中文。
2. 生成邮件订阅表单
下面的代码是用于生成邮件订阅表单的,你可以把它复制粘贴到WordPress的文本小工具中,自己添加CSS样式。
<div class="signup"> <h3>订阅每天的教程及新闻</h3> <form Method=POST ACTION="http://example.com/cgi-bin/mailman/subscribe/listname"> 输入邮箱地址:<br> <input type="email" name="email" size="20" onblur="if (this.value=='') this.value = 'Enter your email address'" onfocus="if(this.value=='Enter your email address') this.value =''" value="Enter your email address" required><br> <input id="submitbutton" type="submit" name="email-button" value="免费订阅" onClick="Confirm(this.form)"> </form> </div>
3.个性化订阅结果页面
订阅者输入邮箱地址点击订阅按钮后,mailman会打开一个新的页面,这个页面就是订阅结果页面。默认的订阅结果页面实在不怎么好看。我们可以在服务器上输入下面的命令来编辑订阅结果页面:
sudo vi /var/lib/mailman/templates/zh_CN/subscribe.html
你可以对这个文件做一点小修改,也可以把原来内容全部删除,自己编辑一个HTML页面。这个文件是所有列表默认的订阅结果页面文件。如果你只想修改特定列表的订阅结果页面,那么输入下面的命令创建特定列表的订阅结果页面文件:
sudo vi /var/lib/mailman/lists/listname/zh_CN/subscribe.html
把listname替换成你的列表名称,编辑好这个文件后保存。点击这里参考一下我编辑的内容,我的web开发水平有限啦,高手可以跳过,不过新手可以参考一下源代码哦。
4. 个性化确认邮件
默认情况下,mailman发出的确认邮件有很多文字,而且邮件中说明的确认方法很多。这很容易让订阅者感到灰常麻烦。我们可以编辑一个文件,删掉确认邮件中不必要的内容。在服务器上输入下面的命令:
sudo vi /var/lib/mailman/templates/zh_CN/verify.txt
mailman就是以verify.txt文件作为模板向订阅者发送确认邮件的。你会看到文件中有很多内容。其实我们只需要下面的内容就行了。
感谢您订阅邮件列表%(listname)s,请点击下面的链接以确认您的订阅: %(confirmurl)s 如果您并不想订阅此邮件列表,请简单的忽略此信件。如果您认为某人恶意的要将 您加入此列表,或者有其它的任何问题,请把他们发送给 %(listadmin)s。
你可以把文件中的原来内容都删掉,然后把上面的4行文字粘贴进去。
5. 订阅无需确认
默认情况下,mailman要求订阅者通过邮件确认后才能成为正式的订阅用户。但是有些订阅者可能一时忘记确认,或者由于其他原因而没有确认订阅。这时,我们可以设置订阅无需确认,直接填写邮箱地址便可成为正式的订阅用户。以下是具体步骤。
首先在服务器上编辑/usr/lib/mailman/Mailman/mm_cfg.py文件,
sudo vi /usr/lib/mailman/Mailman/mm_cfg.py
将下面两行文字添加到文件末尾:
ALLOW_OPEN_SUBSCRIBE = 1 DEFAULT_SUBSCRIBE_POLICY = 0
然后重启mailman程序
sudo service mailman restart 或 sudo systemctl restart mailman
登录mailman列表管理地址,在“配置目录”下方选择“隐私选项”。
然后在下方的订阅设置的“订阅需要哪些步骤”这一栏选择“无”,最后提交修改。
这样订阅者在订阅时就不需要通过邮件确认了。
6.个性化欢迎邮件
输入下面的命令编辑欢迎邮件模板
sudo vi /var/lib/mailman/templates/zh_CN/subscribeack.txt
7.发送HTML邮件
mailman可以设置是否允许向列表成员发送HTML邮件,如果你要向列表成员发送HTML邮件的话,那么在列表的网页管理后台设置允许HTML。在配置目录下选择“内容过滤”,
然后将下方第一栏“mailman是否按下列设置过滤列表中的消息内容”的值设置为“不”,最后提交修改,我们就可以向列表成员发送HTML邮件了。
8.发件人过滤
默认情况下,任何列表成员都可以向列表的其他成员发送邮件。这是mailman作为一个讨论工具所具有的功能,如要你只想让mailman作为一个邮件营销程序,那么我们需要对发件人设置过滤。
1)禁止非成员向其他成员发送邮件
在列表管理后台选择“隐私选项” >> “发送端过滤”,在非成员过滤器这一部分,将“generic_nonmember_action“的值设为“丢弃”。这样非成员提交的邮件不会发送给列表成员。另外可以将“是否转发给管理员”的值设为“是”,用来查看有没有人想发送垃圾邮件。
2)禁止列表成员向其他成员发送邮件
选择“隐私选项”>>“发送端过滤”,在成员过滤器的第一栏中将“新成员的信件是否被暂存”设置为“是”。第二栏选择“丢弃”,然后提交修改。这样新成员的信件会被自动丢弃。
对于已经加入列表的成员,我们需要将他们设为节制状态。在配置目录中选择“成员管理”,在下方“额外的成员任务”中,将每位成员的节制位设为“开”,然后保存。这会将所有已经加入列表成员转换成节制状态。由于我们在上一步设定被节制成员发信到列表时丢弃该信件,所以已经加入列表的成员在发送信件时,他们的信件也会被自动丢弃。
3)允许列表管理员向成员发信
如果列表管理员同时也是列表成员,那么先要将管理员的节制位设为“关”。在成员列表中,找到管理员的邮箱地址,然后将管理员的“修改”这一个选项的√ 去掉,然后保存。这样既是成员又是管理员的人发送邮件时就会自动转发给列表的每一个成员了。
其实“修改”这个词语是mailman翻译有问题啦,人家英文是mod,mod是moderate的简写,moderate就是“审核,节制”的意思,但是mod也可以是modification的简写,modification就是“修改”的意思啦。
如果管理员不是列表的成员,那么在“配置目录”下面选择“隐私选项”>>“发送端过滤”,然后在非成员过滤器这一个部分,自动接受的非成员地址清单中填写管理员的邮箱地址,然后提交修改。
现在只有管理员可以向成员列表发送邮件了!
9.显示收件人的真实地址
默认情况下,当列表成员向其他成员发送邮件时,所有人看到的收件人地址为形式为:[email protected]。这个是列表的邮箱地址,而不是成员的邮箱地址。要在邮件中显示成员的真实邮箱地址,按下面的步骤:
在服务器上输入下面的命令编辑mm_cfg.py文件:
sudo vi /usr/lib/mailman/Mailman/mm_cfg.py
在文件末尾添加下面两行文字:
OWNERS_CAN_ENABLE_PERSONALIZATION = Yes VERP_PERSONALIZED_DELIVERIES = Yes
保存文件。重启mailman:
sudo service mailman restart 或 sudo systemctl restart mailman
然后在列表的网页管理后台,选择”非摘要选项”。
在下方第二栏设置中,选择“完全个性化”,最后提交修改。这样mailman在发送邮件时就会显示收件人的真实邮箱地址。不过,这会影响到邮件服务器的性能,因为在这种情况下mailman需要一封一封地向MTA发送每个列表成员的个性化邮件。
10.隐藏列表地址
按照第9个步骤,我们虽然可以显示收件人的真实地址,但是列表地址会出现在抄送地址(Cc)当中。我们需要将整个抄送地址从邮件中删除,从而删除了列表地址。下面是具体方法。
在/usr/lib/mailman/Mailman/Handlers/目录下新建一个RemoveCC.py文件
cd /usr/lib/mailman/Mailman/Handlers sudo vi RemoveCC.py
在文件中添加下面的代码后保存。
# Your comments here """Remove CC header in post-only mailing lists This is to avoid unmoderated members to reply to messages, making their replies public. Replies should instead go to a private list. """ def process(mlist, msg, msgdata): del msg['Cc']
然后输入下面的命令编译RemoveCC.py文件,这会在/usr/lib/mailman/Mailman/Handler/目录下生成一个Remove.pyc文件。
sudo pycompile RemoveCC.py
接下来修改默认的过滤器。输入下面的命令创建一个extend.py文件,将listname修改成列表名称。
sudo vi /var/lib/mailman/lists/listname/extend.py
在文件中粘贴下面的代码后保存。
import copy from Mailman import mm_cfg def extend(mlist): mlist.pipeline = copy.copy(mm_cfg.GLOBAL_PIPELINE) # The next line inserts MyHandler after CookHeaders. mlist.pipeline.insert(mlist.pipeline.index('CookHeaders') + 1, 'RemoveCC')
然后输入下面的命令以启用此过滤器,将listname修改成列表名称。
sudo config_list -i /var/lib/mailman/lists/listname/extend.py listname
你可能会看到如下输出结果,如果你不懂 python的话,可以不要理睬它,只要知道这是正常情况就行了。
属性”mm_cfg”被忽略
属性”copy”被忽略
属性”extend”被忽略
现在,可以发一封测试邮件看看抄送地址是否被删除了。
11.隐藏代发人地址
列表成员给其他成员的邮件是由mailman程序来代发的,有些邮箱服务商或邮件客户端如QQ邮箱和Outlook会把这两者区分开来。他们会提示收件人这封邮件是代发的,有时还会警告收件人审视邮件的真实性,比如下面QQ邮箱给收件人的警告。
这显然会降低收件人对此封邮件的信任,不利于邮件营销。所以,我们要把代发人的地址隐藏。在列表的网页管理后台的“一般选项”中的倒数第二个设置,将“include_sender_header“的值设为“不”,然后提交修改。这样收件人就只能看到发件人地址,看不到代发人地址,也看不到警告信息。
虽然这么做不利于mailman检测发送失败的邮件,但我们有其他办法来降低邮件发送失败的概率。
12.自动添加reply-to地址
收件人回复邮件需要知道一个reply-to地址,也就是回复地址。我们在发邮件时可以手动添加一个reply-to地址,但每次都手动添加很浪费时间。我们可以让mailman为列表自动添加一个reply-to地址。在列表网页管理后台的“一般选项”设置中,将“reply_goes_to_list”的值设为“显式地址”,然后在下一栏填写reply-to地址,最后提交修改。这样,当收件人点击回复按钮时,reply-to地址会自动输入到收件人地址一栏中。
13. 删除自动添加的尾部文本
在配置目录下选择“非摘要选项”,然后删掉邮件尾部的文本。
14.禁止mailman向列表成员发送密码
mailman默认会每个月向列表成员发送一次成员密码。对于邮件营销来说,成员密码显然是一个鸡肋。我们可以在“一般选项”设置的“通告”下面,将“send_reminders”的值设为“不”,然后提交修改。这样mailman就不会向成员发送密码了。
另附:实用的mailman命令
mailman有许多实用的命令,以下是最重要的几个命令。
sudo newlist //创建一个新的列表 sudo rmlist "listname" //删除listname这个列表 sudo list_lists //列出所有的列表 sudo list_members "listname" //列出listname这个列表所有的订阅用户 //将[email protected]添加到listname这个列表 echo "[email protected]" | sudo add_members -w y -r - "listname" sudo add_members -r file "listname" //将file文件中的邮箱地址添加到listname这个列表中 sudo remove_members "listname" "[email protected]" //将[email protected]从listname这个列表中删除 sudo mmsitepass //设置网页管理界面的密码