m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

AzurよりSendGridを使用してメールを送信する

Azureでのメール送信はSendGridらしい

詳しくは知らないけどSendGridの送信手段を調べてみました。

環境

CentOS7
PHP7

Azure設定

サービスを追加

f:id:m_shige1979:20170720165411p:plain

アプリ名やパスワードを設定

f:id:m_shige1979:20170720165420p:plain

料金プランを設定

f:id:m_shige1979:20170720165429p:plain

アクセス情報を設定

f:id:m_shige1979:20170720165440p:plain

同意確認を行う

f:id:m_shige1979:20170720165449p:plain

作成ボタンを押下

f:id:m_shige1979:20170720165458p:plain

ダッシュボードに作成されたことを確認

f:id:m_shige1979:20170720165507p:plain

Azureの管理画面より「Manage」を押下してSendGridの管理ページへジャンプ

f:id:m_shige1979:20170720165518p:plain

メールを送信して認証チェックを行う

f:id:m_shige1979:20170720165527p:plain

メール送信完了画面

f:id:m_shige1979:20170720165535p:plain

自分のメールクライアントよりメールを受信してボタンを押下

f:id:m_shige1979:20170720165545p:plain

認証後はそのまま管理画面を表示

f:id:m_shige1979:20170720165648p:plain

APIキー作成画面を表示

f:id:m_shige1979:20170720165657p:plain

作成ボタンを押下して作成画面を表示

f:id:m_shige1979:20170720165708p:plain

APIキー名と権限を設定

f:id:m_shige1979:20170720165719p:plain

キーの値をクリックしてコピーする

f:id:m_shige1979:20170720165729p:plain

Azureの設定画面で資格情報を取得

f:id:m_shige1979:20170720165739p:plain
※パスワードは設定したもの、ユーザ名はこれを使用することでメール送信のパラメータとなります。

送信用設定

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を使用してメール送信するサンプルでもユーザとパスワードは資格情報のものを使用します。

所感

参考にしたドキュメントの通りにやることでなんとかできた。
最近は日本語のドキュメントが豊富なので環境を用意するのも簡単で助かります。
一部英語でわからないこともあるけど
まあなんとかなるかな…