C贸mo enviar emails usando SMTP

  1. Configuraci贸n
  2. Enviar emails desde la Aplicaci贸n

View in english

Enviar emails en Yii2 es bastante sencillo, ya que usa Swiftmailer para tal prop贸sito.

Configuraci贸n

n el archivo de configuraci贸n s贸lo agregue (Si us贸 composer para crear el proyecto muy probablemente ya tiene las siguientes l铆neas):

'components' => [
     ...
     'mail' => [
         'class' => 'yii\swiftmailer\Mailer',
         'transport' => [
             'class' => 'Swift_SmtpTransport',
             'host' => 'localhost',  // ej. smtp.mandrillapp.com o smtp.gmail.com
             'username' => 'username',
             'password' => 'password',
             'port' => '587', // El puerto 25 es un puerto com煤n tambi茅n
             'encryption' => 'tls', // Es usado tambi茅n a menudo, revise la configuraci贸n del servidor
         ],
     ],
     ...
 ],
Plugins

Si desea usar un Plugin de Swiftmailer (por cierto, muy 煤tiles), puede hacerlo desde el archivo de configuraci贸n tambi茅n. Algo como lo siguiente funcionar谩:

'transport' => [
     'class' => 'Swift_SmtpTransport',
     ...
     'plugins' => [
         [
             'class' => 'Swift_Plugins_ThrottlerPlugin',
             'constructArgs' => [20],
         ],
     ],
 ],

Enviar emails desde la Aplicaci贸n

Use el siguiente c贸digo para enviar emails desde su aplicaci贸n:

Yii::$app->mail->compose()
     ->setFrom('alguien@dominio.com')
     ->setTo('email@suservidor.com')
     ->setSubject('Email enviado desde Yii2-Swiftmailer')
     ->send();
Plantillas de email avanzadas

En algunos casos, es necesario usar plantillas para generar los emails, en tal caso, s贸lo necesita hacer algo como lo siguiente:

Yii::$app->mail->compose('@app/mail-templates/email01', [/* Algunos par谩metros para la vista */])
     ->setFrom('desde@dominio.com')
     ->setTo('email@servidor.com')
     ->setSubject('Email avanzado desde Yii2-SwiftMailer')
     ->send();

O, si desea utilizar una plantilla para HTML y otra para emails de texto, puede hacer algo como:

Yii::$app->mail->compose(['html' => '@app/mail-templates/html-email-01', 'text' => '@app/mail-templates/text-email-01'], [/* Par谩metros para la vista */])
     ->setFrom('desde@dominio.com')
     ->setTo('email@servidor.com')
     ->setSubject('Email avanzado desde Yii2-SwiftMailer')
     ->send();

Note que la ruta de la vista puede ser relativa tambi茅n, tal y como lo har铆a en un controlador (e.g. ['html' => 'html-email-01']).