Отправка почты с помощью Rails 3 в среде разработки
Я уверен, что об этом спрашивали миллионы раз, но я не могу найти ничего, что работает для меня, поэтому я снова спрашиваю!
Мне просто нужен способ отправки писем с помощью ActionMailer в rails 3. Я следил за многочисленными учебниками, включая учебник Railscasts о новом ActionMailer, и я могу видеть созданные письма, но я их не получаю.
Я пробовал кучу разных способов, но они обычно сводятся к настройке следующих параметров
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:user_name => "[email protected]",
:password => "yyy",
:authentication => "plain",
:enable_starttls_auto => true
}
Я пробовал приведенный выше код (с достоверными данными gmail, конечно) в моем config/environment.rb, config/environment/development.rb и в настоящее время имею его в своем собственном инициализаторе config/initialisers/setup_mail.rb
Я также пробовал с несколькими различными SMTP-серверами, включая Gmail и Sendgrid, соответственно настраивая параметры smtp, но все равно ничего. Я могу видеть почту в терминале и журнале разработки и что он.
Кто-нибудь знает о какой-либо другой ошибке, которую я, возможно, пропустил, нужно настроить для ActionMailer? В противном случае, есть ли способ получить больше информации о том, почему письма не отправляются? У меня
config.action_mailer.raise_delivery_errors = true
в моем config/development.rb, но журнал разработки все еще показывает то же самое, что и в терминале.
Для чего это стоит, я разрабатываю ноутбук Ubuntu 10.04 на случай, если для этого потребуется какая-то конкретная настройка.
Большое спасибо
Ответы
Ответ 1
Ну, я решил проблему, но почему это работает, а другие методы этого не делают, я не знаю.
Решением было создать инициализатор в config/initialisers/setup_mail.rb, содержащий следующие
if Rails.env != 'test'
email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/email.yml"))
ActionMailer::Base.smtp_settings = email_settings[Rails.env] unless email_settings[Rails.env].nil?
end
Затем я добавил config/email.yml, содержащий сведения об учетных записях dev и production.
development:
:address: smtp.gmail.com
:port: 587
:authentication: plain
:user_name: xxx
:password: yyy
:enable_starttls_auto: true
production:
:address: smtp.gmail.com
:port: 587
:authentication: plain
:user_name: xxx
:password: yyy
:enable_starttls_auto: true
Как я уже сказал, не знаю, почему, но это, похоже, это трюк. Спасибо всем за указатели
Ответ 2
У меня есть следующее в config/environments/development.rb
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
Фактическая почтовая конфигурация, config.actionmailer.*
i, помещена в config\application.rb
.
Надеюсь, что это поможет:)
Ответ 3
Попробуйте использовать "sendmail" вместо "smtp".
ActionMailer::Base.delivery_method = :sendmail
ActionMailer::Base.sendmail_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:user_name => "[email protected]",
:password => "yyy",
:authentication => "plain",
:enable_starttls_auto => true
}
Ответ 4
Три вещи.
Во-первых, порт является целым числом и не нуждается в кавычках, как в первом примере. (Но я думаю, что строка должна работать.)
Во-вторых, не забудьте перезапустить свой сервер каждый раз, когда вы изменяете этот (или любой) файл инициализатора. Это может объяснить, почему вы не заметили ошибку после добавления:
config.action_mailer.raise_delivery_errors = true
Без этого сообщения об ошибке трудно определить, почему почта не была, но теперь. Одна из возможностей - использование двойных кавычек вокруг пароля. Если вы использовали сильный пароль и имели токен в своем пароле, который не был сбежал, он мог быть переинтерпретирован. (т.е. "[email protected]\0rd"
станет [email protected]
). Именно по этой причине я всегда использую одинарные кавычки в моем коде, если я специально не нуждаюсь в синтаксическом сахаре.
Наконец, enable_starttls_auto: true
является стандартным и ненужным.
Ответ 5
Просто поместите всю конфигурацию в:
конфигурации/среда/development.rb
Я имею в виду
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:user_name => "[email protected]il.com",
:password => "yyy",
:authentication => "plain",
:enable_starttls_auto => true
}
и
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
Это сработало для меня.
Ответ 6
ActionMailer::Base.delivery_method = :sendmail
и
config.action_mailer.perform_deliveries = true
были двумя необходимыми шагами, которые привели меня к этой проблеме
Ответ 7
Кроме того, ваше имя пользователя gmail не является псевдонимом.
Ссылка: https://support.google.com/mail/answer/12096?hl=en