25

我得到了一个带有以下邮件配置的 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 收件人地址。设置消息 smtp_envelope_to、to、cc 或 bcc 地址。

有没有可能我忘记了要设置的东西。?而且我找不到“smtp_envelope_to”的配置选项

4

3 回答 3

28

错误消息不是关于 SMTP 信封,而是关于发件人:

发送邮件需要 SMTP 收件人地址

其余的只是一般信息。你的某些东西testmail@mymailaddress.com不起作用。您使用真实的工作地址吗?如果没有,请尝试一个。

于 2013-08-27T09:39:35.770 回答
5

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

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

于 2015-12-22T08:36:15.133 回答
2

在你:to => 'testmail@mymailaddress.com'失败的环境中情况如何?如果它不是硬编码的电子邮件地址,请确保包含收件人地址的变量不为空。

您不必Mail::Message#smtp_envelope_to明确设置。它可以从它的接收者那里猜到它,即。Mail::Message#destinations(to + cc + bcc),但似乎没有。

于 2013-09-04T14:28:04.623 回答