Redis sidekiq 发邮件的诡异问题

robot_zhang · 2014年12月10日 · 最后由 dddd1919 回复于 2014年12月12日 · 10009 次阅读

配置好 sidekiq 之后发送邮件一直提示错误:

Net::SMTPSyntaxError: 501 mail from address must be same as authorization user

按字面意思,邮件的 from 地址和 smtp 的 user name 不一致导致的,但是显然,配置中是一致的。在 rails c 中测试 deliver 邮件又能够准确发送。大家有遇到过这种问题吗?

UPDATE:

我更换了发信 smtp 账号之后用 sidekiq 可以顺利发送出去了,不过非常奇怪的是:
2个 smtp 都是腾讯的企业邮箱账号,当然也排除了密码输入的的错误,然而有一个账号能发,另一个总是出现 501 的问题。

ps. mailgun 目前的服务基本不能用,不是 550 就是进垃圾箱

这东西确定配置对了?

ActionMailer::Base.smtp_settings = {
  :address        => "smtp.163.com",
  :port           => 25,
  :domain         => '163.com',
  :user_name      => 'your_user_name',
  :password       => 'your_password',
  :authentication => "plain"
}

#1 楼 @hz_qiuyuanxin 是,肯定是配置对了,因为我 rails 的 console 中执行 deliver 是可以成功发送邮件的。调试的过程中我认为可能是 sidekiq 将任务加入到队列的时候是不是修改了内容导致的问题。

检查下 from 地址写全了么?比如:

default from: "your_username@mail_host.com"

手动执行 work 输出参数看看

重启 sidekiq 了吗?

#5 楼 @dddd1919 手动执行给出的结果是成功加入并执行了队列

#6 楼 @bastengao 重启了,可能是 mailgun 地址导致的问题,但我现在比较迷惑的是,rails console 调试可以顺利发出邮件,但是一旦用 sidekiq 就出这个 501 错误。

#7 楼 @robot_zhang 我的意思是直接手动执行perform里的代码看看结果,另外 sidekiq 的 environment 设置,能否把 perform 的代码贴出来瞧瞧

@dddd1919 我没有写 workers 直接用的 delay email

NewsletterMailer.delay.releases(user_id)

sidekiq 的配置:

:concurrency: 5 # 并发数
:pidfile: tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log # 输出的日志地址

:queues:
  - default # 写在队列参数中的, 表示让 sidekiq 处理这个 queue
  - [normal, 2] # 使用数组的形式写, 第一个参数为打开的 queue 的名称, 第二个为优先级

development:
  :concurrency: 5
staging:
  :concurrency: 10
production:
  :concurrency: 20

#10 楼 @robot_zhang 发一个邮件也会报错?

@dddd1919 对的,比较诡异的是,我 2 个邮件服务器账号(都是腾讯企业邮箱)有一个能正常发,有一个就出这个 501 问题。

#12 楼 @robot_zhang 可能是你的账号被人家给举报了吧

需要 登录 后方可回复, 如果你还没有账号请 注册新账号