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
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
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
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.
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.
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
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)
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.
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
}
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
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.