web-dev-qa-db-fra.com

Utilisation d'Amazon SES avec Rails ActionMailer

Quelle serait la meilleure façon de faire qu'ActionMailer envoie des messages via Amazon SES dans Rails 3?

Modifier: 

C'est maintenant un petit bijou:

gem install Amazon-ses-mailer

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

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

37
AdamB

J'ai également un petit bijou qui prend en charge l'envoi d'e-mails via SES à partir de Rails 3:

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

Il a également toutes les API pour vérifier/gérer les adresses e-mail

31
Drew Blas

La configuration de Rails 3.2 pour l'envoi d'e-mails à l'aide du service de messagerie simple d'Amazon est simple. Vous n'avez pas besoin de correctif supplémentaire de gemme ou de singe pour le faire fonctionner.

SES prend en charge STARTTLS sur SMTP ainsi que TLS/SSL. Ce qui suit montre comment configurer Rails pour STARTTLS avec SES.

Conditions préalables

  1. Si vous utilisez Rails Mac OS X, vous devrez peut-être configurer OpenSSL pour Ruby correctement avant de pouvoir utiliser STARTTLS. Si vous utilisez Ruby 1.9.3 et RVM, voici une façon de procéder:

    rvm pkg install openssl
    rvm reinstall 1.9.3 --with-openssl-dir=$rvm_path/usr 
    

Si vous ne le faites pas, il est possible que Ruby commette une erreur de segmentation lorsque vous essayez d'envoyer un courrier électronique.

  1. Assurez-vous d'avoir vérifié l'adresse e-mail de votre expéditeur auprès d'AWS. Vous pouvez uniquement envoyer des e-mails avec une adresse e-mail validée en tant qu'expéditeur. Accédez à l'option "Expéditeurs vérifiés" dans le menu de gauche dans la console AWS pour SES.

  2. Assurez-vous de disposer du nom d'utilisateur et du mot de passe AWS SMTP pour l'authentification. Accédez à l'option "Paramètres SMTP" dans le menu de gauche dans la console AWS pour SES pour configurer cela. Vous serez d'abord invité à créer un utilisateur IAM (par défaut: ses-smtp-user), puis l'utilisateur et le mot de passe SMTP, qui ressemblent à la clé et au secret AWS habituels. Notez que l'utilisateur IAM, c'est-à-dire, ses-smtp-user est not l'utilisateur SMTP que vous utiliserez pour l'authentification.

Configuration des rails

Dans config/environnements/development.rb et config/environnements/production.rb, ajoutez les éléments suivants:

  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
  }

Envoi d'un email

Ça y est. Vous pouvez maintenant créer une messagerie et commencer à envoyer des courriels pour le plaisir et le profit!

Créer un exemple de mailer

Rails g mailer user_mailer

Dans app/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 

Dans views/user_mailer/test.erb:

    A quick brown fox jumped over the lazy dog.

Maintenant, lancez la console et lancez un email de test:

    Rails c

    Loading development environment (Rails 3.2.1)
    1.9.3p125 :001 > UserMailer.test("[email protected]").deliver
77
Sujoy Gupta

Après avoir fouillé un peu, j'ai fini par créer un cours simple pour le faire.

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

Dans Rails, vous pouvez obtenir le message électronique codé:

m = UserMailer.welcome.encoded
AmazonSES.new.deliver(m)
9
AdamB

Pour la configuration TLS SSL [Recommandé par Amazon SES]} _

_ {Vous n'avez pas besoin de gemme pour cette chose.

smtp est le moyen par défaut d’envoyer un email dans Rails mais vous pouvez ajouter cette ligne à définir explicitement dans le fichier config/application.rb

config.action_mailer.delivery_method = :smtp

Dans config/application.rb ou vous pouvez spécifier dans certains fichiers d’environnement

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
}

Le Amazon SES SMTP HOSTNAME est spécifique à chaque région. Vous indiquez donc le nom dans lequel vous vous trouvez, ainsi que les noms d'hôte et régions.

  1. email-smtp.us-east-1.amazonaws.com (pour la région us-east-1)
  2. email-smtp.us-west-2.amazonaws.com (pour la région us-west-2)}
  3. email-smtp.eu-west-1.amazonaws.com (pour la région eu-west-1)}

StackOverFlow | Amazon-faire-commencer-envoyer-using-smtp

7
Taimoor Changaiz

Configuration de votre application Rails avec Amazon SES

définissez action_mailer.perform_deliveries sur true car il est défini sur false par défaut dans l'environnement de développement/production

config.action_mailer.perform_deliveries = true

puis collez ce code dans votre environnement de développement/production

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
}
3
Marcelo Austria

J'utilise la gemme suivante:

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

Il tire dans le standard aws-sdk , plus permet à ActionMailer d’utiliser AWS SES. Exemple:

# config/production.rb
# ...
config.action_mailer.delivery_method     = :aws_sdk
1
Andreas Profous

J'ai créé une gem simple API Rails/SES qui utilise Signature v4 pour signer la demande. Ceci est mieux utilisé pour les emails transactionnels tels que nous contacter, enregistrer un utilisateur, etc.

Joyau d'intégration d'API SES Rails

N'hésitez pas à l'améliorer et à contribuer.

0
csi