ArgumentError: SMTP Для адреса требуется отправить сообщение. Задайте сообщение smtp_envelope_to, to, cc или адресную книгу
У меня есть приложение с рельсами 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 => "[email protected]"
def welcome_email
mail(:to => "[email protected]", :subject => "Test mail", :body => "Test mail body")
end
end
TestMailer.welcome_email.deliver
Я получил это исключение:
ArgumentError: SMTP Для адреса требуется отправить сообщение. Задавать сообщение smtp_envelope_to, to, cc или адрес адресной почты.
Возможно ли, что я забыл что-то установить?
И я не могу найти вариант конфигурации для "smtp_envelope_to"
Ответы
Ответ 1
Сообщение об ошибке не о конверте SMTP, а об отправителе:
SMTP Для адреса требуется отправить сообщение
остальное - всего лишь общее сообщение.
Что-то в вашем [email protected]
не работает.
Вы используете настоящий рабочий адрес? Если нет, попробуйте один.
Ответ 2
Если вы используете sidekiq + actionmailer. Будьте осторожны, отправляя электронную почту с помощью хэша. Я делал что-то вроде этого
MyWorker.perform_async ( "var1", {email: '[email protected]', var2: 'test1234'})
Я ударил головой в течение нескольких часов, почему он выбрасывает вышеуказанную ошибку. Потому что в hash [: email] нет. Для получения электронной почты вам нужно использовать хэш [ "email" ]. Я не знаю, причина. Но это помогло мне избавиться от этой ошибки.
Ответ 3
Является ли :to => '[email protected]'
, как он находится в вашей уязвимой среде? Если это не жесткий адрес электронной почты, убедитесь, что переменная, содержащая адрес, не является пустой.
Вам не нужно явно указывать Mail::Message#smtp_envelope_to
. Он может догадываться об этом у своих получателей, т.е. Mail::Message#destinations
(до + cc + bcc), но он, похоже, не имеет.