Каким будет лучший способ сделать отправку электронной почты ActionMailer через Amazon SES в Rails 3?
Изменить:
Теперь это драгоценный камень:
gem install amazon-ses-mailer
Каким будет лучший способ сделать отправку электронной почты ActionMailer через Amazon SES в Rails 3?
Изменить:
Теперь это драгоценный камень:
gem install amazon-ses-mailer
У меня также есть жемчужина, которая поддерживает отправку электронной почты через SES из Rails 3:
https://github.com/drewblas/aws-ses
Он также имеет все API для проверки/управления адресами электронной почты
Настройка Rails 3.2 для отправки электронной почты с помощью простой службы электронной почты Amazon (SES) проста. Вы не нуждаетесь в дополнительном gem или патче для обезьян, чтобы заставить его работать.
SES поддерживает как STARTTLS через SMTP, так и TLS/SSL. Ниже показано, как настроить Rails для STARTTLS с SES.
Предпосылки
Если вы используете рельсы Mac OS X, вам может потребоваться правильно настроить OpenSSL для Ruby, прежде чем вы сможете использовать STARTTLS. Если вы используете Ruby 1.9.3 и RVM, вот один из способов сделать это:
rvm pkg install openssl
rvm reinstall 1.9.3 --with-openssl-dir=$rvm_path/usr
Если вы этого не сделаете, есть вероятность, что Ruby будет segfault при попытке отправить электронное письмо.
Убедитесь, что вы подтвердили адрес электронной почты отправителя с помощью AWS. Вы можете отправлять письма только с подтвержденным адресом электронной почты в качестве отправителя. Перейдите к опции "Проверенные отправители" в меню слева в консоли AWS для SES.
Убедитесь, что у вас есть имя пользователя и пароль AWS SMTP для аутентификации. Перейдите в "Настройки SMTP" в меню слева в консоли AWS для SES, чтобы установить это. Сначала вам будет предложено создать пользователя IAM (по умолчанию: ses-smtp-user), после чего вам будет показан пользователь и пароль SMTP, которые выглядят как обычный ключ и секрет AWS. Обратите внимание, что пользователь IAM, т.е. Ses-smtp-пользователь, не пользователь SMTP, который вы будете использовать для аутентификации.
Настройка Rails
В config/environment/development.rb и config/environment/production.rb добавьте следующее:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "email-smtp.us-east-1.amazonaws.com",
:port => 587, # Port 25 is throttled on AWS
:user_name => "...", # Your SMTP user here.
:password => "...", # Your SMTP password here.
:authentication => :login,
:enable_starttls_auto => true
}
Отправка электронной почты
Это он. Теперь вы можете продолжить создание почтовой программы и начать отправлять электронные письма для удовольствия и прибыли!
Создать образец почтовой программы
rails g mailer user_mailer
В приложении /mailer/user _mailer.rb:
class UserMailer < ActionMailer::Base
# Make sure to set this to your verified sender!
default from: "[email protected]"
def test(email)
mail(:to => email, :subject => "Hello World!")
end
end
В представлениях /user _mailer/test.erb:
A quick brown fox jumped over the lazy dog.
Теперь запустите консоль и отпустите тестовое письмо:
rails c
Loading development environment (Rails 3.2.1)
1.9.3p125 :001 > UserMailer.test("[email protected]").deliver
После того, как я немного пошутил, я просто сделал простой класс, чтобы сделать это.
https://github.com/abronte/Amazon-SES-Mailer
В рельсах вы можете получить закодированное сообщение электронной почты:
m = UserMailer.welcome.encoded
AmazonSES.new.deliver(m)
Для настройки SSL TLS [рекомендуется с помощью Amazon SES]
Вам не нужен камень для этой вещи.
smtp - это defualt способ отправки электронной почты в rails, но вы можете добавить эту строку, чтобы явно определить в файле config/application.rb
config.action_mailer.delivery_method = :smtp
В config/application.rb или вы можете указать в определенном файле среды
config.action_mailer.smtp_settings = {
address: 'Amazon SES SMTP HOSTNAME',
port: 465, #TLS port
domain: 'example.com',
user_name: 'SMTP_USERNAME',
password: 'SMTP_PASSWORD',
authentication: 'plain', #you can also use login
ssl: true, #For TLS SSL connection
}
Amazon SES SMTP HOSTNAME специфичен для каждого региона, поэтому вы, имя которого вы находитесь, следуете за именами хостов по регионам.
fooobar.com/questions/142230/... | Amazon-get-started-send-use-smtp
Я использую следующий камень:
https://github.com/aws/aws-sdk-rails
Он вытягивает стандартный aws-sdk, плюс позволяет установить ActionMailer для использования AWS SES. Пример:
# config/production.rb
# ...
config.action_mailer.delivery_method = :aws_sdk
Настройка вашего приложения Rails с помощью ASES Amazon
установите action_mailer.perform_deliveries в true, поскольку по умолчанию в среде разработки/производства
установлено значение false,config.action_mailer.perform_deliveries = true
затем вставьте этот код в среду разработки/производства
config.action_mailer.smtp_settings = {
:address => ENV["SES_SMTP_ADDRESS"],
:port => 587,
:user_name => ENV["SES_SMTP_USERNAME"],
:password => ENV["SES_SMTP_PASSWORD"],
:authentication => :login,
:enable_starttls_auto => true
}
Я создал простой Rails/SES API, который использует Signature v4 для подписи запроса. Это лучше всего использовать для транзакционных электронных писем, таких как контакт с нами, регистрация пользователей и т.д.
Графический интегратор Rails Rails
Пожалуйста, не стесняйтесь улучшать его и вносить свой вклад.
используя :sendmail
, мне удалось получить все электронные письма, чтобы отправить запуск apt-get install postfix
как root на мой AWS-машину и использовать все ответы по умолчанию.
SES только что был выпущен сегодня в бета-версию, поэтому я сомневаюсь, что есть готовый к использованию камень (по крайней мере, не тот, который я видел). Вы можете написать собственный модуль на основе документов разработчика:
http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/
Вы можете указать способ доставки для почтовой программы действий в своей среде.
config.action_mailer.delivery_method = AmazonSES.deliver
Теперь вы, скорее всего, сами напишите код доставки.