web-dev-qa-db-ja.com

Yii2でswiftMailerを使用する方法

Yii2でswiftMailer拡張機能を使用する方法を最終的に理解できません。このことから判断すると、質問は見つかりませんでした。タスクは簡単ですが、最後まで理解できませんでした。

手紙を送信するすべてのサイクルをより詳細に説明していない例、または私は何かを理解していない:(

セットアップ

    return [
    //....
   'components' => [
    ......
    'mail' => [
      'class' => 'yii\swiftmailer\Mailer',
      'transport' => [
        'class' => 'Swift_SmtpTransport',
        'Host' => 'localhost',
        'username' => 'username',
        'password' => 'password',
        'port' => '587',
        'encryption' => 'tls',
      ],
    ],
  ]
];

送信

Yii::$app->mail->compose()
->setTo($toEmail)
->setFrom([$this->email => $this->name])
->setSubject($this->subject)
->setTextBody($this->body)
->send();

具体的な作業例を受け取りたい。ありがとうございました。

追伸ドメインレコードMX、DKIM、SPFを追加しました。

PD(何らかの回答)

「From」フィールドに渡される電子メールは、デフォルトで「Return-path」のフィールドに書き込まれ、既存のアドレスである必要があります。一部のプロバイダーは、存在しないメールアドレスからのメール送信を許可していません。

39
frops

プロダクション環境でアプリケーションを初期化して、アプリケーションからメールを送信していることを確認してください。そうでない場合は、mailoutputフォルダーに書き込まれます。または、次のように構成ファイルを手動で編集します。

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',
            ],
    ],

コントローラーで

    \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();

これは動作するはずです!これがあなたを助けることを願っています!

47
Dency G B

SwiftmailerでSMTPトランスポートを使用する必要はありません。削除するのは'useFileTransport' => true構成ファイル(app/config/web.php(基本テンプレートの場合)およびメールが流れます。

ドキュメントを見てください:

http://www.yiiframework.com/doc-2.0/ext-swiftmailer-index.html

9
uselma

警告:MandrillはMailchimpによって購入されたため、このオプションは使用できなくなりました

SwiftMailerの使用に問題がある場合があります。 mail.ru電子メールサーバーを使用したときのように。私はlaravelコミュニティで解決策を見つけ、Yii2で問題を抱えています。

https://mandrillapp.com/ (1​​か月あたり1万2,000メール、1時間以内に250通が無料)などの代替サービスを使用して、次のように設定できます。

laravelコミュニティ/マンドリルを使用したメールのセットアップ

'Host' => 'smtp.mandrillapp.com',
'username' => '[email protected]',
'password' => 'oDLKswXZIkry8634f1jCDg', // new generated API key by mandrill
'port' => '587',
'encryption' => 'tls',

Gmailメールを使用している場合は、セキュリティの問題に直面することもあります。アプリケーションがGmailアカウントを使用できるようにすることで、セキュリティを無効にすることができます。

Googleでサインインした場合は、以下のリンクを使用してください。

https://www.google.com/settings/security/lesssecureapps

それが誰かを助けることを願っています

5
sambua

基本テンプレートを使用している場合は、追加する必要があります

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

構成へ

4
Martin

実際には、mailの代わりに設定キーmailerを使用する必要があります。

'components' => [
...
    'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'Host' => 'localhost',
            'username' => 'username',
            'password' => 'password',
            'port' => '587',
            'encryption' => 'tls',
        ],
    ],
...
],
1
MichalB

Google Gmailセキュリティオプション

https://myaccount.google.com/lesssecureapps

プロジェクトファイルのパス

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,
            ],
        ]
    ]
],

コントローラー内に機能を追加する

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