とあるシステム開発において、システムからメールを送信する機能が必要となり色々検討した結果、SendGridのAPIを使うことにしました。
SendGridとは
メール配信サービスで、メールサーバの構築は不要です。
システムはAWSのEC2にWEBサーバを構築してます。
色々調べてみると「Amazon EC2 Eメール上限緩和申請」、「逆引き(rDNS)設定申請」などの手続きが必要なため、もっと楽な方法で実現したい。
お金もあまりかけたくない。
メール送信数は12,000通/月を超えなければ無料のプランを利用可能。
あとは一番大事なのが業務システムなのでメールが届かないといったことが無いようにしないといけない。
送り先には、携帯キャリアメールも存在するので弾かれないようしなければならない。
SendGridは弾かれたことを解析できることが出来ます。
メール到達率を向上させるための仕組みも色々用意されていて、説明が丁寧にされています。
あとはタイミング良くセミナーが開催されているのと、メールでの問い合わせに丁寧に対応いただけました。
セミナー後にはわからないことをしつこく聞いても付き合ってくれました。
SendGridでメール送信
システムの開発言語はPHPでLaravelフレームワークを使用してます。
まずは、Laravelで使えるようにします。
composer.jsonのrequireに”sendgrid/sendgrid”: “6.0”の行を追加します。
"name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "require": { "tecnick.com/tcpdf": "6.*", "maatwebsite/excel": "1.*", "sendgrid/sendgrid": "6.0" },
「composer update」コマンドを実行して追加します。
APIキーが必要なのでAPIキーを取得します。
SendGrid正式ページのAPI Keysを見て取得します。
あとは以下のサンプルコードを実行。(↓これもSendGrid正式ページから取得)
<?php // using SendGrid's PHP Library // https://github.com/sendgrid/sendgrid-php // If you are using Composer (recommended) require 'vendor/autoload.php'; // If you are not using Composer // require("path/to/sendgrid-php/sendgrid-php.php"); $from = new SendGrid\Email("Example User", "test@example.com"); $subject = "Sending with SendGrid is Fun"; $to = new SendGrid\Email("Example User", "test@example.com"); $content = new SendGrid\Content("text/plain", "and easy to do anywhere, even with PHP"); $mail = new SendGrid\Mail($from, $subject, $to, $content); $apiKey = getenv('SENDGRID_API_KEY'); $sg = new \SendGrid($apiKey); $response = $sg->client->mail()->send()->post($mail); echo $response->statusCode(); print_r($response->headers()); echo $response->body();
ここからが余計なHTMLメールを消す方法
“text/plain”を指定しているのに、余計なHTMLメールが付いてきてします。
↓の赤枠
これを無くすにはどうするかです。
SendGridログイン→SendGirdダッシュボード→Setting→Mail Settingと遷移。
Plain Contentを「ACTIVE」にします。
そうすると余計なHTMLメールが添付されなくなります。