Comment utiliser le swiftMailer à Yii2
Je ne peux pas enfin comprendre comment utiliser l'extension swiftMailer dans Yii2. A en juger par cela sur ce sujet je n'ai pas trouvé de questions, la tâche est triviale, mais jusqu'à la fin je ne pouvais pas comprendre.
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 :(
Setup
return [
//....
'components' => [
......
'mail' => [
'class' => 'yiiswiftmailerMailer',
'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 béton exemple. Remercier.
P. S. j'ai ajusté le domaine des enregistrements MX, DKIM, SPF ajouté.
UPD (une réponse):
E-mail qui est passé dans le champ "De", il est mis par défaut dans le champ de la "voie de Retour", doit être la adresse existante. Certains fournisseurs ne le font pas autoriser l'envoi de courrier à partir d'adresses e-mail inexistantes.
5 réponses
assurez-vous d'avoir initialisé votre application dans l'environnement de production pour envoyer des e-mails de votre application,sinon il sera écrit dans le dossier mailoutput.Ou modifier manuellement le fichier de configuration comme suit.
dans la section components 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' => 'username@gmail.com',
'password' => 'password',
'port' => '587',
'encryption' => 'tls',
],
],
dans votre Controller
\Yii::$app->mail->compose('your_view', ['params' => $params])
->setFrom([\Yii::$app->params['supportEmail'] => 'Test Mail'])
->setTo('to_email@xx.com')
->setSubject('This is a test mail ' )
->send();
Cela devrait fonctionner! Espérons que cela 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 mails de flux.
jetez un coup d'oeil dans les documents:
http://www.yiiframework.com/doc-2.0/ext-swiftmailer-index.html
Attention: cette option n'est plus disponible, Mandrill ayant été acheté par Mailchimp
il peut parfois y avoir des problèmes avec L'utilisation de SwiftMailer qui ne dépend pas de vous. Comme quand j'ai utilisé mail.ru e-mail server. J'ai trouvé la solution dans la communauté laravel et mis en œuvre dans Yii2.
Vous pouvez utiliser le service de remplacement de la forme https://mandrillapp.com/ (12k e-mail par mois, 250 sein heure est gratuite) et mise en place comme ci-dessous:
laravel de la communauté / de l'installation courrier avec mandrill
'host' => 'smtp.mandrillapp.com',
'username' => 'user@domain.name',
'password' => 'oDLKswXZIkry8634f1jCDg', // new generated API key by mandrill
'port' => '587',
'encryption' => 'tls',
si vous utilisez gmail email vous pouvez également faire face à un problème de sécurité. Vous pouvez détourner la sécurité en permettant à l'application d'utiliser votre compte gmail.
si vous avez signé avec google utilisez les liens ci-dessous:
https://www.google.com/settings/security/lesssecureapps
j'Espère que ça aidera quelqu'un
Si vous utilisez le modèle de base, alors vous devez ajouter
'viewPath' => '@app/mail',
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',
],
],
...
],