Envio de correo con Amazon desde Laravel
Bueno laravel es hasta el momento para mi le mejor framework back-end para el desarrollo de pagina web avanzadas, aunque he querido probar Djgando pero no ha llego el momento.
Bueno laravel trae incorporado ya lista una serie de clases y módulos para el envio de correos, todo esta a la mano.
Inicialmente se comienza configurando el archivo .env que es donde vamos a guardar variables delicadas y donde vamos a ingresar los datos de de conexión en este caso que entra amazon para user servidores de envió de correo.
En alchivo .env estaran unas varibles como
MAIL_DRIVER=smtpMAIL_HOST=MAIL_USERNAME=MAIL_PORT=587
Y otras mas pero las que yo tengo son las siguientes
MAIL_DRIVER=smtpMAIL_HOST=email-smtp.us-east-1.amazonaws.comMAIL_PORT=587 MAIL_USERNAME=UNUSUARIOMAIL_ENCRYPTION=tlsMAIL_PASSWORD=UNPASSWORD
MAIL_REMITENTE=ventas@furiosojack.comMAIL_NOMBRE_REMITENTE=FURIOSOJACK
Bueno algunas variables no va a estar en el archivo yo las agregue, bueno el username y el password si tienen que conocerlo y el servidor host puede variar dependiendo de la región del servidor de amazon.
Ahora en el archivo mail ubicado en conf/mail.php en el proyecto de laravel queda algo como:
<?phpreturn [/*|--------------------------------------------------------------------------| Mail Driver| Laravel supports both SMTP and PHP's "mail" function as drivers for the|-------------------------------------------------------------------------- || your application here. By default, Laravel is setup for SMTP mail.| sending of e-mail. You may specify which one you're using throughout | | Supported: "smtp", "sendmail", "mailgun", "mandrill", "ses",|--------------------------------------------------------------------------| "sparkpost", "log", "array" | */ 'driver' => env('MAIL_DRIVER', 'smtp'), /* | SMTP Host Address| applications. A default option is provided that is compatible with|-------------------------------------------------------------------------- | | Here you may provide the host address of the SMTP server used by your|--------------------------------------------------------------------------| the Mailgun mail service which will provide reliable deliveries. | */ 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), /* | SMTP Host Port| stay compatible with the Mailgun e-mail application by default.|-------------------------------------------------------------------------- | | This is the SMTP port used by your application to deliver e-mails to | users of the application. Like the host we have set this value to | */| You may wish for all e-mails sent by your application to be sent from'port' => env('MAIL_PORT', 587), /* |-------------------------------------------------------------------------- | Global "From" Address |-------------------------------------------------------------------------- |'name' => env('MAIL_NOMBRE_REMITENTE', 'Example'),| the same address. Here, you may specify a name and address that is | used globally for all e-mails that are sent by your application. | */ 'from' => [ 'address' => env('MAIL_REMITENTE', 'hello@example.com'), ], /*| the application send e-mail messages. A sensible default using the|-------------------------------------------------------------------------- | E-Mail Encryption Protocol |-------------------------------------------------------------------------- | | Here you may specify the encryption protocol that should be used when|| transport layer security protocol should provide great security. | */ 'encryption' => env('MAIL_ENCRYPTION', 'tls'), /* |-------------------------------------------------------------------------- | SMTP Server Username |--------------------------------------------------------------------------|--------------------------------------------------------------------------| If your SMTP server requires a username for authentication, you should | set it here. This will get used to authenticate with your server on | connection. You may also set the "password" value below this one. | */ 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), /* | Sendmail System Path|--------------------------------------------------------------------------|-------------------------------------------------------------------------- | | When using the "sendmail" driver to send e-mails, we will need to know | the path to where Sendmail lives on this server. A default path has | been provided here, which will work well on most of your systems. | */ 'sendmail' => '/usr/sbin/sendmail -bs', /* | Markdown Mail Settingsresource_path('views/vendor/mail'),|-------------------------------------------------------------------------- | | If you are using Markdown based email rendering, you may configure your | theme and component paths here, allowing you to customize the design | of the emails. Or, you may simply stick with the Laravel defaults! | */ 'markdown' => [ 'theme' => 'default', 'paths' => [ ], ],];
Ahora vamos donde ocurre la magia, y eso es en algun controlador. Lo primero es impolar la clase y para ello con solo esa linea es suficiente.
use Illuminate\Support\Facades\Mail;
Listo el siguiente paso crear el envio para ellos se puede tomar como ejemplo el mio.
Mail::send('email.usuarios.confirmacionVPC',['usuario'=>'Furiosojack'],function ($msj) use($datosContacto){
//$msj->from($datosContacto->from, $datosContacto->name);$msj->to("furiosojuan0@gmail.com")->subject("correo prueba");});
Básicamente este código es que el hace todo el trabajo, en este caso yo quiero enviar una plantilla o una vista ya diseñada para que se vea bonita, pero también se puede enviar solo texto.
En mi caso el primer parametro es la ruta de la vista que se va a enviar, el segundo parametro es un arreglo o array con las variables que le voy pasar a la vista, y por ultimo una funcion y dentro de ella espeficio con $msg->to hacia quien va el correo con un asunto.
Ahora dentro de la función hay una linea comentada que es el from esta comentada por que en el archivo env especifique quien era el remitente y el nombre entonces la linea me la ahorro, sin embargo la puedo descomentar y sobrescribir los datos del remitente que en este caso viene de una variable que es la que se le pasa a la función con use().
Y abracadabra ya funciona el envio de correos.