Je ne comprends pas enfin comment utiliser l'extension swiftMailer dans Yii2. A en juger par ce sujet, je n'ai pas trouvé de questions, la tâche est triviale, mais je n'ai pas compris jusqu'à la fin.
Il y a des exemples qui ne décrivent pas plus en détail tout le cycle d'envoi de la lettre ou je ne comprends pas quelque chose :(
Configuration
return [
//....
'components' => [
......
'mail' => [
'class' => 'yii\swiftmailer\Mailer',
'transport' => [
'class' => 'Swift_SmtpTransport',
'Host' => 'localhost',
'username' => 'username',
'password' => 'password',
'port' => '587',
'encryption' => 'tls',
],
],
]
];
Envoyer
Yii::$app->mail->compose()
->setTo($toEmail)
->setFrom([$this->email => $this->name])
->setSubject($this->subject)
->setTextBody($this->body)
->send();
Je veux recevoir un exemple de travail concret. Merci.
P.S. J'ai ajusté les enregistrements de domaine MX, DKIM, SPF ajoutés.
PD (quelques réponses):
E-mail qui est passé dans le champ "De", il est placé par défaut dans le champ "Return-path", doit être le adresse existante. Certains fournisseurs n'autorisent pas l'envoi de courrier à partir d'adresses e-mail inexistantes.
Assurez-vous d’avoir initialisé votre application dans l’environnement de production pour envoyer des courriels à partir de votre application, sinon elle sera écrite dans le dossier mailoutput. Vous pouvez également modifier manuellement le fichier de configuration comme suit.
Dans la section des composants de votre common/main-local.php
'mail' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@backend/mail',
'useFileTransport' => false,//set this property to false to send mails to real email addresses
//comment the following array to send mail using php's mail function
'transport' => [
'class' => 'Swift_SmtpTransport',
'Host' => 'smtp.gmail.com',
'username' => '[email protected]',
'password' => 'password',
'port' => '587',
'encryption' => 'tls',
],
],
Dans votre contrôleur
\Yii::$app->mail->compose('your_view', ['params' => $params])
->setFrom([\Yii::$app->params['supportEmail'] => 'Test Mail'])
->setTo('[email protected]')
->setSubject('This is a test mail ' )
->send();
Cela devrait marcher! J'espère que ceci vous aidera!
Vous n'avez pas besoin d'utiliser le transport SMTP avec swiftmailer, supprimez seulement 'useFileTransport' => true
dans le fichier de configuration (app/config/web.php
dans le modèle de base) et les courriers circuleront.
Jetez un coup d'oeil dans la documentation:
http://www.yiiframework.com/doc-2.0/ext-swiftmailer-index.html
Parfois, des problèmes liés à l’utilisation de SwiftMailer ne dépendent pas de vous. Comme quand j'ai utilisé le serveur de messagerie mail.ru. J'ai trouvé la solution dans laravel communauté et implemend dans Yii2.
Vous pouvez utiliser un service alternatif tel que https://mandrillapp.com/ (12 000 courriels par mois, 250 heures gratuites) et le réglage s'effectue comme ci-dessous:
communauté laravel/mail d'installation avec mandrill
'Host' => 'smtp.mandrillapp.com',
'username' => '[email protected]',
'password' => 'oDLKswXZIkry8634f1jCDg', // new generated API key by mandrill
'port' => '587',
'encryption' => 'tls',
Si vous utilisez le courrier électronique Gmail, vous pouvez également faire face à un problème de sécurité. Vous pouvez désactiver la sécurité en permettant à l'application d'utiliser votre compte gmail.
Si vous vous êtes connecté avec Google, utilisez les liens ci-dessous:
https://www.google.com/settings/security/lesssecureapps
J'espère que ça va aider quelqu'un
Si vous utilisez le modèle de base, vous devrez ajouter
'viewPath' => '@app/mail',
à la config
En fait, vous devez utiliser la clé de configuration mailer au lieu de mail.
'components' => [
...
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'transport' => [
'class' => 'Swift_SmtpTransport',
'Host' => 'localhost',
'username' => 'username',
'password' => 'password',
'port' => '587',
'encryption' => 'tls',
],
],
...
],
Option de sécurité de Google Gmail
https://myaccount.google.com/lesssecureapps
Chemin du fichier de projet
config\web.php
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'Host' => 'smtp.gmail.com',
'username' => '[email protected]',
'password' => 'email_password',
'port' => '465',
'encryption' => 'ssl',
'streamOptions' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
]
]
],
Ajouter une fonction dans votre contrôleur
public function actionSend() {
$send = Yii::$app->mailer->compose()
->setFrom('[email protected]')
->setTo('[email protected]')
->setSubject('Test Message')
->setTextBody('Plain text content. YII2 Application')
->setHtmlBody('<b>HTML content <i>Ram Pukar</i></b>')
->send();
if($send){
echo "Send";
}
}