2026/04/07
はじめに
WordPressのメール送信は標準ではPHPのmail()関数を使いますが、レンタルサーバー環境では迷惑メールフォルダに振り分けられたり、そもそも届かないことがあります。
SMTPプラグインで解決するのが一般的ですが、今回はMicrosoftのAzure Communication Services(ACS)のREST APIを使ってwp_mailを完全に置き換えるプラグイン「AzureMailer」を開発しました。
当社はMicrosoftパートナーとしてAzureを活用しており、Azure Communication Services・Azure Functions・SharePoint・Microsoft Teamsなど、Microsoft 365 / Azureを組み合わせた業務システムの構築を得意としています。
WordPress.org公式ディレクトリにも申請中で、GitHubでソースコードを公開しています。
なぜAzure Communication Servicesなのか
SMTPの代わりにACSを選んだ理由は以下の通りです。
- SMTPポート不要 — ファイアウォールでSMTPポート(587/465)がブロックされている環境でもHTTPS経由で送信できる
- 高い到達率 — Microsoftのメールインフラを利用するため、Gmail・Outlook等への到達率が高い
- HMAC-SHA256認証 — SMTPのパスワード認証より安全
- 無料枠 — 1日100通まで無料(コーポレートサイトなら十分)
プラグインの設計方針
開発にあたって、以下を設計方針としました。
pre_wp_mailフィルターでwp_mailを置き換え、既存のプラグイン(Contact Form 7、WooCommerce等)は一切変更不要- 管理画面の「設定」から接続文字列と送信元アドレスを入力するだけで動作
- 設定が空の場合はデフォルトのwp_mailにフォールバック
- テストメール機能を内蔵
管理画面の「設定 → AzureMailer」から接続文字列と送信元アドレスを入力するだけで利用できます。

実装のポイント
1. ACSのHMAC-SHA256認証
ACSのREST APIは、リクエストごとにHMAC-SHA256署名を生成する必要があります。署名の対象は「HTTPメソッド + パス + 日時 + ホスト + ボディのSHA256ハッシュ」です。
$content_hash = base64_encode( hash( 'sha256', $json_body, true ) );
$date = gmdate( 'D, d M Y H:i:s T' );
$host = wp_parse_url( $endpoint, PHP_URL_HOST );
$string_to_sign = "POST\n{$path}\n{$date};{$host};{$content_hash}";
$signature = base64_encode(
hash_hmac( 'sha256', $string_to_sign, base64_decode( $access_key ), true )
);
この署名をAuthorizationヘッダーに含めてリクエストを送信します。接続文字列にはエンドポイントとアクセスキーが含まれているので、それをパースして使います。
2. pre_wp_mailフィルター
WordPressにはpre_wp_mailというフィルターがあり、wp_mailの処理を完全に置き換えることができます。
add_filter( 'pre_wp_mail', [ $this, 'send_via_acs' ], 10, 2 );
このフィルターでtrueを返せば「送信成功」、falseなら「送信失敗」、nullなら「デフォルトのwp_mailにフォールバック」という挙動になります。設定が空の場合にnullを返すことで、プラグインを有効化しただけではメール送信に影響しない安全設計にしています。
3. HTML/テキストメールの自動判別
wp_mailのheadersパラメータにContent-Type: text/htmlが含まれている場合はHTMLメール、それ以外はプレーンテキストメールとして送信します。
$header_str = is_array( $headers ) ? implode( "\n", $headers ) : (string) $headers;
if ( preg_match( '/Content-Type:\s*text\/html/i', $header_str ) ) {
$body['content']['html'] = $message;
} else {
$body['content']['plainText'] = wp_strip_all_tags( $message );
}
つまったところ
WordPress.orgのPlugin Check
WordPress.org公式ディレクトリに申請するためPlugin Checkを実行したところ、いくつかの指摘を受けました。
- プラグイン名に「WP」は使えない — 当初「WP Azure Mail」という名前でしたが、WordPressの商標保護のため「WP」を含むプラグイン名は禁止されています。「AzureMailer」にリネームしました
- テキストドメインとスラッグの一致 — WordPress.orgが割り当てるスラッグ(azuremailer)とプラグインのText Domainヘッダーが一致しないとエラーになります
- load_plugin_textdomain()は非推奨 — WordPress 4.6以降、公式ディレクトリのプラグインは自動で翻訳がロードされるため不要です
- error_log()は本番コードで非推奨 — WP_DEBUG_LOGが有効な場合のみログ出力するようにラップしました
- $_POSTのサニタイズ — wp_unslash()を通してからsanitize_text_field()する必要があります
Contact Form 7との連携
Contact Form 7は内部でwp_mailを使っているため、AzureMailerを有効化するだけで自動的にACS経由でメールが送信されます。追加設定は不要です。
当社サイトではContact Form 7の送信後にAzure Functionsを呼び出してSharePoint ListとTeamsにも通知を送っていますが、これはAzureMailerとは独立した処理(wpcf7_mail_sentフック)なので互換性の問題はありません。
設定画面からテストメールを送信して、正常に動作することを確認できます。

まとめ
- Azure Communication Servicesを使えばSMTP不要で安全にメール送信できる
- pre_wp_mailフィルターで既存プラグインに影響なく置き換え可能
- WordPress.orgへの申請にはPlugin Checkの基準を満たす必要がある
- プラグインはGitHubで公開中: https://github.com/bgng-co-jp/azuremailer
Azureの導入・活用のご相談
株式会社ビギニングはMicrosoftパートナーとして、Azure Communication Services をはじめとするAzure / Microsoft 365 の導入・活用をサポートしています。
- Azure Communication Servicesを使ったメール・SMS配信
- Azure Functionsによる業務自動化
- SharePoint / Teamsとの連携システム構築
- 既存WordPressサイトのAzure移行
「自社でもAzureを使ってみたい」「既存システムをAzureに移行したい」など、お気軽にご相談ください。