使用MailGun发送EDM的那点事儿

2014-10-26 21:40:13
使用MailGun发送EDM遇到的一些事情,记录下来,这其中也是有不少诀窍的。不管怎样,我们的发送的Email,都应该是经过用户同意的、对用户有用的,而不应该是垃圾邮件。

关于发送Email,以前也做过不少,基本上很多项目中都会涉及到Email发送的功能,

比如用户注册时的邮箱验证、取回密码、事件提醒等功能,我们把这种由用户触发的邮件发送称之为事务性邮件,

另外一种就是网站方不定期的给所有用户发送一些信息,比如某个优惠信息、网站换个域名等等,

这类邮件发送是由网站方主动发起的,主要特点是在短时间内发送大量邮件。


对于事务性邮件(Transactional Email),通常就是采用自己的smtp邮件服务器直接发送,

不管是自建邮件服务器还是使用第三方的服务(比如qq、网易企业邮、263企业邮箱)等,每天发个几百封应该没问题。


对于群发类邮件(Mailing List),通常发送量比较大,成千上万甚至几十上百万的,这时一般就没办法使用第三方企业邮箱了。

以前,我都是直接用Linux系统的sendmail直接发送,但是缺点也很明显,邮件的送达率、打开率都很低,

很容易被邮件服务商封了IP,需要自己慢慢维护自己的邮件服务器的信誉值。


这次,正好有一个客户的EDM单子,大约发送5万封Email,为了提高一下打开率,就选择了网上的专业

提供Emai发送服务的服务商,主要是了解了两家,一家是国内的搜狐的SendCloud,一家是国外的MailGun。

由于SendCloud需要提供企业的各种执照才可以,所以就选择了国外的MailGun(网址是http://www.mailgun.com)


MailGun是国外的一家专门提供邮件发送的服务商,既提供事务性的邮件发送,也提供邮件列表群发服务,

每天会提供300次的免费名额,超过部分是要收费的,不过费用还可以接受。


第一步,注册一个MailGun账号

登录http://www.mailgun.com,按照提示注册就行了,注意用户名要用真实的Email地址,不能乱填。

我注册完,登录的时候,发现账号被锁住了,提示“Your account is currently disabled”的信息,

这时,就通过内部的客服系统(Support)给客服发送一个Ticket,说明情况,很快的客服就会给你enable你的账号。


这里不得不说一下他们的客服,反馈很快,基本上也都能解答你提出的问题。我用过Godaddy、Linode这些国外的服务,

他们的客服都做的比较好,很人性化。


第二步,测试发送邮件

注册了账号之后,就可以每天免费发送300封邮件了,这时我们可以试着先熟悉一下MailGun提供的接口和API。

这里要说一下,MailGun是面向开发人员提供的服务,也就是说需要用户有开发能力,MailGun提供了很多语言的示例,

常用的Java、Net、Php、Python、Ruby、Curl都有,选择一个您熟悉的,把代码拷贝下来测试一下就行了。


Mailgun提供普通的 SMTP方式发送,也提供API方式发送,可以根据自己的需求选择。


第三步,添加域名

如果想使用自己的域名发送邮件,就需要绑定自己的域名,另外如果想每天发送超过300的话,也必须要绑定自己的域名。

注册一个MailGun账号的时候,他们提供给我们一个免费得域名,如sandbox55353.mailgun.org之类的。

绑定域名这一步稍微复杂一些,但是按照说明一步一步来就行了。需要解析你的域名mx记录、添加txt记录,

之后就可以在线验证了。


第四步,绑定信用卡

要想每天发送多于300封,必须要先绑定自己的信用卡,所以你得有一个支持Visa或者MasterCard的信用卡,

国内很多银行也提供带有这种标记的信用卡。


第五步,准备要发送的邮件地址库

通常就是自己网站的用户注册库或者其中的一部分,我们是从注册用户库里选择了5万的Email地址。


第六步,群发

一切准备就绪,就开始群发了,我的程序是每秒发送一封,是PHP开发的,

因为要发送很长时间,所以在Linux服务器上使用screen命令,即使断开终端,发送程序仍然不会停止。

screen -S edm_send

那天是晚上10点多开始发的,第二天上班一看,已经发送了18000封,心里还挺高兴。于是去MailGun的后台看了下,

发现我的域名已经被停止了”Your domain is disabled",发送日志里全是“Poor mailing list quality”。


于是,又通过客服系统跟MailGun沟通,大意是我的邮件列表里有太多的无效的邮件地址,这样很容易被ESP认定为

垃圾邮件发送者,并建议我先清理一下邮件列表,然后他们再给我打开我的域名。


因为,我们的用户名虽然都是Email格式,但是并没有严格去验证,所以很多用户填写了假的邮件地址。


第七步,清理邮件地址列表

客服还给了我建议,让我去google搜索“Email list cleaning”,结果发现都是收费的服务,而且都挺贵的。

因为很多年以前,自己也研究过smtp协议,知道一些邮件发送的基本步骤,所以就想自己写个程序去清洗。

步骤也很简单,先通过dns服务器找到某个邮件的mx记录,有的mx记录可能不止一个。

然后通过socket挨个连接这些邮件服务器,通过smtp协议与服务器沟通,

比如

HELO

RCPT TO:

然后根据服务器的返回代码来判断是不是有效的 Email地址。


验证完5万的邮件地址,差不多用了一天多时间。当然这种方法验证的不一定都准确,而且可能会漏掉一部分。


第八步,再次发送

这次验证完邮件地址,再次请客服开启我的域名,继续发送。

一切都很顺利。


第九步,数据监控

发送EDM,就一定要监控相关的数据,最基本的就是打开率和点击率,

所谓打开率就是看了邮件的用户数/发送的总用户数,点击数就是点击了邮件里的链接的用户数量。

监控打开率是在邮件里通过一个 1x1的透明背景的图片来实现的,比如 ,<img src="“http://www.hutuseng.com/stat.php”" width="1" height="1" /> 我们只要在stat.php页面里做统计就行了。只不过这就只适合html格式的邮件,需要邮件客户端支持HTML格式。


当然,Mailgun提供的服务还远不止这些,大家可以自己看看。