ArgumentError: SMTP-адрес требуется для отправки сообщения. Установите сообщение smtp_envelope_to, to, cc или bcc address

Я получил приложение 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 address.

Возможно ли, что я забыл что-то установить.? И я не могу найти опцию конфигурации для "smtp_envelope_to"

3 ответа

Решение

Сообщение об ошибке не о конверте SMTP, а об отправителе:

Адрес SMTP To требуется для отправки сообщения

остальное просто общее сообщение. Что-то в вашем testmail@mymailaddress.com не работает. Вы используете реальный, рабочий адрес? Если нет, попробуйте с одним.

Если вы используете sidekiq+actionmailer. Будьте внимательны при отправке электронной почты с использованием хэша. Я делал что-то вроде этого MyWorker.perform_async("var1", {email: 'test@test.com', var2: 'test1234'})

Я ударился головой в течение нескольких часов, почему он выбрасывает вышеуказанную ошибку. Потому что в хэше execute_menthod [:email] - ноль. Вам нужно использовать хеш ["email"] для получения электронного письма. Я не знаю, причина. Но это помогло мне избавиться от этой ошибки.

Является :to => 'testmail@mymailaddress.com' как это в вашей неудачной среде? Если это не жестко закодированный адрес электронной почты, убедитесь, что переменная, содержащая адрес, не пуста.

Вам не нужно устанавливать Mail::Message#smtp_envelope_to в явном виде. Он может догадаться об этом по получателям, т.е. Mail::Message#destinations (+ cc + bcc), но, похоже, его нет.

Другие вопросы по тегам