AzureでSendGridを扱う
SendGridイイね!
Azure App Service on Linuxに移行する為にテストをしていたところ、メール送信に失敗するようになりました( ゚д゚)
tekitoumemo.hatenablog.com
色々調べてみるとAzureではメール送信を推奨していないことがわかりました。
Azure 上にメールサーバー/SMTP サーバーを構築する場合の注意事項 – Japan Azure IaaS Support Blog
Azure 上の VM から、外部ドメインに対して直接 SMTP 等を使ってメール送信することは、Azure プラットフォームとしてサポートをしておりません。
メールが失敗する原因がAzureのせいじゃないとは思うのですが、原因特定に力を使っても意味がないのでこの際Slackやらに通知する方法を考えていたのですが、「SendGrid使ってみたい!」と思ったのでSendGridにしました。stackoverflowに質問投げたのですが、ビビるほど音沙汰がないので知ってる人いたら教えて欲しいです(TLSで弾かれてるとこまではわかった)。
ja.stackoverflow.com
ということでAzureで動くまで説明します。
AzureでSendGridアカウントを作成する
SendGrid Accountsの[追加]を押下してアカウントを作成します。Resource Groupまで適当に入れてください。
pricing tierをクリックするとプランが出てきます。25000通まで無料(安杉)なのでFreeを選びました。
Contact Informationには、名前やら自分の情報を入れてください。
法律条例は[作成]を押下すると同意したことになるので同意しましょう。
SendGrid管理画面でAPIキーを発行
デプロイが完了したらリソースに移動して[Manage]を押下するとSendGridの管理画面に遷移します。
管理画面に移動したらメニューのSettingsを押下してApiKeyをクリックします。
Create API Keyを押下して、権限やらを設定します。発行したAPI Keyは一度しか見れないので厳重に保管しておいてください。
コード
C#用のSendGridライブラリがあるのでNugetから取ってきます。
dotnet add package Sendgrid --version 9.10.0
コードは以下です。
var apiKey = "{発行したAPI Key}"; var client = new SendGridClient (apiKey); var msg = new SendGridMessage () { From = new EmailAddress ("{メールアドレス}"), Subject = "Hello World from the SendGrid CSharp SDK!", PlainTextContent = "Hello, Email!", HtmlContent = "<strong>Hello, Email!</strong>" }; msg.AddTo (new EmailAddress ("{メールアドレス}")); var response = await client.SendEmailAsync (msg);
response.StatusCodeで送信出来たか確認できます。
あとは管理画面でメールが送信されたか確認出来ます。
感想
SendGridは知ってましたが、一休のブログとか見てると大規模サービスに使われるクラウドぐらいの感覚でしかなかったのですが
25000通まで無料なので気軽にいじれてよかったです。
user-first.ikyu.co.jp
日本語の情報が多く、値段も手頃なのでかなり気に入りました。