总结几个跟异步发邮件失败的原因:
- 修改应用
/config
目录下的文件后得重启服务器,代码才能生效。例如在/config/environments/development.rb
修改了smtp配置。 - 修改跟Sidekiq的
Worker
后,要重启Sidekiq,代码才能生效。例如:修改了/app/workers/mail_worker.rb
中的代码。
- 只能传递基本参数给
Worker
,如:不能直接传送Model对象给Worker
,只能传递id,然后在Worker中再创建Model对象。否则Sidekiq会报错,可以在Sidekiq控制台观察,一个任务Start后没有Done。
- smtp服务对发邮件次数有限制,如:我用网易邮件1天发送了40条邮件后就无法发送了。短时间内使用新浪发送同样信息的邮件时会发不出去。
如何判断是哪个因素导致的:
- smtp服务是否可以正常使用?
可以在控制台发送Email,见StackOverflow: Send email from rails console
- 有无执行异步任务?
在控制台观察Sidekiq执行该任务后有没有停止
领悟:
出问题时得把逻辑拆分开来,分别检测,不然容易解决这边的问题,那边又出问题。
网友评论