54
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Laravel5]SendGridでメール送信する方法

Posted at

#SendgridのSMTPサーバ経由で送信する場合
LaravelでSendGridのSMTPサーバを使用してメールを送ることはとても簡単にできて、
ユーザ登録が完了していれば、公式HPにも乗っている通り以下のように設定するだけです。

config/mail.php
return array(
  'driver' => 'smtp',
  'host' => 'smtp.sendgrid.net',
  'port' => 587,
  'from' => array('address' => 'from@example.com', 'name' => 'John Smith'),
  'encryption' => 'tls',
  'username' => 'sendgrid_username',
  'password' => 'sendgrid_password',
);

ユーザIDとパスワードでも可能ですが、API KEYを使用する場合以下のようにすればOKです。

    'username' => 'apikey',
    'password' => 'YOUR_API_KEY',

非常に簡単です。
ちょっと使ってみる分にはこれで事足りるかと思います。

#WebAPI経由で送信する場合

WebAPI経由での送信は以下の様な場合SMTPより有利と言われており、
Sendgridではメール送信時WebAPIを使用する事を推奨しています。

・ISPが全てのアウトバンドのメールポートをブロックしてHTTPのみ利用可能な場合
・Web APIはクライアント~サーバ間で多数のメッセージを必要としないため、アプリケーションサイトとSendGridの間で高いレイテンシーが確保できる場合、より高速になります。
・アプリケーションの動作環境を変更できず、SMTPライブラリのインストールおよび設定ができない場合
・メールを送信するライブラリを開発している場合。Web APIを利用した方が開発期間を短縮することができます。

また、エンコードはUTF-8固定のようです

SendGridでは公式ライブラリを始め、様々なWebAPIライブラリが公開されています。
https://sendgrid.kke.co.jp/docs/Integrate/libraries.html

例えば公式のやつはこんな感じになります。

$sendgrid = new SendGrid('YOUR_SENDGRID_APIKEY');
$email = new SendGrid\Email();
$email
    ->addTo('foo@bar.com')
    ->setFrom('me@bar.com')
    ->setSubject('Subject goes here')
    ->setText('Hello World!')
    ->setHtml('<strong>Hello World!</strong>');

$sendgrid->send($email);

やはりもう書いてある部分はそのままに、MailgunやMandrillのように、configでdriver変えて、API KEYとか設定するだけで使いたかったのですがどうにもうまい方法が見つかりませんでした。

#laravel-sendgrid-driverを使う方法

というわけでdriverにSendgridを指定できるようにするPackageを作ってみました。
https://packagist.org/packages/s-ichikawa/laravel-sendgrid-driver

ReadMeにも書いた通り使い方はインストールして、いくつか設定を追加するだけです。

.env
MAIL_DRIVER=sendgrid
SENDGRID_API_KEY='YOUR_SENDGRID_API_KEY'
config/services.php
'sendgrid' => [
    'api_key' => env('SENDGRID_API_KEY')
]

後はLaravelのドキュメントに書いてある通り使えます。
既存のLaravelのクラス郡を継承しているのでMAIL_DRIVERの値をsmtpやlogにすればもちろんそのまま動きます。

54
55
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
55

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?