由于发信量比较大,而腾讯的企业邮箱,每天有发信数量限制。。。。
主要是海外用户:Mailgun,API 超赞,QQ 邮箱会收不到。 主要是国内用户:SendCloud,API 一般,Gmail/Yahoo 邮箱会收不到,而且内容需要先提交人工审核。
有闲没钱的可以这样干:自己写一个负载均衡,然后注册一堆 QQ、Gmail、163 邮箱作为 Backend,在负载均衡处提供 HTTP API 给 App 用。
#13 楼 @xiaoronglv 我说的是整体情况,你要发送少量的话,完全不在我说的情况内。 国内好几家互联网创业公司或者创业者都用的 Mailgun,我们互相交流了一下情况,QQ 邮箱的到达率非常不稳定。
QQ 邮箱的流控是有问题的,它不是按照国际上常规的方式来流控和区分垃圾邮件来源的,而是粗暴地按照一个 IP 进行数量控制。比如: 你的 IP 日均发送 QQ 邮箱 5000 封,今天别人发了 4800 封,你要发 1000 封,那么 200-500 封成功,其他失败。 如果你是独立 IP,几周没发邮件给 QQ 邮箱了,今天突然发送 1000 封,很可能只有 100 封成功,其他失败。 国内的网易,和国外所有知名服务商都没有此类问题。
#23 楼 @RainFlying 你们怎么做到发送邮件不给 spam,我们拿以前一封邮件内容稍微测试 1000 个人,发现以前通过 sendcloud 发有 80% 打开率,但是自己的服务器就 5%
class BaseMailer < ActionMailer::Base
abstract!
layout 'mailer'
default content_type: 'text/html',
reply_to: '[email protected]'
SMTP_SERVERS = {
white: {
from: 'KnewOne <[email protected]>',
delivery_settings: {
address: 'smtp.mailgun.org',
port: 25,
domain: 'knewone.com',
user_name: USERNAME,
password: PASSWORD,
authentication: 'plain',
enable_starttls_auto: true
}
},
default: {
from: 'KnewOne <[email protected]>',
delivery_settings: {
address: 'smtpcloud.sohu.com',
port: 25,
user_name: USERNAME,
password: PASSWORD,
authentication: 'login',
domain: 'sendcloud.org'
}
}
}
WHITES = %w(gmail.com ruby-china.org)
def mail(headers = {}, &block)
if self.delivery_method == :smtp
smtp_config = route_smtp_server(headers[:to])
m = super headers.merge(from: smtp_config[:from]), &block
m.delivery_method.settings.merge!(smtp_config[:delivery_settings])
m
else
super headers, &block
end
end
private
def route_smtp_server(email)
SMTP_SERVERS[(WHITES.include?(/.*@(.+)/.match(email)[1]) ? :white : :default)]
end
end
其实应该用 http://guides.rubyonrails.org/action_mailer_basics.html#intercepting-emails 来实现,不过当时顺手写的,懒得重构了
我们量小的时候用 QQ 企业邮箱,没有发生过服务器拒收情况,后来量大转用 Sendcloud 发国内配合 Mailgun 发国外,注意 sendcloud 发送 sina 会被拒收,不道是不是我们的个别情况
另外有个坑,Sendcloud 即使是收费用户每日也有配额,而且你不能通过花更多钱来提高,只能通过他文档里介绍的提高信用度来提高配额,然后半独立 ip 和独立 ip 要申请,不直接和他们团队沟通,根本申请不下来
另外最大的坑就是,sendcloud 因各种原因(超过配额、欠费)拒收之后 Rails 这端会给无厘头的异常 EOFError: end of file reached
遇到之后第一时间登录到 sendcloud 上检查配额余额之类的情况就好