Cómo enviar correos con Yii2

Cómo enviar correos con Yii2

Aprenderás a como enviar correos utilizando Yii.





El componente para enviar correos en Yii2 ya se encuentra instalado desde el inicio en la instalación básica de Yii2, por lo que si usas la versión 2.0.14 o superior seguramente ya viene instalada desde un unicio. 


Instalación de widget

Si utilizas alguna versión antigua de Yii2 y no tienes instalado el componente  lo puedes instalar de la siguiente manera. 

Instalando mediante composer.


"yiisoft/yii2-swiftmailer": "~2.1.0"


Instalando mediante comando


php composer.phar require --prefer-dist yiisoft/yii2-swiftmailer


Configuración

Para poder utilizar este componente asegúrate de tener habilitado el componente en el archivo de configuración /config/web.php de la siguiente manera. 


    'components' => [
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.

            'useFileTransport' => true
        ],
    ],


Nota importante: 

En una instalación nueva observarás que se encuentra habilitada ésta opción que está en negrita. "'useFileTransport' => true", con esta opción si está habilitada, los correos que se envíes quedarán guardado en la carpeta: '/runtimes/mail' correspondiente a la carpeta de tu proyecto, por lo tanto cuando envies correos y esta opción esté habilitada, todos tus correos se quedarán en esa carpeta con la extensión ".eml", esto es para que lo puedas probar para fines de desarrollo en el caso cuando no tienes una cuenta de correo real y obviamente para no te tilden como spam. 



    'components' => [
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.

            'useFileTransport' => true
        ],
    ],




Una vez que tengas los datos de correo reales, debes asegurarte de comentar esta línea para que funcione, de lo contrario no funcionará. 

Enviar un correo desde tu propio servidor

Para enviar un correo utilizando tu propio servidor de correos puedes hacerlo con este código, pero en la actualidad este método ya no se utiliza en un ambiente productivo, por que los sistemas de correo ahora deben ser autenticados, por lo que probablemente podrás realizar este prueba enviando un correo a un correo de tu propio dominio, pero lo más probable es que si envías correos por ejemplo a un correo de "gmail.com" lo más probable es que llegue directamente a la carpeta de spam. 



        Yii::$app->mailer->compose()
                ->setFrom('admin@tudominiodejemplo.com')
                ->setTo('destinatario@tudominiodejemplo.com')
                ->setSubject('Prueba desde mi PC')
                ->send();


Para asegurar que los correos lleguen a su destino yo te recomiendo usar el método de envío mediante un servidor SMTP. 


Enviar un correos desde un servidor SMPT

Para enviar correos vía SMPT es necesario agregar la siguiente configuración dentro de la sección del componente de "mailer".

Los datos de usuario, password, host, puerto, y modo de encriptación, debes pedirlo a tu proveedor de hosting, ésta será la cuenta de correo donde se enviarán tus correos. 

       
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                
                'host' => 'tudominiodejemplo.com',
                'username' => 'soporte@tudominiodejemplo.com',
                'password' => 'passwordsecreto',
                'port' => '465',
                'encryption' => 'SSL',
            ],
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            //'useFileTransport' => true            

        ],

Una vez que tengas los datos de correo reales, debes asegurarte de comentar esta línea "//'useFileTransport' => true" para que funcione, de lo contrario no mandará los correos, sino que los guardara en la carpeta /runtimes/mail' 


Ejemplo de envío de correo con SMTP:

        Yii::$app->mailer->compose()
                ->setFrom('admin@tudominiodejemplo.com')
                ->setTo('destinatario@gmail.com')
                ->setSubject('Prueba desde mi PC')
               ->setHtmlBody('<h1>Este es mi primer correo enviado con Yii2')
                ->send();

Con éste ejemplo ya debe de llegarte el correo. 

No importa si tu repositorio esté instalado localmente debe funcionar ya que estas utilizando un cliente de correo SMTP.

Nota importante. Dependiendo de tu proveedor de correo requeriras puerto especiales o permisos especiales, para mas información consulta la información tecnica de tu proveedor de correo electrónico.

Fuentes:

https://github.com/yiisoft/yii2-swiftmailer
https://www.yiiframework.com/doc/guide/2.0/en/tutorial-mailing
https://www.yiiframework.com/extension/yiisoft/yii2-swiftmailer/doc/api/2.1/yii-swiftmailer-mailer



Comentarios

Aprende Yii2


Lo más Visto

Tutorial de implementación de calendario de rango de fechas con Karkit en gridView

Cómo evitar el reenvío de formulario

Como instalar Yii en Windows usando App Serv

hostinger

ventana bienvenida