Использование Amazon SES с Rails ActionMailer - PullRequest
37 голосов
/ 25 января 2011

Как лучше всего заставить ActionMailer отправлять почту через Amazon SES в Rails 3?

Редактировать:

Теперь это камень:

gem install amazon-ses-mailer

https://rubygems.org/gems/amazon-ses-mailer

https://github.com/abronte/Amazon-SES-Mailer

Ответы [ 10 ]

78 голосов
/ 31 марта 2012

Настроить Rails 3.2 для отправки электронных писем с помощью Amazon Simple Email Service (SES) очень просто. Вам не нужно никаких дополнительных самоцветов или исправлений обезьян, чтобы это работало.

SES поддерживает STARTTLS через SMTP, а также TLS / SSL. Ниже показано, как настроить Rails для STARTTLS с SES.

Предпосылки

  1. Если вы используете rails 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 сгенерирует ошибку при попытке отправить электронное письмо.

  1. Убедитесь, что вы подтвердили адрес электронной почты отправителя в AWS. Вы можете отправлять письма только с подтвержденным адресом электронной почты в качестве отправителя. Перейдите к опции «Проверенные отправители» в левом меню консоли AWS для SES.

  2. Убедитесь, что у вас есть имя пользователя и пароль AWS SMTP для аутентификации. Перейдите к параметру «Настройки SMTP» в левом меню консоли AWS для настройки SES. Сначала вам будет предложено создать пользователя IAM (по умолчанию: ses-smtp-user), а затем вам будет показан SMTP-пользователь и пароль, которые выглядят как обычный ключ и секрет AWS. Обратите внимание, что пользователь IAM, то есть ses-smtp-user, является , а не пользователем 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: "your@verifiedsender.com"  

      def test(email)
        mail(:to => email, :subject => "Hello World!")
      end
    end 

В views / 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("your@email.com").deliver
31 голосов
/ 31 января 2011

У меня также есть драгоценный камень, который поддерживает отправку электронной почты через SES из Rails 3:

https://github.com/drewblas/aws-ses

Он также имеет весь API для проверки / управления адресами электронной почты

9 голосов
/ 26 января 2011

Немного покопавшись, я просто сделал простой класс для этого.

https://github.com/abronte/Amazon-SES-Mailer

В рельсах вы можете получить закодированное электронное сообщение:

m = UserMailer.welcome.encoded
AmazonSES.new.deliver(m)
7 голосов
/ 16 октября 2015

Для настройки TLS SSL [Рекомендуется Amazon SES]

Вам не нужен драгоценный камень для этой вещи.

smtp - это способ отправки электронной почты по умолчанию, но вы можете добавить эту строку для явного определения в config / application.rb file

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 специфичен для каждого региона, поэтому имя, под которым вы находитесь, далее - это имена хостов по регионам.

  1. email-smtp.us-east-1.amazonaws.com (для региона us-east-1)
  2. email-smtp.us-west-2.amazonaws.com (для региона us-west-2)
  3. email-smtp.eu-west-1.amazonaws.com (для региона eu-west-1)

StackOverFlow | Amazon-получение стартером-отправить-используя-SMTP

3 голосов
/ 27 июля 2017

Конфигурирование вашего Rails-приложения с Amazon SES

Установите для 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
}
1 голос
/ 27 июля 2016

Я использую следующий камень:

https://github.com/aws/aws-sdk-rails

Используется стандарт aws-sdk , плюс позволяет настроить ActionMailer на использование AWS SES Пример:

# config/production.rb
# ...
config.action_mailer.delivery_method     = :aws_sdk
0 голосов
/ 21 октября 2015

Я создал простой гем Rails / SES API, который использует Signature v4 для подписи запроса.Это лучше всего использовать для транзакционных электронных писем, таких как связаться с нами, регистрация пользователей и т. Д.

Gem интеграции Rails SES API

Пожалуйста, не стесняйтесь улучшать его и вносить свой вклад.

0 голосов
/ 17 июня 2013

используя :sendmail, мне удалось получить все электронные письма для отправки с именем apt-get install postfix в качестве пользователя root на моем компьютере AWS и используя все ответы по умолчанию.

0 голосов
/ 26 января 2011

Вы можете предоставить способ доставки action mailer в вашей среде.

config.action_mailer.delivery_method = AmazonSES.deliver

Пока вы, вероятно, самостоятельно пишете код доставки.

0 голосов
/ 26 января 2011

SES только что был выпущен в бета-версии сегодня, поэтому я сомневаюсь, что есть готовый к использованию камень (по крайней мере, не то, что я видел). Вы можете написать собственный модуль, основанный на их документах для разработчиков:

http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...