原文:http://www.l4zy.com/posts/aws_ses-mailgun-sendcloud.html

电子邮件这一已经诞生很多年的互联网基础服务并没有随着时间的推移而慢慢消亡,实际上它的生命力比大多数人预料的要强得多,至少到目前为之它还是互联网不可缺少的一部分。因此邮件系统就成了大多数网站重要组件,我在开发SegmentFault邮件通知系统的时候有幸测试了目前比较常见的三大邮件发送服务。

这里可以大致介绍下这三大服务的特点

大致介绍

AWS SES

我们最早使用的就是它,价格非常便宜,便宜到每月的费用基本上可以忽略,而且API也非常友好,实在是初创网站的不二选择。但是它有三个非常明显的缺点

  1. 经常容易被墙,因此你至少要有一台境外的VPS做透明代理,建议你最好生成一个私有的SSL证书,或者你不差钱买个公有的也可以,总之尽量别裸奔,原因你们都懂的。
  2. 不支持群发,虽然你可以在邮件中一次CC给多个收件人,但是用户在收到邮件后会在收件人中看到其他人的名字,很显然不够友好。
  3. 最要命的一点那就是QQ邮箱目前已经基本屏蔽SES了,而且因为是共享发送服务器IP,所以基本无解。

前面两点有解决方法,可以参考我写过的《用PHP实现一个Amazon SES的代理服务器》

SendCloud

由于有官方的合作关系,我在SendCloud还在内部测试的时候,就拿到了使用资格,并在SF线上的一些不重要的服务上进行了测试。

SendCloud对国内邮箱的支持是非常好的,上面提到的QQ邮箱服务在SendCloud里面没有遇到,所有邮件均能准确送达。而且由于是国内线路,所以API响应速度也非常快。

但是我有点担心它对国外邮箱的支持,因为已经出现过发送到windows live邮箱收不到的情况,不过后来得到了解决。不过我建议大家在发送国外邮箱时还是使用国外的邮件服务,因为很有可能因为众所周知的访问限制原因,我们的邮件无法送达,毕竟搜狐也解决不了政策上的问题。

最后要说一点的是,SendCloud的定价有点偏贵。免费用户每天200封的限制 还不如限制每月的总封数。而且对于群发邮件来说,我用SES每个月100块人民币就搞定的量,在SendCloud上可能要用五六百了。最后每个月即使你一封邮件也不发,也会扣59块钱,这也太坑爹了吧,难道是参考手机的最低消费来算的?我还是比较喜欢按发送量来收费比较透明。

不过针对国内某些比较难搞定的邮箱,用SendCloud还真是挺合适的。

Mailgun

首先赞一下它的官网页面设计,清新脱俗。从它的logo也可以看出,这公司已经成为rackspace旗下的了。

rackspace何许人也,如果这么著名的IDC你都没听过,我只能告诉你github的就托管在它上面。而Mailgun官网下方合作伙伴logo列表里大大的github也显示它们之间不凡的关系。

Mailgun的免费账户还是挺实用的,每个月10000封的量足够中小网站使用了。当然价格还是比SES略贵,但是人家的邮件到达率可比SES高多了,目前我们正在测试SF的通知邮件,基本没有被拒收,即使在最奇葩的QQ邮箱也能做到完全送达。

另外我要说一下Mailgun的API,设计的太赞了,不需要任何特殊的sdk支持,只需要用curl去post相应的参数就行了,这才是真正的REST接口!

服务后台

SES的服务后台还真是简约又简单,当然它是整合到了AWS Management Console里,你只能看到个大概信息,上方是账户基本概况

可以看到,由于我平时的发送量比较大,SES已经自动将我的配额调整到每天10万封的发送量,每秒钟最多可以发送28封邮件。需要注意的是这个数值是渐进式增长的,你开始也许只有1000封的配额,这主要是防止某些垃圾邮件发送服务一开始就滥用。

下方是SES的统计图表,由于我目前就是拿SES来群发周报所以可以看到很有规律的数值起伏。值得注意的是SES没有日志查看,这就是所有的信息了。所以出了问题你在后台是查不到的,只能你自己记录每封邮件的返回信息了。

相比较而言SendCloud提供的信息就非常全面了,无论是概览的趋势图

还是每封邮件的发送记录,都有显示。

但是东西一多就显得很杂乱,某些东西让人摸不着头脑,比如下方的这个收信域名是个什么东西,页面上也没有相应的帮助链接。我当时只是按发信域名设置了一下,后来发现设不设置都没影响

最后出场的是Mailgun,这也是让我最喜欢的一个后台设计,dashboard页清晰明了

日志页可以追踪每封邮件的状态

最后要说的

前段时间看到知乎把邮件服务从Mailgun部分迁移到SendCloud了,其实我也建议大家这么做。针对国内部分邮箱,使用SendCloud来发,其它邮箱就用Mailgun。如果是群发周报这种对到达率要求不高的邮件,则可以选用SES这种价格便宜量又足的服务。最后几点忠告

  1. DKIM是必须要做的
  2. 把你的发信域名与主域名分开,用子域名比如mail.xxx.com,这样如果某个域名不慎被封还有回旋的余地
  3. 如果是土豪,建议单独购买独立ip的发信服务,这样被封杀的可能性最小,而且有了ip就可以跟服务商谈加入白名单了。目前Mailgun和SendCloud都有这个服务。

邮件发送服务AWS SES,Mailgun以及SendCloud(转)的更多相关文章

  1. 免费超大量邮件发送服务Amazon SES和Mailgun提供SMTP和API支持

    一般来说网站注册.论坛消息.新闻推送.广告宣传等都会有发送邮件服务,大量的邮件发送服务如果用PHP来发送,一是会消耗主机资源,二是容易被各大邮箱判定为垃圾邮件而被拒收.用第三方的邮局服务发送邮件,可以 ...

  2. 【故障公告】SendCloud 邮件发送服务故障造成大量 QQ 邮箱收不到邮件

    抱歉,由于我们所使用的搜狐旗下的 SendCloud 邮件发送服务出现故障,今天上午大量发往 @qq.com 邮箱的邮件无法正常发送,从 SendCloud 管理控制台看这些邮件一直处于“请求中”的状 ...

  3. c#邮件发送服务

    邮件发送服务 项目中会遇到定时给某人发送邮件的功能要求,这里是京东的一段代码,当然也是我同事找的,我记录学习一下,以免忘记. 这是解决方案 这里主要是工具:日志工具,链接数据库工具,发送邮件工具 这里 ...

  4. SpringBoot系列(十四)集成邮件发送服务及邮件发送的几种方式

    往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件详解 SpringBoot系列(四)web静 ...

  5. ThinkPHP5 封装邮件发送服务(可带附件)

    1.Composer 安装 phpmailer composer require phpmailer/phpmailer 2.ThinkPHP 中封装邮件服务类 我把它封装在扩展目录 extend/M ...

  6. ThinkPHP5 封装邮件发送服务(可发附件)

    1.Composer 安装 phpmailer 1 composer require phpmailer/phpmailer 2.ThinkPHP 中封装邮件服务类 我把它封装在扩展目录 extend ...

  7. 纯java实现邮件发送服务(亲测好用)

    今天自己测试了一下用java代码实现发送有限的服务,非常简单.直接贴代码: import com.sun.mail.util.MailSSLSocketFactory; import javax.ma ...

  8. 使用spring的邮件发送功能

    使用spring提供的MailSender和JavaMailSender类. 1.邮件对象类 package cn.luxh.app.mail; import java.util.List; impo ...

  9. Java实现多线程邮件发送

    利用java多线程技术配合线程池实现多任务邮件发送. 1.基本邮件发送MailSender package hk.buttonwood.ops.email; import java.io.File; ...

随机推荐

  1. 在HibernateTemplate里执行Sql语句

    如下所示只能执行非Select语句: public static void executeSQL(HibernateTemplate hibernateTemplate, String sql) { ...

  2. MVC+Ef项目(2) 如何更改项目的生成顺序;数据库访问层Repository仓储层的实现

    我们现在先来看看数据库的生成顺序   居然是 Idal层排在第一,而 web层在第二,model层反而在第三 了   我们需要把 coomon 公用层放在第一,Model层放在第二,接下来是 Idal ...

  3. C# list installed softwares

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Product&q ...

  4. POJ 2395 Out of Hay 草荒 (MST,Kruscal,最小瓶颈树)

    题意:Bessie要从牧场1到达各大牧场去,他从不关心他要走多远,他只关心他的水袋够不够水,他可以在任意牧场补给水,问他走完各大牧场,最多的一次需要多少带多少单位的水? 思路:其实就是要让所带的水尽量 ...

  5. Python中字符串的使用

    这篇文章主要介绍python当中用的非常多的一种内置类型——str.它属于python中的Sequnce Type(序列类型).python中一共7种序列类型,分别为str(字符串),unicode( ...

  6. Excel学习笔记杂荟

    Excel学习 一.工具->选项 可以对整个excel里面的东西进行编辑,里面有隐藏行号,下拉档等选项,有文档作者信息. 隐藏网格等 二.单元格内容比较大可以右击单元格->设置单元格格式- ...

  7. greensock的tween源码阅读笔记

    对于一个处于gc状态的tween,如果这个gc状态是由kill触发的,那么直接从masterList删除否则的话,被tweenlite的垃圾回收删除! 对于一个不是立即启动的tween,它被添加到ti ...

  8. MongoDB的启动

    在桌面或者其它地方建立mongodb.bat 批处理文件 在里面写入如下内容 mongod --dbpath D:\java_tools\MongoDB\MongoDBDATA 保存-然后打开该文件 ...

  9. python的subprocess无法进行通信(无法通过管道输入数据)的问题解决

    1.在主进程使用 p.stdin.write("something\n") 要有回车!要有回车!要有回车! 2.在子进程使用 data = raw_input() 读取数据,再用 ...

  10. 看看JavaScript中void(0)的含义

    JavaScript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值. void 操作符用法格式如下:1. javascript:void (expression)2. javascr ...