ruby on rails - elastic - Uso de Amazon SES con Rails ActionMailer
elastic beanstalk (10)
¿Cuál sería la mejor manera de hacer que ActionMailer envíe correo a través de Amazon SES en Rails 3?
Editar:
Esto ahora es una joya:
gem install amazon-ses-mailer
Configurando su aplicación Rails con Amazon SES
establezca action_mailer.perform_deliveries en true, ya que está configurado como false de forma predeterminada en el entorno de desarrollo / producción
config.action_mailer.perform_deliveries = true
luego pegue este código en su entorno de desarrollo / producción
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
}
Configurar Rails 3.2 para enviar correos electrónicos utilizando el Simple Email Service (SES) de Amazon es fácil. No necesita ningún parche adicional de gema o mono para que funcione.
SES admite tanto STARTTLS sobre SMTP como TLS / SSL. A continuación se muestra cómo configurar Rails para STARTTLS con SES.
Requisitos previos
Si está utilizando Rails Mac OS X, es posible que necesite configurar OpenSSL para Ruby correctamente antes de poder usar STARTTLS. Si está utilizando Ruby 1.9.3 y RVM, aquí hay una forma de hacerlo:
rvm pkg install openssl rvm reinstall 1.9.3 --with-openssl-dir=$rvm_path/usr
Si no lo hace, existe la posibilidad de que Ruby segfault cuando intenta enviar un correo electrónico.
Asegúrese de haber verificado la dirección de correo electrónico de su remitente con AWS. Solo puede enviar correos electrónicos con una dirección de correo electrónico verificada como remitente. Vaya a la opción "Remitentes verificados" en el menú de la izquierda en la consola de AWS para SES.
Asegúrese de tener el nombre de usuario y contraseña de AWS SMTP para la autenticación. Vaya a la opción "Configuración de SMTP" en el menú de la izquierda en la consola de AWS para que SES lo configure. Primero se le pedirá que cree un usuario de IAM (predeterminado: ses-smtp-user) y luego se le mostrará el usuario SMTP y la contraseña, que se parecen a la clave y el secreto de AWS habitual. Tenga en cuenta que el usuario de IAM, es decir, ses-smtp-user no es el usuario SMTP que va a utilizar para la autenticación.
Configurando Rieles
En config / environments / development.rb y config / environments / production.rb, agregue lo siguiente:
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
}
Enviando un correo electrónico
Eso es todo. ¡Ahora puede seguir adelante y crear un anuncio publicitario y comenzar a enviar correos electrónicos para divertirse y obtener ganancias!
Crear un anuncio de muestra
rails g mailer user_mailer
En la aplicación / 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
En views / user_mailer / test.erb:
A quick brown fox jumped over the lazy dog.
Ahora, inicia la consola y dispara un correo electrónico de prueba:
rails c
Loading development environment (Rails 3.2.1)
1.9.3p125 :001 > UserMailer.test("[email protected]").deliver
Creé una gema sencilla Rails / SES API que usa Signature v4 para firmar la solicitud. Esto se usa mejor para correos electrónicos transaccionales como contactarnos, registrar usuarios, etc.
github.com/cickes/ses_api-rails
Por favor, siéntase libre de mejorar y contribuir.
Después de hurgar un poco, terminé haciendo una clase simple para hacer esto.
https://github.com/abronte/Amazon-SES-Mailer
En los rieles, puede obtener el mensaje de correo electrónico codificado:
m = UserMailer.welcome.encoded
AmazonSES.new.deliver(m)
Puede proporcionar el método de envío a la aplicación de correo de acción en su entorno.
config.action_mailer.delivery_method = AmazonSES.deliver
Por ahora, es probable que usted mismo escriba el código de entrega.
SES acaba de ser lanzado en beta hoy, así que dudo que haya una gema lista para usar (al menos, no es que yo haya visto). Puede escribir un módulo personalizado en función de sus documentos de desarrollador:
http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/
También tengo una joya que admite el envío de correo electrónico a través de SES desde Rails 3:
https://github.com/drewblas/aws-ses
También tiene toda la API para verificar / administrar las direcciones de correo electrónico
Yo uso la siguiente gema:
https://github.com/aws/aws-sdk-rails
Extrae el estándar aws-sdk , además permite establecer ActionMailer para usar AWS SES. Ejemplo:
# config/production.rb
# ...
config.action_mailer.delivery_method = :aws_sdk
usando :sendmail
, logré obtener todos los correos electrónicos para enviarlos ejecutando apt-get install postfix
como root en mi máquina AWS y usando todas las respuestas predeterminadas.
Para la configuración SSL de TLS [Recomendado por Amazon SES]
No necesitas joya para esto.
smtp es definitivamente la forma de enviar correos electrónicos en rieles, pero puede agregar esta línea para definir explícitamente en el archivo config / application.rb
config.action_mailer.delivery_method = :smtp
En config / application.rb o puede especificar en cierto archivo de entorno
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
}
El SMTP HOSTNAME de Amazon SES es específico para cada región, por lo que ese nombre en el que se encuentra, a continuación se encuentran los nombres de host wrt regions.
- email-smtp.us-east-1.amazonaws.com (para la región nosotros-este-1)
- email-smtp.us-west-2.amazonaws.com (para la región us-west-2)
- email-smtp.eu-west-1.amazonaws.com (para la región eu-west-1)