Guide
Send-MailMessage 非推奨:PowerShell 7 対応策
Send-MailMessage は PowerShell 7 で非推奨かつ廃止されています。TLS を安全にネゴシエートできず、Basic Auth は 2026 年 4 月 30 日に停止されるためです。このガイドでは `nylas email send` への段階的な移行を示します:基本送信、ホストファイルリンク、認証情報、SMTP リレー、HTML、バルクループ。Gmail、Outlook、Exchange、Yahoo、iCloud、IMAP に対応。
Written by Nick Barraclough Product Manager
Reviewed by Qasim Muhammad
Send-MailMessage が非推奨の理由
Microsoft は PowerShell 7.0 で Send-MailMessage を非推奨としました。その理由は、基盤となる SMTP ライブラリが TLS を安全にネゴシエートできないこと、そして依存している Basic Auth 認証情報が主要プロバイダで停止されていることです。Microsoft の公式ドキュメントはこの cmdlet を廃止としてマークし、サードパーティの代替品を推奨しています。Send-MailMessage を使い続けるスクリプトは、サイレントな配信失敗、接続拒否、または認証情報の露出のリスクに直面します。
基盤となる System.Net.Mail.SmtpClient クラス自体が廃止として文書化されています(公式ドキュメント)。モダンなプロバイダが要求する方法で TLS をネゴシエートできないためです。具体的な問題点:
- 安全でない TLS ネゴシエーション -- SmtpClient はモダンな TLS ハンドシェイクを確実にサポートしない
- スクリプト内の認証情報 -- SMTP パスワードが
-CredentialにハードコードされるかPSCredentialオブジェクトに保存される - OAuth2 非対応 -- Gmail と Outlook はプログラムからのアクセスに OAuth2 を要求;Send-MailMessage は Basic Auth のみ対応、Microsoft は 2022 年 10 月に Exchange Online の Basic Auth を廃止
- プロバイダロックイン -- SMTP 設定はプロバイダごとに異なり、切り替えは接続コードの書き直しを意味する
初回セットアップ
Send-MailMessage の置き換えには、約 2 分の一度きりのインストールと認証ステップが必要です。セットアップ後、すべての nylas email send 呼び出しは OS キーチェーンに保存された OAuth2 トークンで認証されます。スクリプト内に SMTP サーバーアドレス、ポート番号、平文の認証情報は一切ありません。CLI は単一のインターフェースで Gmail、Outlook、Exchange、Yahoo、iCloud、IMAP をサポートします。
PowerShell インストールスクリプトは GitHub から最新リリースをダウンロードし、バイナリを ~/.config/nylas/bin に配置する前に SHA-256 チェックサムを検証します。以下のワンライナーでインストール:
# Windows に Nylas CLI をインストール
irm https://cli.nylas.com/install.ps1 | iexHomebrew、シェルスクリプト、Go インストールについては入門ガイドを参照。
インストール後、Nylas API キーで認証します。CLI はキーを Windows Credential Manager(または macOS/Linux キーチェーン)に保存するため、スクリプトファイルに表示されることはありません。認証は明示的に取り消すまで PowerShell セッション間で持続します。
# メールボックスを認証
nylas auth config
# dashboard-v3.nylas.com から API キーを貼り付け
# 確認
nylas auth whoami
# => Authenticated as you@company.com (Google Workspace)以上です。SMTP サーバーなし、ポート番号なし、スクリプト内に認証情報なし。
パターン 1:基本的なメール送信
基本的なメール送信は最も一般的な Send-MailMessage の使用パターンです。非推奨版は 8 つのパラメータが必要です -- SMTP サーバー、ポート、TLS フラグ、認証情報、送信者、受信者、件名、本文。Nylas CLI の置き換えはこれを 4 つのパラメータに削減します。OAuth2 認証、送信者 ID、トランスポート暗号化が自動的に処理されるためです。
Send-MailMessage 版は Get-Credential を通じて SMTP パスワードを露出させます。これはインタラクティブに問い合わせる(自動化をブロック)か、保存された認証情報ファイルが必要です。Nylas CLI は代わりに OS キーチェーンから API キーを読み取ります。
Before(Send-MailMessage)
Send-MailMessage `
-From "you@company.com" `
-To "colleague@company.com" `
-Subject "Quarterly report" `
-Body "Please review the Q4 numbers." `
-SmtpServer "smtp.office365.com" `
-Port 587 `
-UseSsl `
-Credential (Get-Credential)After(Nylas CLI)
Nylas CLI 版は認証済みアカウントを送信者として自動使用し、-From、-SmtpServer、-Port、-Credential パラメータを完全に排除します。--yes フラグは自動化スクリプト用に確認プロンプトをスキップします。
nylas email send `
--to "colleague@company.com" `
--subject "Quarterly report" `
--body "Please review the Q4 numbers." `
--yesパターン 2:添付ファイル送信をリンクに置き換え
Send-MailMessage でファイル添付を送信するには、ローカルファイルパスを受け付ける -Attachments パラメータを使用します。現在の nylas email send コマンドは添付送信フラグを公開していないため、本文中の共有可能なファイルリンクに移行するか、メッセージに MIME 添付が必要な場合は Nylas API/SDK パスを使用してください。
非推奨の Send-MailMessage 版は添付フラグと共に SMTP 認証情報とサーバー設定が依然として必要です。CLI 版は認証済み送信パスをシンプルかつ監査可能に保ち、ファイルストレージはアクセス制御と保持を既に管理しているシステムに残ります。
Before(Send-MailMessage)
Send-MailMessage `
-From "you@company.com" `
-To "client@example.com" `
-Subject "Invoice attached" `
-Body "Please find the March invoice." `
-Attachments "C:\Reports\invoice-march.pdf" `
-SmtpServer "smtp.gmail.com" `
-Port 587 `
-UseSsl `
-Credential $credAfter(Nylas CLI)
CLI に一対一の添付フラグがあるかのように振る舞う代わりに、生成されたファイルへのリンクを送信します。これにより置き換えコマンドが nylas email send --help に対して有効に保たれ、隠れた SMTP 認証情報の処理を回避します。
nylas email send `
--to "client@example.com" `
--subject "Invoice ready" `
--body "The March invoice is ready: <invoice-download-link>" `
--yesパターン 3:保存された認証情報での送信
Send-MailMessage 用の SMTP 認証情報の保存は既知のセキュリティ問題です。標準的な PowerShell アプローチは Export-Clixml / Import-Clixml を使って PSCredential を XML ファイルにシリアライズしますが、暗号化は現在のユーザーとマシンに紐づいており、CI/CD ランナー、共有サービスアカウント、コンテナデプロイメントはすべて動作しません。Microsoft Security Response Center の 2023 年のアドバイザリによると、自動化スクリプトでのハードコードされた認証情報は企業セキュリティ侵害における攻撃ベクトルのトップ 5 に入ります。
Nylas CLI は認証情報ファイルを完全に排除します。API キーは OS キーチェーン(Windows Credential Manager、macOS Keychain、または Linux secret service)に一度保存され、スクリプトソースコードに表示されることはありません。
Before(Send-MailMessage)
# 認証情報をファイルに保存するか毎回プロンプト
$cred = Import-Clixml -Path "C:\Scripts\smtp-cred.xml"
# または:$cred = Get-Credential
Send-MailMessage `
-From "alerts@company.com" `
-To "oncall@company.com" `
-Subject "Server alert" `
-Body "CPU above 90%." `
-SmtpServer "smtp.office365.com" `
-Port 587 `
-UseSsl `
-Credential $credAfter(Nylas CLI)
Nylas CLI ではスクリプト本体にシークレットは含まれません。API キーは nylas auth config 時に一度保存され、実行時に OS キーチェーンから読み取られます。
# スクリプトに認証情報なし -- API キーは CLI が安全に保存
nylas email send `
--to "oncall@company.com" `
--subject "Server alert" `
--body "CPU above 90%." `
--yesパターン 4:SMTP リレー経由の送信
多くの組織がポート 25 で認証なし、TLS 暗号化なしの内部 SMTP リレーサーバーを運用しています。これらのリレーは信頼境界モデル用に設計されましたが、攻撃者がネットワークアクセスを得ると横方向移動の頻繁なターゲットになります。CISA の 2024 年メールインフラストラクチャアドバイザリによると、認証なし SMTP リレーはビジネスメール詐欺インシデントの 23% に関与しています。リレーを OAuth2 認証済み API 呼び出しに置き換えることで、この攻撃面を完全に排除できます。
Send-MailMessage リレーパターンはポート 25 で認証なしに送信します。Nylas CLI 版は OAuth2 認証済み HTTPS を経由し、宛先プロバイダに関係なくすべてのリクエストで TLS 1.2+ を強制します。
Before(Send-MailMessage)
# 内部リレー -- 認証なし、TLS なし
Send-MailMessage `
-From "noreply@internal.corp" `
-To "team@company.com" `
-Subject "Build complete" `
-Body "Build #1234 succeeded." `
-SmtpServer "relay.internal.corp" `
-Port 25After(Nylas CLI)
Nylas CLI 版はポート 25 の内部リレーに接続する代わりに、プロバイダの API を HTTPS で経由して送信します。すべてのリクエストは OAuth2 認証済みで TLS 1.2 以上で暗号化されます。
# OAuth2 認証済み、TLS 暗号化、内部リレー不要
nylas email send `
--to "team@company.com" `
--subject "Build complete" `
--body "Build #1234 succeeded." `
--yesパターン 5:HTML メール
Send-MailMessage で HTML メールを送信するには -BodyAsHtml スイッチパラメータが必要です。これがないと、HTML タグは受信者の受信箱にリテラルテキストとして表示されます。Nylas CLI は <h1>、<p>、<table> などの開始タグをチェックして HTML コンテンツを自動検出し、MIME タイプを text/html に自動設定します。追加のフラグは不要です。この検出はインライン CSS やネストされた要素を含む有効な HTML フラグメントで動作します。
Send-MailMessage の HTML パターンは PowerShell here-string(@"..."@)で HTML 本文を定義し、-BodyAsHtml フラグで渡します。このフラグがなければ、受信者は生のマークアップを見ることになります。
Before(Send-MailMessage)
$htmlBody = @"
<h1>Weekly Report</h1>
<p>Here are this week's metrics:</p>
<ul>
<li>Deployments: 12</li>
<li>Incidents: 0</li>
</ul>
"@
Send-MailMessage `
-From "reports@company.com" `
-To "team@company.com" `
-Subject "Weekly report" `
-Body $htmlBody `
-BodyAsHtml `
-SmtpServer "smtp.office365.com" `
-Port 587 `
-UseSsl `
-Credential $credAfter(Nylas CLI)
Nylas CLI 版は -BodyAsHtml フラグを完全に削除します。同じ here-string を --body に渡すと、CLI が HTML タグを検出して MIME タイプを text/html に自動設定します。
$htmlBody = @"
<h1>Weekly Report</h1>
<p>Here are this week's metrics:</p>
<ul>
<li>Deployments: 12</li>
<li>Incidents: 0</li>
</ul>
"@
nylas email send `
--to "team@company.com" `
--subject "Weekly report" `
--body $htmlBody `
--yesパターン 6:バルク送信ループ
Send-MailMessage を使ったバルクメールループは、ループ外での認証情報セットアップと繰り返し接続を処理できる SMTP サーバーが必要です。多くの SMTP リレーはセッションあたり 100-300 通で制限し、Gmail の SMTP ゲートウェイは無料アカウントを1日 500 通に制限します。Nylas CLI 版は認証情報のボイラープレートを排除し、同じ Start-Sleep スロットルを保ちつつループ本体を 10 行から 5 行に削減します。
Send-MailMessage のバルクパターンはループ前にシリアライズされた認証情報ファイルを読み込み、各イテレーションで渡します。パスワード変更やスクリプトの別マシンへの移動時には認証情報ファイルを再エクスポートする必要があります。
Before(Send-MailMessage)
$cred = Import-Clixml -Path "C:\Scripts\smtp-cred.xml"
Import-Csv -Path ".\contacts.csv" | ForEach-Object {
Send-MailMessage `
-From "onboarding@company.com" `
-To $_.Email `
-Subject "Welcome, $($_.Name)!" `
-Body "Your account is ready." `
-SmtpServer "smtp.office365.com" `
-Port 587 `
-UseSsl `
-Credential $cred
Start-Sleep -Seconds 2
}After(Nylas CLI)
Nylas CLI ループは認証情報のインポートと SMTP 設定行を削除します。各イテレーションはキーチェーンに保存された API キーを使ってプロバイダの API 経由で送信するため、nylas auth config を実行済みのどのマシンでもスクリプトは同じように動作します。
Import-Csv -Path ".\contacts.csv" | ForEach-Object {
nylas email send `
--to $_.Email `
--subject "Welcome, $($_.Name)!" `
--body "Your account is ready." `
--yes
Start-Sleep -Seconds 2
}比較表
この表は Send-MailMessage と Nylas CLI の 11 の機能差異をまとめています。非推奨の cmdlet は手動 SMTP 設定と平文認証情報による基本的な送信操作のみをサポートします。CLI は Send-MailMessage のすべての機能に対応し、cmdlet になかった 4 つの機能を追加します:メールスケジューリング、受信箱読み取りアクセス、JSON 構造化出力、カレンダー管理。
| 機能 | Send-MailMessage | Nylas CLI |
|---|---|---|
| TLS セキュリティ | 破損(非推奨) | TLS 1.2+ 強制 |
| 認証 | Basic Auth / アプリパスワード | OAuth2 |
| スクリプト内の認証情報 | あり(PSCredential / XML) | なし(OS キーチェーン) |
| Gmail サポート | アプリパスワードが必要 | OAuth2 内蔵 |
| Outlook / M365 サポート | Basic Auth(停止予定) | OAuth2 内蔵 |
| HTML 本文 | -BodyAsHtml フラグ | 自動検出 |
| 添付ファイル | -Attachments | リンク送信、または Nylas API/SDK で MIME 添付 |
| メールスケジューリング | 非対応 | --schedule |
| 受信箱読み取り | 非対応 | nylas email list |
| JSON 出力 | 非対応 | --json |
| カレンダーアクセス | 非対応 | nylas calendar |
よくある質問
これらは Send-MailMessage からモダンな代替品への移行時に開発者が最もよく質問する内容です。回答は非推奨のタイムライン、移行の手間、Send-MailMessage と Nylas CLI の機能対等性をカバーしています。Microsoft は 2020 年 3 月リリースの PowerShell 7.0 で公式に cmdlet を非推奨としました——6 年以上前です。
なぜ Send-MailMessage は非推奨ですか?
Microsoft は PowerShell 7.0 で非推奨としました。基盤となる System.Net.Mail.SmtpClient が TLS を安全にネゴシエートできないためです。Microsoft はサードパーティライブラリの使用を推奨しています。
Send-MailMessage の最良の置き換えは?
Nylas CLI は 1 つのコマンドで Send-MailMessage を置き換えます。OAuth2、TLS、プロバイダの違いを自動的に処理します。スクリプト内に SMTP 認証情報なし、プロバイダ固有の設定なし。
PowerShell スクリプトを変更する必要がありますか?
はい、しかしサポートされている送信フィールドの移行は簡単です。各 Send-MailMessage 呼び出しを nylas email send に置き換え、パラメータをマッピングします:-To は --to に、-Subject は --subject に、-Body は --body になります。-Attachments については、ホストされたファイルリンクを送信するか Nylas API/SDK の添付パスを使用してください。
Nylas CLI は Send-MailMessage のすべての機能をサポートしますか?
--body による HTML 本文、CC/BCC、複数受信者をサポートしています。さらに Send-MailMessage になかった機能も追加されています:OAuth2、メールスケジューリング、開封/クリック追跡、JSON 出力、受信箱読み取りアクセス。添付送信は現在の CLI フラグにはありません。MIME 添付が必要な場合はホストされたファイルリンクまたは Nylas API/SDK を使用してください。
次のステップ
Send-MailMessage を nylas email send に置き換えた後、以下のガイドが関連する PowerShell メールワークフローをカバーしています——受信箱の読み取り、添付ファイルのダウンロード、自動化レポートの作成、Office 365 メールの管理。各ガイドには本移行で使用したのと同じ CLI バージョンでテスト済みのコード例が含まれています。
- Send-MgUserMessage を置き換え -- 新しい Graph PowerShell cmdlet からの移行?
- Send-MgUserMail vs Send-MailMessage -- 廃止 SMTP、Graph PowerShell、CLI 送信パスの比較
- PowerShell からメール送信 -- 高度なパターン、スケジューリング、スクリプティング
- PowerShell でメールを読み取り・検索 -- 未読一覧、送信者検索、CSV エクスポート
- PowerShell でメール添付ファイルをダウンロード -- タイプフィルター、バッチダウンロード、リネーム
- PowerShell 自動メールレポート -- CSV レポート、スケジュール送信、テンプレート
- PowerShell から Office 365 メールを管理 -- M365 受信箱の読み取り、検索、整理
- 完全なコマンドリファレンス -- すべてのフラグとサブコマンドのドキュメント