actionmailer奇怪的行为

时间:2014-01-26 06:44:15

标签: ruby-on-rails smtp actionmailer

我们有一个运行延迟工作的应用,用于发送电子邮件。我们遇到了一个问题,其中delayed_job worker接收了n个要处理的作业。查看delayed_job日志,它会处理所有这些。 rails日志显示它接收相同数量的呼叫并且正在处理所有呼叫。但是我们没有收到所有的电子邮件。

日志中没有smtp错误且没有任何失败。我们唯一能够识别的是,当delayed_job日志显示一个项目需要额外的日志时间时,电子邮件无法通过。但日志仍显示一切正常。以下是供参考的日志。

Deleyed_Job日志:

2014-01-17T11:13:07+0000: [Worker(delayed_job host:ip-10-224-110-111 pid:417)] Starting job worker
2014-01-18T08:00:32+0000: [Worker(delayed_job host:ip-10-224-110-111 pid:417)] Job Class#warehouse_daily_orders_email (id=1) RUNNING
2014-01-18T08:00:35+0000: [Worker(delayed_job host:ip-10-224-110-111 pid:417)] Job Class#warehouse_daily_orders_email (id=1) COMPLETED after 2.0887
2014-01-18T08:00:35+0000: [Worker(delayed_job host:ip-10-224-110-111 pid:417)] Job Class#warehouse_daily_orders_email (id=2) RUNNING
2014-01-18T08:00:36+0000: [Worker(delayed_job host:ip-10-224-110-111 pid:417)] Job Class#warehouse_daily_orders_email (id=2) COMPLETED after 1.5629
2014-01-18T08:00:36+0000: [Worker(delayed_job host:ip-10-224-110-111 pid:417)] Job Class#warehouse_daily_orders_email (id=3) RUNNING
2014-01-18T08:00:38+0000: [Worker(delayed_job host:ip-10-224-110-111 pid:417)] Job Class#warehouse_daily_orders_email (id=3) COMPLETED after 2.0888
2014-01-18T08:00:38+0000: [Worker(delayed_job host:ip-10-224-110-111 pid:417)] Job Class#warehouse_daily_orders_email (id=4) RUNNING
2014-01-18T08:01:08+0000: [Worker(delayed_job host:ip-10-224-110-111 pid:417)] Job Class#warehouse_daily_orders_email (id=4) COMPLETED after 30.0262
2014-01-18T08:01:08+0000: [Worker(delayed_job host:ip-10-224-110-111 pid:417)] 4 jobs processed at 0.1109 j/s, 0 failed

Rails生产日志:

Rendered user_mailer/orders_email.erb (538.7ms)
Sent mail to someemail@somedomain.com (2890ms)

Rendered user_mailer/orders_email.erb (0.1ms)
Sent mail to someemail@somedomain.com (1536ms)

Rendered user_mailer/orders_email.erb (0.1ms)
Sent mail to someemail@somedomain.com (1753ms)

Rendered user_mailer/orders_email.erb (0.2ms)
Sent mail to someemail@somedomain.com (30013ms)

配置中动作邮件程序的设置:

config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = false
config.action_mailer.default :charset => "utf-8"  

config.action_mailer.smtp_settings = {
    :address   => "smtp.gmail.com",
    :port      => 25,
    :user_name => ENV["GMAIL_USERNAME"],
    :password  => ENV["GMAIL_PASSWORD"]
}

2 个答案:

答案 0 :(得分:0)

在此处添加您想要的Gmail帐号ENV [“abc@gmail.com”]和密码ENV [“123456”]

答案 1 :(得分:0)

提出交货错误,以便找到原因:

config.action_mailer.raise_delivery_errors = true

提供其他参数:

config.action_mailer.smtp_settings = {
  address:              'smtp.gmail.com',
  port:                 587,
  domain:               'example.com',
  user_name:            ENV["GMAIL_USERNAME"],
  password:             ENV["GMAIL_PASSWORD"],
  authentication:       'plain',
  enable_starttls_auto: true  
}

在您调用电子邮件方法的地方,在末尾添加“.deliver”,即:

UserMailer.welcome_email(@user).deliver

对于后台作业,您可以将此代码段放在异常块中,并可以使用ExceptionNotification gem发送电子邮件,其中包含有助于您轻松捕获并找到失败原因的详细信息。