Guide

SMTP サーバーや Postfix なしで Linux コマンドラインからメールを送信する

ほとんどのコマンドラインメールツールはローカル SMTP サーバーや Postfix・sendmail などのリレーが必要で、単一プロバイダーにしか対応していません。Nylas CLI は Linux、Ubuntu、macOS、Windows のターミナルから OAuth2 内蔵、JSON 出力対応、SMTP サーバー設定不要でメールを送信できます。

Written by Aaron de Mello Senior Engineering Manager

Reviewed by Caleb Geene

VerifiedCLI 3.1.1 · Gmail, Outlook, Yahoo · last tested April 11, 2026

Linux コマンドラインから SMTP サーバーなしでメールを送信するには?

ローカルのメール転送エージェントではなく、認証済みメール API 経由で送信する CLI を使います。Nylas CLI なら、Linux でのワークフローはインストール1回、認証1回、nylas email send コマンド1回で完了します。Postfix デーモンも sendmail キューも不要で、シェル履歴に SMTP パスワードが残ることもありません。

mail コマンドは 1977 年から Unix システムに搭載され、mailx は 1980 年代初頭から存在しますが、いずれも OAuth2 に対応していません。ここが問題になります:Google は 2024 年 9 月に Gmail の「安全性の低いアプリ」パスワードを無効化し、Microsoft は 2022 年 10 月に Exchange Online の基本認証を廃止しました。CLI ツールが OAuth2 トークンの更新を処理できない場合(Google の OAuth 2.0 ドキュメントによると Gmail アクセストークンは 3,600 秒ごとに期限切れ)、これらのプロバイダー経由で確実にメールを送信できません。

Nylas CLI はこれらをすべて回避します。Nylas API と直接通信し、OAuth2 トークンの更新、プロバイダーの抽象化、接続管理を API 側で処理します。一度認証すれば、72 以上のコマンドが Gmail、Outlook、Exchange、Yahoo、iCloud、IMAP でプラットフォームを問わず動作します。

「SMTP サーバーなしでメール送信」とは?

SMTP サーバーなしでメールを送信するとは、スクリプトがローカル MTA、リレーホスト、またはプロバイダーの SMTP ポート(25、465、587)に接続しないことを意味します。代わりに CLI は認証済み API を通じてポート 443 の HTTPS で送信します。これにより Postfix の設定、ブロックされた送信 SMTP ポート、アプリパスワード、シェルスクリプト内のリレー認証情報を回避できます。

これは SMTP がブロックされている、または維持する価値のない Linux サーバー、Ubuntu の cron ジョブ、GitHub Actions ランナー、AI サンドボックスに適しています。レポート、アラート、テストメッセージ、確認メールを送信するだけのワークフローなら、完全なメールサーバーの構築は不要な運用コストです。

Ubuntu コマンドラインからメールを送信するには?

Ubuntu コマンドラインからメールを送信するには、CLI をインストールし、メールボックスを一度認証して、bash、cron、systemd タイマー、または CI から nylas email send を呼び出します。apt install postfixmailutilssendmail、SMTP リレー設定は不要です。

1. インストール

Nylas CLI のインストールは macOS、Linux、WSL で 60 秒未満です。Homebrew が最速で、SHA-256 検証済みのビルド済みバイナリをダウンロードし、コンパイル不要です。Go オプションはソースからビルドし、Go 1.23 以降が必要です。どちらの方法でも nylas バイナリが自動的に $PATH に配置されます。

# macOS / Linux (Homebrew)
brew install nylas/nylas-cli/nylas

# またはソースからビルド(Go 1.23+ が必要)
go install github.com/nylas/cli/cmd/nylas@latest

2. メールボックスの認証

認証は 60 秒未満で完了します。dashboard-v3.nylas.com でアプリケーションを作成し、OAuth でメールボックスを接続し、API キーをコピーします。CLI は認証情報をシステムキーリング(macOS Keychain、GNOME Keyring、Windows Credential Manager)に暗号化して保存します。一度実行すれば、72 のコマンドすべてが同じ認証情報を使用します:

nylas auth config
# プロンプトが表示されたら API キーを貼り付け

# 接続を確認
nylas auth whoami
# => Authenticated as you@company.com (Google Workspace)

nylas auth config は認証情報をシステムキーリングに保存します。接続はいつでも確認できます:

Authentication Status

Current Account:
  Email: dev@example.com
  Provider: google
  Grant ID: d3f4a5b6-c7d8-9e0f-a1b2-c3d4e5f6g7h8
  Status: ✓ Valid

Configuration:
  Region: us
  Config Path: /home/dev/.config/nylas/config.yaml
  Secret Store: system keyring

3. メールを送信

nylas email send コマンドは Nylas API を通じて 1 回の呼び出しでメッセージを配信します。--to--subject--body を必須フラグとして受け取り、オプションの --cc--bcc で追加の受信者を指定できます。CLI は送信前に確認を求めますが、--yes を渡すとスキップできます。これはターミナルが接続されていないスクリプト環境で便利です。配信は通常 25 MB までのメッセージで 3 秒以内に完了します。

nylas email send \
  --to "colleague@company.com" \
  --subject "四半期レポートを添付" \
  --body "お疲れ様です。金曜日までに Q4 の数字をご確認ください。"

# 確認プロンプトをスキップ
nylas email send --to user@example.com --subject "簡単なメモ" --body "..." --yes

# CC と BCC
nylas email send \
  --to alice@team.com \
  --cc bob@team.com \
  --bcc manager@team.com \
  --subject "スプリント更新" \
  --body "全タスク予定通りです。"

送信成功後、CLI は配信を確認します:

✓ Email sent successfully

  Message ID: abc123def456
  To: jamie@example.com
  Subject: Deployment complete
  Sent at: 2026-03-25T15:30:00-04:00

Linux、macOS、Windows のコマンドラインからメールを送信できますか?

はい。CLI のインストールと認証が完了すれば、同じ nylas email send 構文が Linux、Ubuntu、macOS、Windows PowerShell、WSL、CI ランナーで動作します。コマンドラインからメール送信 Macコマンドラインからメール送信 Windows のような検索は、同じワークフローのプラットフォーム固有バージョンです:バイナリをインストール、メールボックスを認証、SMTP ではなく HTTPS で送信。

Linux コマンドラインから添付ファイル付きでメールを送信する必要がある場合は、このページの送信フローを使用し、インストール済みの CLI バージョンでサポートされるフラグについて nylas email send コマンドリファレンスを参照してください。重要な運用上の違い:メッセージはローカルの Postfix や SMTP リレーではなく、プロバイダー API を通じて送信されます。

ターミナルからの受信トレイアクセスは 4 つの操作をカバーします:最新メッセージの一覧表示、既読状態でのフィルタリング、キーワード検索、個別メッセージ本文の閲覧。nylas email list コマンドはデフォルトで最新 50 件のメッセージを返します。--unread を追加すると未読のみ、--limit で返却数を制御できます(リクエストごとに最大 200 件)。

# 最近のメールを一覧表示
nylas email list --limit 10

# 未読のみ
nylas email list --unread

# キーワードで検索
nylas email search "請求書" --limit 5

# 特定のメッセージを読む
nylas email read msg_abc123

# MIME ソースを表示
nylas email read msg_abc123 --mime

リストコマンドに --json を追加すると、RFC 8259 準拠の JSON が出力され、jq でフィルタリングしたり AI エージェントに直接渡したりできます。各メッセージオブジェクトには 12 のフィールドが含まれます:idgrant_idthread_idsubjectfromtosnippetdateunreadstarredfoldersobject

nylas email list --limit 1 --json
[
  {
    "id": "a1b2c3d4e5f6g7h8",
    "grant_id": "d3f4a5b6-c7d8-9e0f-a1b2-c3d4e5f6g7h8",
    "thread_id": "a1b2c3d4e5f6g7h8",
    "subject": "Re: Project Atlas — Q2 リリーススケジュール",
    "from": [{"name": "Sarah Chen", "email": "sarah@example.com"}],
    "to": [{"name": "Alex Rivera", "email": "alex@example.com"}],
    "snippet": "ステージング環境の準備が完了しました。金曜日のテスト結果を添付しています...",
    "date": "2026-03-25T14:22:18-04:00",
    "unread": true,
    "starred": false,
    "folders": ["INBOX"],
    "object": "message"
  }
]

5. メールの予約送信

メール予約はメッセージをサーバー側でキューに入れ、ターミナルを開いたままにせずに将来の時間に送信します。--schedule フラグは 2h30m のような相対オフセット、"tomorrow 9am" のような自然言語の時間、ISO 8601 タイムスタンプを受け付けます。予約メッセージは 1 分から 30 日の遅延をサポートし、配信ウィンドウ前に下書きを削除することで予約送信をキャンセルできます。

# 2 時間後に送信
nylas email send --to team@company.com --subject "リマインダー" --body "..." --schedule 2h

# 明日の朝に送信
nylas email send --to team@company.com --subject "スタンドアップ" --body "..." --schedule "tomorrow 9am"

# 特定の日付に送信
nylas email send --to client@example.com --subject "フォローアップ" --body "..." --schedule "2026-03-01 14:30"

6. 開封とクリックの追跡

開封・クリック追跡は 1x1 のトラッキングピクセルを埋め込み、リンクを書き換えて Nylas API がエンゲージメントイベントを記録します。--track-opens フラグでピクセル追跡を有効にし、--track-links で各 URL をリダイレクトで囲み、--track-label でフィルタリング用のキャンペーンタグを割り当てます。追跡イベントは受信者のアクションから 5 秒以内に発火し、message.openedmessage.link_clicked トリガーの Webhook ペイロードとして届きます。

nylas email send \
  --to prospect@company.com \
  --subject "提案書を添付" \
  --body "Q2 の提案書をお送りします。" \
  --track-opens \
  --track-links \
  --track-label "q2-outreach"

# 追跡イベントは Webhook で配信されます:
nylas webhook create \
  --url https://your-server.com/hooks \
  --triggers message.opened,message.link_clicked

7. GPG で署名と暗号化

GPG の署名と暗号化はネイティブに動作します — GPG キーリング以外の追加ツールは不要です。CLI は RFC 3156 PGP/MIME を実装し、署名でメッセージごとに約 200 ミリ秒、暗号化で約 400 ミリ秒のオーバーヘッドが加わります。初めて受信者に暗号化する際、公開鍵はキーサーバーから自動取得されます:

# GPG キーで署名
nylas email send --to legal@partner.com --subject "契約書" --body "..." --sign

# 受信者の公開鍵で暗号化(キーサーバーから自動取得)
nylas email send --to legal@partner.com --subject "契約書" --body "..." --encrypt

# 両方(最大のセキュリティに推奨)
nylas email send --to legal@partner.com --subject "契約書" --body "..." --sign --encrypt

# 受信したメッセージを復号して検証
nylas email read msg_xyz789 --decrypt --verify

鍵管理、トラブルシューティング、複数受信者への暗号化については、GPG 暗号化メールガイドをご覧ください。

8. AI スマートコンポーズ

スマートコンポーズは自然言語のプロンプトからメールの下書きを生成します。ターミナルを離れる必要はありません。nylas email smart-compose コマンドはプロンプトを Nylas AI エンドポイントに送信し、2 秒以内にフォーマットされた下書きを返します。--message-id を渡すと、特定のスレッドへのコンテキスト対応の返信を生成します。ai analyze サブコマンドは未読メッセージをスキャンし、要約、カテゴリ、緊急度レベルを返します。

# プロンプトから下書きを生成
nylas email smart-compose --prompt "会議のお礼と次のステップの確認"

# 特定のメッセージへの返信を生成
nylas email smart-compose --message-id msg_abc123 --prompt "招待を丁重に受諾"

# AI 受信トレイ分析
nylas email ai analyze --unread
# => 要約、カテゴリ、アクションアイテム、緊急度

9. スクリプティングと自動化

Nylas CLI を使ったシェルスクリプティングは、メール操作を組み合わせ可能なビルディングブロックに変えます。すべてのサブコマンドは --json をサポートし、jqawk、その他のツールにパイプできる構造化データを出力します。以下の例では、未読メッセージを数え、件名キーワードで緊急メールをマークし、CSV ファイルからパーソナライズされたメールを一括送信する朝の受信トレイサマリースクリプトを示します。CSV 送信間の 2 秒の sleep でデフォルトのレート制限(毎分 50 リクエスト)への到達を回避します。

# 朝の受信トレイサマリースクリプト
#!/bin/bash
echo "=== 受信トレイサマリー ==="
unread=$(nylas email list --unread --json | jq length)
echo "未読: $unread"

# 緊急チェック
nylas email list --unread --json \
  | jq '[.[] | select(.subject | test("urgent|asap|緊急"; "i"))]' \
  | jq 'length' \
  | xargs -I{} echo "緊急: {}"

# CSV から一括送信
while IFS=, read -r email name; do
  nylas email send \
    --to "$email" \
    --subject "$name さんへ" \
    --body "アカウントの準備が完了しました。" \
    --yes
  sleep 2
done < contacts.csv

10. AI エージェントへのパイプ

CLI 出力を AI エージェントにパイプすると、ターミナルがメール自動化レイヤーになります。すべての nylas email サブコマンドは --json をサポートし、エージェントが変換なしでパースできる RFC 8259 準拠の JSON を出力します。受信トレイデータをトリアージエージェントに渡したり、LLM で返信を生成したり、内蔵 MCP サーバーをインストールして Claude Code や Cursor などのツールが CLI コマンドを直接呼び出せるようにできます。

# エージェントが受信トレイをトリアージ
nylas email list --unread --json | agent triage --rules ./inbox-rules.yml

# エージェントが返信を下書き、CLI が送信
nylas email send \
  --to sarah@team.io \
  --subject "Re: フォローアップ" \
  --body "$(agent draft --context msg_a1f2)" \
  --yes

# 内蔵 MCP サーバーを起動(Claude、Cursor、VS Code 用)
nylas mcp install --assistant claude-code

Model Context Protocol (MCP) は AI アシスタントが CLI ツールを直接呼び出すことを可能にします。 MCP のセットアップとツール構成については、AI エージェントメールアクセスガイドをご覧ください。

11. Cron ジョブ、ヒアドキュメント、シェルネイティブ自動化

cron ベースのメール自動化は、常駐デーモンや GUI なしでスケジュールされたアラート、レポート、ヘルスチェックを送信できます。Bash のヒアドキュメントは複数行の本文の問題を解決します — cat <<'EOF' は引用符や改行をエスケープせずに任意のテキストを --body に渡します。CLI は成功時にコード 0、失敗時に非ゼロで終了するため、送信を if ! ブロックで囲むことで cron ジョブに信頼性の高いエラーハンドリングを提供します。一般的な夜間レポートの cron エントリは crontab に約 4 行を追加するだけです。

# シェルスクリプトでヒアドキュメントを使用して長いメール本文を処理
nylas email send \
  --to ops@company.com \
  --subject "夜間バックアップレポート" \
  --body "$(cat <<'EOF'
バックアップが正常に完了しました。

- クラスタ: prod-a
- 所要時間: 18m
- スナップショット経過: 24h
EOF
)" \
  --yes

cron ジョブでは、送信を if ! ブロックで囲むことで、エラーが黙って消えるのではなく表面化します。CLI は認証エラー、ネットワークタイムアウト、API レベルの拒否で終了コード 1 を返します。

# cron 対応の明示的エラーハンドリング
if ! nylas email send --to alerts@company.com --subject "ディスク警告" --body "ディスク使用率 > 90%" --yes; then
  echo "メール送信失敗" >&2
  exit 1
fi

12. mailx、sendmail、Postfix の置き換え

mailx、sendmail、または Postfix を Nylas CLI に置き換えると、ローカル MTA スタックを完全に排除できます。Postfix リレーには TLS 証明書の維持、メールキューの管理、長期稼働デーモンの監視が必要で、本番環境では /etc/postfix/ に約 15〜20 の設定ファイルが必要です。mailx コマンドは機能する MTA に依存し、sendmail の設定構文(sendmail.cf)は 1990 年代以来実質的に変わっていません。CLI はこれらすべてを 1 つのバイナリと API キーで置き換えます。

スクリプトが現在 mailx -s "件名" user@example.com にテキストをパイプしている場合、移行は簡単です:mailxnylas email send --to user@example.com --subject "件名" --body "$(cat)" に置き換えます。リレーなし、キューなし、設定変更後のデーモン再起動も不要です。


Nylas CLI と他の CLI メールツールの比較

機能mail / mailxmuttNylas CLI
メール送信可(MTA 必要)可(SMTP 必要)可(1コマンド)
受信トレイ閲覧ローカルのみ
Gmail OAuth2不可複雑内蔵
Microsoft 365不可複雑内蔵
GPG 署名/暗号化手動内蔵内蔵
カレンダーアクセス不可不可
JSON 出力不可不可可 (--json)
AI メール作成不可不可
MCP サーバー不可不可内蔵

次のステップ