AzurよりSendGridを使用してメールを送信する
Azureでのメール送信はSendGridらしい
詳しくは知らないけどSendGridの送信手段を調べてみました。
環境
CentOS7
PHP7
Azure設定
サービスを追加
アプリ名やパスワードを設定
料金プランを設定
アクセス情報を設定
同意確認を行う
作成ボタンを押下
ダッシュボードに作成されたことを確認
Azureの管理画面より「Manage」を押下してSendGridの管理ページへジャンプ
メールを送信して認証チェックを行う
メール送信完了画面
自分のメールクライアントよりメールを受信してボタンを押下
認証後はそのまま管理画面を表示
APIキー作成画面を表示
作成ボタンを押下して作成画面を表示
APIキー名と権限を設定
キーの値をクリックしてコピーする
Azureの設定画面で資格情報を取得
※パスワードは設定したもの、ユーザ名はこれを使用することでメール送信のパラメータとなります。
送信用設定
yum
udo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm sudo yum install --enablerepo=remi,remi-php70 php php-devel php-mbstring php-pdo php-gd php-xml php-intl
composer
mkdir -p sample1 cd sample1 php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" php composer.phar require swiftmailer/swiftmailer
composer.json
{ "require": { "swiftmailer/swiftmailer": "5.3.0" } }
実装
sendmail1.php
<?php include_once "vendor/autoload.php"; // 本文 $text = "Hi!\nHow are you?\n"; // 送信元 $from = array( '送信元メールアドレス' => 'sample_from' ); // 送信先 $to = array( '送信先メールアドレス' => 'sample_to', ); // タイトル $subject = 'Example PHP Email'; // ユーザ情報 $username = '資格情報のユーザ名'; $password = '資格情報のパスワード'; // 送信設定 $transport = Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 587); $transport->setUsername($username); $transport->setPassword($password); $swift = Swift_Mailer::newInstance($transport); // メッセージ生成 $message = new Swift_Message($subject); // 送信情報設定 $message->setFrom($from); $message->setBody($text, 'text/plain'); $message->setTo($to); // 送信処理 if ($recipients = $swift->send($message, $failures)) { echo "送信成功"; } else { echo "送信失敗"; }
sendmail2.php
<?php // 接続情報 $url = 'https://api.sendgrid.com/'; $user = '資格情報より取得したユーザ名'; $pass = '資格情報より取得したパスワード'; // 送信情報 $params = array( 'api_user' => $user, 'api_key' => $pass, 'to' => '送信先のメールアドレス', 'subject' => 'testing from curl', 'text' => 'testing body', 'from' => '送信元のメールアドレス', ); // リクエスト先設定 $request = $url.'api/mail.send.json'; // curl初期化 $session = curl_init($request); // curl設定(POST送信) curl_setopt ($session, CURLOPT_POST, true); // curl設定(パラメータ設定) curl_setopt ($session, CURLOPT_POSTFIELDS, $params); // curl設定(ヘッダー不要、レスポンス必要?) curl_setopt($session, CURLOPT_HEADER, false); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // 送信して終了 $response = curl_exec($session); curl_close($session); // 処理結果 print_r ($response);
※WEB APIを使用してメール送信するサンプルでもユーザとパスワードは資格情報のものを使用します。
所感
参考にしたドキュメントの通りにやることでなんとかできた。
最近は日本語のドキュメントが豊富なので環境を用意するのも簡単で助かります。
一部英語でわからないこともあるけど
まあなんとかなるかな…