ArgumentError:发送消息需要SMTP To地址。设置消息smtp_envelope_to,to,cc或bcc地址

时间:2013-08-24 14:28:26

标签: ruby-on-rails ruby-on-rails-4 actionmailer

我有一个带有以下邮件程序配置的rails 4应用程序:

config.action_mailer.delivery_method = :smtp
  config.action_mailer.default_url_options = { host: 'myhost.com' }
  config.action_mailer.perform_deliveries = true

  config.action_mailer.smtp_settings = {
    :enable_starttls_auto => true,
    :address            => 'smtp.myhost.com',
    :port               => 587,
    :domain             => 'myhost.com',
    :authentication     => :login,
    :enable_starttls_auto => false,
    :tls                  => false,
    :openssl_verify_mode  => 'none',
    :ssl => false,
    :user_name          => "myusername",
    :password           => "mypassword"
  }

每当我尝试使用测试邮件设置发送邮件时:

class TestMailer < ActionMailer::Base

  default :from => "noreply@myhost.com"

  def welcome_email
    mail(:to => "testmail@mymailaddress.com", :subject => "Test mail", :body => "Test mail body")
  end
end

TestMailer.welcome_email.deliver

我遇到了这个例外:

  

ArgumentError:发送邮件需要SMTP To地址。组   消息smtp_envelope_to,to,cc或bcc地址。

我有可能忘记设定的东西吗? 我找不到“smtp_envelope_to”

的配置选项

3 个答案:

答案 0 :(得分:26)

错误消息与SMTP信封无关,而与发件人有关:

  

发送消息需要SMTP To地址

其余的只是一般信息。 testmail@mymailaddress.com中的某些内容无效。 你使用真实的工作地址吗?如果没有,请尝试使用。

答案 1 :(得分:4)

如果您使用sidekiq + actionmailer。使用哈希发送电子邮件时要小心。我正在做这样的事情 MyWorker.perform_async(&#34; var1&#34;,{email:&#39; test@test.com' ;, var2:&#39; test1234&#39;})

我把头撞了几个小时,为什么它会抛出上述错误。因为在perform_menthod哈希[:email]中是nil。您需要使用哈希[&#34;电子邮件&#34;]来接收电子邮件。我不知道,原因。但它帮助我摆脱了这个错误。

答案 2 :(得分:2)

:to => 'testmail@mymailaddress.com'你的失败环境是怎样的?如果它不是硬编码的电子邮件地址,请确保包含转发地址的变量不是空白。

您不必明确设置Mail::Message#smtp_envelope_to。它可以从收件人那里猜出来,即。 Mail::Message#destinations(至+ cc + bcc),但似乎没有。