BLOG

ブログ

2025/07/28

Microsoft Graph APIを使ってLaravelからメールを送る方法

この記事を書いた人 K.M

こんにちは!
今回は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メールの送信

必要に応じてリフレッシュトークンを使ってのトークン更新処理等も実装する必要がありますが、今回は割愛しました。機会があればそれも記事にしようと思います。


株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!

アーカイブ