← PC・IT用語集へ戻る

SMTP

Simple Mail Transfer Protocol
network beginner
インターネット経由でメールを送信したり、別のサーバーへ転送したりするための標準的なプロトコル。
SMTP (Simple Mail Transfer Protocol)

概要(サマリー)

SMTP(Simple Mail Transfer Protocol / エスエムティーピー)とは、インターネット上で電子メールを送信したり、他のメールサーバーへ転送したりするときに使われる共通のルール(プロトコルである。
郵便の仕組みにたとえられる。ユーザーがメールアプリで送信ボタンを押すことは「郵便ポストに手紙を投函すること」であり、その後、郵便局から相手先の郵便局へ郵便車で手紙を運ぶ(転送する)役割を担うのがSMTPである。メールを無事に相手へ届けるための「配送ルートのルール」として、世界中で広く使われている。

詳細解説

SMTPとは何か

SMTPは、メールの「送信」と「転送」に特化した通信方式である。
私たちがメールを送信すると、メールは即座に相手のパソコンに直接届くわけではない。まず自分が契約しているメールサーバー(SMTPサーバー)に送られ、そこから相手側のメールサーバーへバケツリレーのように転送されていく。この一連のやり取りを正しく行うための手順を定めたのがSMTPである。

メールの送受信の流れ(SMTP・POP3・IMAPの違い)

メールの仕組みは、「送信」と「受信」で異なるプロトコルを組み合わせて実現している。

  • SMTP(送信・転送):
    自分のパソコンから送信メールサーバーへメールを送るとき、および送信サーバーから相手の受信メールサーバーへメールを転送するときに働く。
  • POP3 / IMAP(受信):
    相手の受信サーバーに届いたメールを、相手のパソコンやスマホに引っ張ってきて「受信」するときに働く。

SMTPとポート番号(ポートの使い分け)

SMTP通信を行う際には、接続の窓口となるポート番号を用途やセキュリティに応じて使い分ける。

  1. 25番ポート(標準SMTP):
    メールサーバー同士がメールを転送し合うためのポート。セキュリティ対策(迷惑メール送信防止)のため、個人用回線からはこのポートでの送信がプロバイダによって遮断されていることが多い(25番ポートブロック)。
  2. 587番ポート(サブミッションポート):
    ユーザーがメールアプリからメールを送信(SMTPサーバーに預ける)する際に使われるポート。送信時にユーザー名とパスワードによる認証(SMTP認証)を必須とすることで、スパムメールの踏み台にされるのを防ぐ。
  3. 465番ポート(SMTPS):
    通信内容をはじめから強力に暗号化してメールを送信するためのセキュアなポート。

なりすましメール対策(SPF・DKIM・DMARC)

SMTPは「送信元アドレス(From)を自由に書ける」という仕様のため、悪意ある第三者が有名企業を装ってメールを送る「なりすまし(フィッシング)」の温床となってきた。
これを防ぐために、現在は3つの仕組みを組み合わせた認証技術が普及している。

  • SPF(Sender Policy Framework): 「このドメインのメールは〇〇のサーバーからしか送らない」とDNSに登録する仕組み。
  • DKIM(DomainKeys Identified Mail): 送信メールに電子署名を付与し、改ざんされていないことを受信側が検証できる仕組み。
  • DMARC(Domain-based Message Authentication): SPFやDKIMの検証結果に基づき「怪しければ隔離・拒否する」ポリシーをドメインに設定する仕組み。

AIコーディングとの関係

Webサイトにお問い合わせフォームやユーザー登録機能を実装する際、システムから自動でメール(確認メールなど)を送信するプログラム(送信機能)を書く必要がある。

AIコーディングを利用することで、各プログラミング言語に合わせたメール送信の実装コードを簡単に取得できる。

  • 送信プログラムの生成指示:
    AIに対して、「Node.jsNodemailer ライブラリを使って、外部のSMTPサーバー(GmailやSendGridなど)経由でメールを送信するJavaScriptのコードを書いて」と指示する。
    これにより、ポート番号の設定やSMTP認証を組み込んだ、実用的なコードが即座に生成される。

Node.js(Nodemailer)によるSMTP送信の例(AI生成):

const nodemailer = require('nodemailer');

// SMTPサーバーの接続設定
const transporter = nodemailer.createTransport({
  host: 'smtp.example.com',
  port: 587, // セキュアな送信ポート
  secure: false, // TLSを使用(587番の場合は通常false)
  auth: {
    user: process.env.SMTP_USER, // 環境変数から認証情報を読み込む
    pass: process.env.SMTP_PASS
  }
});

// 送信メールの内容
const mailOptions = {
  from: '"送信元" <sender@example.com>',
  to: 'receiver@example.com',
  subject: 'テストメール',
  text: 'これはSMTP経由で送信された自動メールです。'
};

// メール送信実行
transporter.sendMail(mailOptions, (error, info) => {
  if (error) {
    return console.log('送信エラー:', error);
  }
  console.log('メールが送信されました:', info.messageId);
});

よくある勘違い

SMTPはメールの受信も行うプロトコル?

行わない。
SMTPはあくまで「手紙を届ける(送信・転送)」ことしかできない。郵便局の私書箱(受信サーバー)に届いたメールを自宅に持ち帰って開封(受信)するには、POP3やIMAPという別のプロトコルが必要となる。

送信元のメールアドレスは絶対に偽装できない?

実は簡単に偽装できてしまう。
初期のSMTP(1980年代)はセキュリティが考慮されておらず、「送信元アドレス(From)」を自由に書き換えて送信できる仕様だった。これが「なりすましメール(迷惑メール)」の温床となった。
現在では、送信元のドメイン情報と送信元IPアドレスを照合して本物かを確かめる仕組み(SPF, DKIM, DMARCなど)をサーバー側に導入することで、なりすましを防ぐ対策が一般化している。

Gmailなどのメールサービスを使えばSMTPの知識は不要?

Webメール(GmailやOutlookなど)を個人で使うだけならその通りである。
しかし、Webアプリやサービスから「自動送信メール(会員登録の確認メール、パスワードリセットメール、購入完了メールなど)」を送る機能を実装する場合、必ずSMTPの設定が必要になる。また、自社のメールサーバーを運用する場合やメール配信サービス(SendGrid、Amazon SES等)のAPIを使う場合もSMTPの知識が役立つ。開発者として必ず知っておくべきプロトコルの一つである。

まとめ

  • SMTPは、電子メールを送信・転送するための世界標準のルール(プロトコル)。
  • 送信・転送はSMTPが担当し、受信はPOP3やIMAPという別のプロトコルが担当する。
  • 迷惑メール防止のため、現代は認証を必須とする587番ポートや暗号化を行う465番ポートが使われる。
  • AIにコードを生成してもらう際は、パスワードなどの認証情報をソースコードに直書きせず、環境変数に分けるように指示することが重要。

情報ソース

より詳しくAIに聞いてみよう

  • メールの送受信で使われる「SMTP」と「POP3」および「IMAP」の違いを、郵便局やポストの例えを用いて分かりやすく整理してください。
  • メールのなりすましを防ぐためのドメイン認証技術(SPF、DKIM、DMARC)の仕組みと重要性について教えてください。
  • Pythonの標準ライブラリ smtplib を使って、SSL/TLSで安全にSMTPメールを送信するコード例を教えてください。
  • Webフォームからの大量の自動送信メールを確実にユーザーへ届けるために、自前のサーバーではなく「SendGrid」や「Amazon SES」といった外部メール配信SaaSを使うメリットを教えてください。
  • SMTP接続テストをターミナルコマンドプロンプトから「telnet」コマンド等を使って手動で行う方法を教えてください。