web-dev-qa-db-fra.com

Comment utiliser swiftMailer dans Yii2

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.

39
frops

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!

47
Dency G B

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

9
uselma

Attention: cette option n'est plus disponible, car Mandrill a été acheté par Mailchimp

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

5
sambua

Si vous utilisez le modèle de base, vous devrez ajouter

'viewPath' => '@app/mail',

à la config

4
Martin

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',
        ],
    ],
...
],
1
MichalB

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";
    }
}
1
Ram Pukar