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), но, похоже, его нет.