シンプルなYii2メール送信アプリケーション

オフィスのプリンターがどこからでも巧みに手紙を送信しているのを見て、私は手紙の簡単な送信者を実装することにしました。 利用可能なツールには、swiftmailerモジュールが組み込まれたYii 2フレームワーク、VirtualBox上の仮想Ubuntu(phpとWebサーバーをローカルにインストールする場合もありません)。



それでは始めましょう。



サーバーフォルダーに基本的なYii 2アプリケーションをインストールします。 次の画像を受け取ったら、先に進むことができます。







次に、アプリケーション構成ファイル/config/web.phpを変更する必要があります。 パラメーター'useFileTransport'は 、エラーをキャッチするために、最初はtrueに設定されています 。 この値を使用すると、ファイル形式の文字は/ runtime / mailフォルダーに分類されます。 そこで、レターのメインヘッダーをチェックし、設定が正しいことを確認できます。



正しく送信するには、既存のメールサービスをトランスポートとして使用する必要があります。 gmail.comメールの設定例を次に示します。



//config/web.php 'mail' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' => false, 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'smtp.gmail.com', 'username' => 'username@gmail.com', 'password' => 'password', 'port' => '587', 'encryption' => 'tls', ], ],
      
      





企業環境内で送信するには、サーバー名とそのIPアドレスの両方を使用できます。 私の場合、Microsoft製品に基づいて構築された企業環境があります。 例として考えます。 Exchangeサーバーが必須のユーザー検証用に構成されていない場合は、 「ユーザー名 フィールドと「パスワード」フィールドにまったく何も指定できません。 ただし、送信されたレターが受信者のスパムフォルダーに入らないという保証はありません。



 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' => false, 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'exchange.example.com', //      'username' => '', 'password' => '', 'port' => '25', 'encryption' => '', ], ],
      
      





メッセージがスパム対策によってフィルタリングされないようにするには、Exchangeサーバーで承認するためのドメインユーザー名とパスワードを入力する必要があります。



次に、 / modelsフォルダーにMailerForm.phpモデルを作成します。



MailerForm.php
 //models/MailerForm.php <?php namespace app\models; use Yii; use yii\base\Model; class MailerForm extends Model { public $fromEmail; public $fromName; public $toEmail; public $subject; public $body; public function rules() { return [ [['fromEmail', 'fromName', 'toEmail', 'subject', 'body'], 'required'], ['fromEmail', 'email'], ['toEmail', 'email'] ]; } public function sendEmail() { if ($this->validate()) { Yii::$app->mailer->compose() ->setTo($this->toEmail) ->setFrom([$this->fromEmail => $this->fromName]) ->setSubject($this->subject) ->setTextBody($this->body) ->send(); return true; } return false; } }
      
      







/ views / site / folderにあるフォームのmailer.phpビューを作成しましょう:



mailer.php
 //views/site/mailer.php <?php /* @var $this yii\web\View */ /* @var $form yii\bootstrap\ActiveForm */ /* @var $model app\models\MailerForm */ use yii\helpers\Html; use yii\bootstrap\ActiveForm; $this->title = 'Mailer'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="site-contact"> <h1><?= Html::encode($this->title) ?></h1> <?php if (Yii::$app->session->hasFlash('mailerFormSubmitted')) : ?> <div class="alert alert-success"> Your email has been sent </div> <?php else : ?> <p> This form for sending email from anywhere to anywhere </p> <div class="row"> <div class="col-lg-5"> <?php $form = ActiveForm::begin(['id' => 'mailer-form']); ?> <?= $form->field($model, 'fromName') ?> <?= $form->field($model, 'fromEmail') ?> <?= $form->field($model, 'toEmail') ?> <?= $form->field($model, 'subject') ?> <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?> <div class="form-group"> <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?> </div> <?php ActiveForm::end(); ?> </div> </div> <?php endif; ?> </div>
      
      







次に、コントローラー/controllers/SiteController.phpにアクションを追加する必要があります。 サイトの最初に、 必ずuse app \ models \ MailerFormを追加して、MailerFormモデル名前空間を接続してください。 そして、クラス自体にactionMailer()メソッドを追加します。



 <?php namespace app\controllers; use Yii; use yii\filters\AccessControl; use yii\web\Controller; use yii\filters\VerbFilter; use app\models\LoginForm; use app\models\ContactForm; use app\models\MailerForm; //  class SiteController extends Controller { //… … public function actionMailer() { $model = new MailerForm(); if ($model->load(Yii::$app->request->post()) && $model->sendEmail()) { Yii::$app->session->setFlash('mailerFormSubmitted'); return $this->refresh(); } return $this->render('mailer', [ 'model' => $model, ]); } //… … }
      
      





これらの操作の後、 index.php?R = site / mailerのリンクに従って、メール送信フォームにアクセスできます。







最後のタッチは、使いやすいようにメニュー項目を追加します。 ファイル/views/layouts/main.phpには、次のブロックがあります。



 echo Nav::widget([ 'options' => ['class' => 'navbar-nav navbar-right'], 'items' => [ ['label' => 'Home', 'url' => ['/site/index']], ['label' => 'About', 'url' => ['/site/about']], ['label' => 'Contact', 'url' => ['/site/contact']],
      
      





そして次の行を追加します。



 ['label' => 'Mailer', 'url' => ['/site/mailer']],
      
      





すべて準備完了です!



PS:いかなる場合でも、偽の送信者に偽のメールを悪用しないでください。 そして、スパムを送信しないでください。



手ですべてを行うのが面倒な場合は、 https://github.com/danvop/mailerからプロジェクトのクローンを作成するだけです。 展開手順もあります。



All Articles