ブログ


Microsoft Graph APIを使ってLaravelからメールを送る方法
こんにちは!
今回はMicrosoft Graph APIを使ってLaravelからメールを送信する方法を紹介します。
事前準備
まずは事前にMicrosoft Azure portalからアプリ登録を行い、クライアントID、テナントID、クライアントシークレットを取得しておく必要があります。
アプリ登録の際に、認証の際のリダイレクトURIを登録する必要がありますが、今回はローカルでの開発を想定しているため、http://localhost/auth/callback
で登録しています。
参考:チュートリアル: Microsoft Entra ID に登録する
LaravelでMicrosoft OAuth認証
パッケージを導入します。
composer require socialiteproviders/microsoft-graph
事前に準備しておいたクライアントID、テナントID、クライアントシークレットを.env
に設定します。
MS_CLIENT_ID=クライアントID
MS_TENANT_ID=テナントID
MS_CLIENT_SECRET=クライアントシークレット
MS_REDIRECT_URI=リダイレクトURI
config/services.php
に追加
'graph' => [
'client_id' => env('MICROSOFT_CLIENT_ID'),
'tenant_id' => env('MICROSOFT_TENANT_ID'),
'client_secret' => env('MICROSOFT_CLIENT_SECRET'),
'redirect' => env('MICROSOFT_REDIRECT_URI'),
],
イベントリスナー登録(App\Providers\EventServiceProvider
)
protected $listen = [
\SocialiteProviders\Manager\SocialiteWasCalled::class => [
\SocialiteProviders\Microsoft\Graph\MicrosoftGraphExtendSocialite::class.'@handle',
],
];
認証用のルート設定
Route::get('/auth/redirect', function () {
return Socialite::driver('graph')
->scopes(['Mail.Send', 'offline_access'])
->redirect();
});
Route::get('/auth/callback', function () {
$user = Socialite::driver('graph')->user();
// DBやキャッシュへアクセストークンを保存する
dd($user);
return 'OAuth認証完了';
});
この状態で、http://localhost/auth/redirect
にアクセスすると、Microsoftのログイン画面が表示されます。
メール送信元としたいMicrosoftアカウントでログインをし、認証が完了するとアクセストークンなどの値が返ってきます。
上記のコードではdd()
で返ってきた値を表示していますが、キャッシュやDBに保存するといいと思います。
※以降の解説ではキャッシュに保存をしています。
Graph APIでHTMLメールを送信する
新たにメール送信用のサービスクラスを作成し、以下の記述を行います。
public function sendGraphMail(User $user)
{
$accessToken = Cache::get('ms_access_token');
Http::withToken($accessToken)
->post('https://graph.microsoft.com/v1.0/me/sendMail', [
'message' => [
'subject' => 'HTMLメールの件名',
'body' => [
'contentType' => 'HTML',
'content' => '<p>こんにちは!</p>',
],
'toRecipients' => [
['emailAddress' => ['address' => 'example@example.com']],
],
],
'saveToSentItems' => true,
])->throw();
}
これをコントローラーなどで呼び出して使用することでメールを送ることができます。
まとめ
今回は、Microsoft Graph APIを使ってLaravelからメールを送る方法を紹介しました。
やっていることとしては、以下となります。
- Microsoftアカウントでログイン認証
- アクセストークンの取得と保存
- Graph APIを使ってHTMLメールの送信
必要に応じてリフレッシュトークンを使ってのトークン更新処理等も実装する必要がありますが、今回は割愛しました。機会があればそれも記事にしようと思います。
株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!