社畜の所業

社畜の所業

Microsoft365の機能について解説をしていきたいと思います。このブログの情報をご活用いただければ幸いです。たまに他の情報も取り入れていきたいと思います。

※このサイトはPR記事を含みます。

【Microsoft365参考書】Exchange Online における SMTP AUTH と Microsoft Graph API の違いとは?

Exchange Online における SMTP AUTH と Microsoft Graph API の違いとは?

 

Exchange Online でメールを送信する方法として、SMTP AUTH (基本認証)、OAuth (先進認証)、などがあります。

SMTP AUTH については廃止されることが決定しており、OAuthへの切り替えが必要となっています。

また、Microsoft Graph API を利用してメールを送信することもできます。

本記事では、SMTP AUTH と Graph API を比較します。

 

 

 

 

SMTP AUTH とは

SMTP AUTH は、ユーザー名とパスワードを使って SMTP サーバーに認証し、 メールを送信する方式です。 多くの業務システムや複合機、古いアプリケーションで採用されてきました。

特徴

  • smtp.office365.comを使い、ポート587で認証してメール送信
  • ほぼすべての言語・ツールで利用可能
  • セキュリティ面に課題あり

 

 

 

Microsoft Graph API とは

Microsoft Graph APIは、Microsoft 365 全体を操作できる REST API です。Graph APIはRESTベースのAPIであり、HTTP 経由でOAuth 2.0認証を行います。Exchange Online のメール送信も、この API を通じて行えます。

特徴

 

 

 

機能・セキュリティ比較表

項目 SMTP AUTH Microsoft Graph API
認証方式 ID / パスワード OAuth 2.0
セキュリティ 低〜中
Microsoft 推奨度 非推奨傾向 強く推奨
多要素認証 非対応 対応
権限管理 ユーザー単位 アプリ単位
将来性 縮小・制限方向 標準・拡張方向
実装難易度
監査・統制 弱い 強い

 

 

 

セキュリティ面の違いとは?

SMTP AUTH の問題点

  • パスワード漏洩リスクが常に存在
  • MFA を回避する経路になりやすい
  • 攻撃者に狙われやすいプロトコル

 

Graph API の強み

  • トークンベース認証でパスワード不要
  • 条件付きアクセスや監査ログとの親和性が高い

 

 

 

運用・管理の違いとは?

SMTP AUTH

  • ユーザーアカウントが増えるほど管理が煩雑
  • パスワード変更時の影響範囲が大きい

 

Graph API

  • アプリ単位で送信権限を制御
  • 送信元を限定できる(なりすまし防止)
  • ログ・監査が取りやすい

 

 

 

Graph API の送信方法

エンドポイント

  • POST /me/sendMail
  • POST /users/{id | userPrincipalName}/sendMail

これらのエンドポイントを使って、認証済みユーザーまたは指定ユーザーのメールボックスからメールを送信します。 

 

認証と権限

OAuth 2.0を使用し、アプリケーションにMail.SendまたはMail.Send.Sharedのアクセス許可が必要です。

共有メールボックスや代理送信の場合は、適切な委任アクセス権を付与する必要があります。 

 

送信形式

  • JSON形式:件名、本文、宛先、添付ファイルなどを指定可能。
  • MIME形式:S/MIME署名や暗号化を含む高度なメール構成が可能。

 

代理送信や共有メールボックス対応

Fromプロパティを設定することで、別のユーザーや共有メールボックスを差出人として送信できます。

この場合、送信者には「代理送信」または「メールボックス所有者として送信」の権限が必要です。

 

トランスポートルールにも対応

Graph API から送信したメールについて、トランスポートルールも適用することができます。

なお、送信元 IP アドレスは、Microsoft 365 で利用している IP アドレスであるため、一般向けに公開していないことから、送信元 IP アドレスを条件とすることはできません。

 

 

 

Graph API で送信するには?

① Entra ID にアプリを登録する

  1. Microsoft Entra 管理センターにログイン

  2. アプリの登録 → 新規登録

  3. 任意の名前を入力

  4. 登録後、以下を控える

    • アプリケーション(クライアント)ID

    • テナントID

 

② Graph API の権限を設定

必要な権限

アプリケーション権限(推奨)

  • Mail.Send

※ サービスやバッチ処理で使う場合はこちらが一般的です。

管理者の同意

  • 「管理者の同意を与えます」を必ず実行

 

③ クライアントシークレットを作成

  1. 証明書とシークレット

  2. 新しいクライアントシークレットを作成

  3. 値は一度しか表示されないため必ず保存

 

④ アクセストークンを取得する

トークン取得(OAuth 2.0)

POST

 
https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token

パラメータ

 
client_id=xxxxxxxx client_secret=xxxxxxxx scope=https://graph.microsoft.com/.default grant_type=client_credentials

成功すると access_token が返却されます。

 

⑤ Graph API でメールを送信する

エンドポイント

 
POST https://graph.microsoft.com/v1.0/users/{送信元メールアドレス}/sendMail

リクエスト例(JSON)

 
{ "message": { "subject": "Graph API テストメール", "body": { "contentType": "HTML", "content": "<p>これはGraph APIから送信されたメールです。</p>" }, "toRecipients": [ { "emailAddress": { "address": "recipient@example.com" } } ] }, "saveToSentItems": true }

ヘッダー

 
Authorization: Bearer {access_token} Content-Type: application/json
 

 

 

 

よくあるエラー

403 Forbidden

  • 権限不足(Mail.Send が未設定)

  • 管理者同意が未実施

401 Unauthorized

  • トークンの期限切れ

  • tenant-id / client-id の指定ミス

 

 

it-bibouroku.hateblo.jp

 

it-bibouroku.hateblo.jp

 

it-bibouroku.hateblo.jp