Microsoft Azureで構築したシステムからメール送信を行いたい場合、MarketplaceにあるSendGridを利用するのがお手軽です。
Qiitaにある「AzureのMarketplaceからSendGridを利用してみる」と内容は途中までほぼ同じですが、API Keyを利用した送信が現在だとスタンダードになりつつあるので、その流れで書いてみたいと思います。
ちなみにAzure FunctionからもSendGridは利用できますので、サーバレスアーキテクチャなどの場合は以下が大変参考になると思います。
Azure Function Appから定期的にメールを送る
1/18追記
今回はMarketplace前提で書いていますが、SendGridの正規代理店である(株)構造計画研究所にてSendGridのアカウントを取得して、Azure上で利用することも可能です。
https://sendgrid.kke.co.jp/
SendGridの利用準備
Marketplaceの「Add-ons」から「SendGrid Email Delivery」を選択します。
Name,Password,Confirm Password,サブスクリプション(自分の場合はMSDN),Resource Groupを設定します。Resource Groupは今回新規に「SampleAppResource」としましたが、既存のものを使用する形でもOKです。
Price tierで価格帯を選びます。Freeプランを選択します。月に25,000通までメール送信可能で、その他の機能的にもほぼほぼ有償版と同じレベルで利用できますので、開発のお試しなどであれば十分かと思います。
Contact Informationに名前やメールアドレスを設定します。会社名やサイト情報は必須ではありません。
最後に法律条項で金額が0.00 JPY/月であることを確認します。
以上で設定完了です。「ダッシュボードにピン留めする」場合はチェックを入れて「作成」ボタンを押すとデプロイが開始されます。
SendGridの管理画面が表示されます。途中で登録したメールアドレスが表示されているので、確認して「Send Confirmation Email」ボタンを押します。
SendGridから確認メールが送信されるので、メールを確認します。
以下のようなメールが来ていることを確認します。(届いていない場合は念のため迷惑メールの受信箱も確認してください)
メールを開き「Confirm Email Address」のボタンを押します。
本来であれば、まず最初に、Whitelabelで独自ドメインの設定を行うのが良いです(メールの到達率を少しでも上げるため)。とりあえずメール送信を確認してみたい、という場合や独自ドメインを持っていない、といった場合は設定せずに利用することも可能です。今回は設定しない流れとしますが、重要な設定なので以下ドキュメントなど是非参考にしてください。
API Keyの発行
SendGridではJavaやC#など様々な言語向けのライブラリが用意されているため、この状態ですぐにプログラムからメール送信することができます。
ライブラリに関しては以下ページに各言語ごとにGitHubのリンクがありますのでご確認ください。
https://sendgrid.kke.co.jp/docs/Integrate/Code_Examples/index.html
メール送信の際、ユーザIDとパスワードを利用した送信が可能ですが、現在ではAPI Keyを発行して利用する流れがセキュリティ的にも推奨されていますので、発行してみます。
管理画面の「Settings」->「API Keys」を選びます。
「Create API Key」から「Generate API Key」を選びます。
API Keyに対する名称(単に一覧などで識別するためだけの名前)を入れ、APIのアクセス権限を設定します。検証などで色々試す場合にはすべてFULL ACCESS/READ ACCESSを付与するのが楽です。本番運用では適切な権限に設定してください。
保存すると、以下のようにAPI Keyが発行されます。この1度きりしか表示されないので、コピーを忘れたり、ブラウザを閉じてしまったりしないようご注意ください。
API Keyを利用すれば、Curlを利用してメール送信することも簡単です。
私は普段よくJavaを利用するのですが、ビルドツールとしてMavenを利用する場合は
<dependency>
<groupId>com.sendgrid</groupId>
<artifactId>sendgrid-java</artifactId>
<version>3.1.0</version>
</dependency>
と依存性を定義して利用可能です。Gradleの場合やJavaから利用する場合のサンプルコードは以下のSendGrid公式のGitHubにのっています。
https://github.com/sendgrid/sendgrid-java