
Exchange Online でメールを送信する方法として、SMTP AUTH (基本認証)、OAuth (先進認証)、などがあります。
SMTP AUTH については廃止されることが決定しており、OAuthへの切り替えが必要となっています。
また、Microsoft Graph API を利用してメールを送信することもできます。
本記事では、SMTP AUTH と Graph API を比較します。
- SMTP AUTH とは
- Microsoft Graph API とは
- 機能・セキュリティ比較表
- セキュリティ面の違いとは?
- 運用・管理の違いとは?
- Graph API の送信方法
- 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 を通じて行えます。
特徴
- OAuth 2.0 によるモダン認証
- https://graph.microsoft.com/v1.0/me/sendMailなどのエンドポイントを使い、OAuthトークンで認証して送信
- メール以外の操作とも統合可能
機能・セキュリティ比較表
| 項目 | 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 にアプリを登録する
-
Microsoft Entra 管理センターにログイン
-
アプリの登録 → 新規登録
-
任意の名前を入力
-
登録後、以下を控える
-
アプリケーション(クライアント)ID
-
テナントID
-
② Graph API の権限を設定
必要な権限
アプリケーション権限(推奨)
-
Mail.Send
※ サービスやバッチ処理で使う場合はこちらが一般的です。
管理者の同意
-
「管理者の同意を与えます」を必ず実行
③ クライアントシークレットを作成
-
証明書とシークレット
-
新しいクライアントシークレットを作成
-
値は一度しか表示されないため必ず保存
④ アクセストークンを取得する
トークン取得(OAuth 2.0)
POST
パラメータ
成功すると access_token が返却されます。
⑤ Graph API でメールを送信する
エンドポイント
リクエスト例(JSON)
ヘッダー