Para enviar correo desde una instancia de Amazon, una opción es contratar Amazon Simple Email Services (SES). Para utilizar esta plataforma, debemos realizar una serie de cambios en nuestro equipo y solicitar verificación de los emails que originan los mensajes. Vamos a ello.
Lo primero que debemos hacer es bajar los scripts de Amazon SES (url externa de Amazon)
Una vez los tengamos en nuestra máquina, debemos descomprimirlos en un directorio, por ejemplo /usr/local/bin
Despues deberemos logarnos en nuestra cuenta de Amazon AWS (http://aws.amazon.com/es/account/) y procederemos a ir al enlace que pone Account arriba del todo.
Una vez hecho esto, haremos click en el apartado Credenciales de seguridad, que nos llevará a una página en la que disponemos de acceso a las claves de usuario propias de la API de amazon. Buscamos el apartado «Credenciales de Seguridad» de nuevo, y veremos 3 pestañas:
– Claves de Acceso
– Credenciales X.509
– Pares de Claves
La que nos interesa es la primera, claves de acceso. Vamos a crear un archivo en nuestra instancia AWS llamado, por ejemplo /etc/acceso-api-aws y dentro pondremos:
AWSAccessKeyId=ID de clave de acceso <- Esta la tenemos visible en la web en donde he indicado AWSSecretKey=Clave de acceso secreta <- Esta la obtenemos al lado de ese panel, donde pone "pulsar para mostrar"
Una vez tenemos el archivo en su sitio, haremos que perteneza a un usuario sin privilegios y le daremos acceso de lectura para este usuario
chown usuariosinpriv:usuariosinpriv /etc/acceso-api-aws chmod 400 /etc/acceso-api-aws
Para poder usar el servicio de envío de correo de Amazon, necesitamos dar de alta los remitentes de los correos. En mi caso suelo necesitar enviar correos desde una dirección tipo webmaster@dominio.tld, así que iremos a ello
Dar de alta un remitente en Amazon SES
Recordemos en que ruta teníamos los scripts de Amazon SES y ejecutaremos lo siguiente:
ses-verify-email-address.pl -k /etc/acceso-api-aws -v usuario@dominio.tld
Yo en usuario@dominio.tld pongo normalmente webmaster@dominio.loquesea, ya que es como envío los emails desde las webs.
El proceso de verificación tiene dos partes: La solicitud que acabamos de cursar y la verificación de el email. Nos enviarán desde Amazon SES un email con un link que deberemos pulsar para validar el remitente.
El siguiente paso será modificar parte de la configuración de postfix para poder usar Amazon SES como servicio SMTP. En /etc/postfix/master.cf, añadiremos estas dos lineas:
aws-email unix - n n - - pipe [2espacios]flags=R user=USUARIOSINPRIVS argv=/usr/local/bin/ses-send-email.pl -r -k /etc/acceso-api-aws -e https://email.us-east-1.amazonaws.com -f ${sender} ${recipient}
Debemos cambiar el USUARIOSINPRIVS que está en negrita por el que hemos usado anteriormente para el archivo de las credenciales. También hay que tener MUY PRESENTE que delante de «flags» hay 2 espacios!!! (sustituir [2 espacios] por 2 espacios reales)
Ahora tenemos un problema. El servidor web nos generará (yo uso ubuntu o debian) los emails con remitente www-data. Este remitente no es válido para AWS, porque hemos dado de alta webmaster@dominio en vez de www-data@dominio, con lo que vamos a hacer un poco de address rewriting en Postfix para poder cambiar el email de origen de www-data a lo que necesitamos.
Crearemos un archivo /etc/postfix/canonical y dentro meteremos la siguiente línea:
www-data webmaster@javierin.com
Ahora editamos /etc/postfix/main.conf y agregamos esta línea:
canonical_maps = hash:/etc/postfix/canonical
Finalmente ejecutamos
postmap /etc/postfix/canonical
y reiniciamos postfix con
service postfix reload
Con esto, si hemos seguido los pasos bien, deberíamos tener una instancia en Amazon capaz de enviar emails usando Amazon SES usando Postfix.