メールの流れ
メールの送信から受信までの流れは、以下のステップで構成されています。
-
メールの作成と送信
ユーザーがメールアプリやウェブメールを使ってメールを作成し、送信ボタンを押します。 -
送信サーバー(SMTPサーバー)による処理
メールは、送信側のSMTP(Simple Mail Transfer Protocol)サーバーに送られます。 -
ドメイン名を基に受信サーバーを特定
送信サーバーがDNSを利用して、メールアドレスのドメインに対応する受信サーバーを見つけます。 -
メールの転送
送信サーバーが受信サーバーにメールを転送します。 -
受信サーバー(POP/IMAPサーバー)に保存
メールは受信サーバーに保存され、受信者がアクセスできる状態になります。 -
受信者によるメールの取得
受信者がメールクライアントを通じてPOPまたはIMAPを使ってメールを取得します。
メールの送受信に使われる主なプロトコル
SMTP(Simple Mail Transfer Protocol)
-
役割
- メールの送信や転送に使用されます
-
仕組み
- クライアントから送信サーバーへ、または送信サーバーから受信サーバーへメールを転送します
-
ポート番号
- 通常はポート25、587、または465(SSL/TLS)を使用します
POP3(Post Office Protocol)
-
役割
- 受信者がサーバーからメールをダウンロードするためのプロトコルです
-
特徴:
- メールをローカルに保存します
- サーバー上のメールは削除されることが一般的です
-
ポート番号
- 通常はポート110、または995(SSL/TLS)を使用します
IMAP(Internet Message Access Protocol)
-
役割
- サーバー上でメールを管理し、複数デバイスで同期可能にします
-
特徴
- メールはサーバー上に残ります
- スマートフォンやPCなど、複数デバイスで同じメールボックスを利用できます
-
ポート番号
- 通常はポート143、または993(SSL/TLS)を使用します
メール送受信の安全性を高める技術
1. 暗号化
TLS(Transport Layer Security)
- 通信内容を暗号化して第三者による傍受を防ぎます
- SMTP、POP3、IMAPで対応可能です
2. 認証
SPF(Sender Policy Framework)
SPFは、送信者のドメインが正当なメールサーバーから送信されたものであるかを検証するための仕組みです。
仕組み
-
ドメインのDNS設定に、どのメールサーバーからメールを送信するかを記述した SPFレコード を追加します
- 例:
v=spf1 ip4:192.0.2.0/24 include:example.com ~all
-
v=spf1
: SPFバージョン1を示す -
ip4:192.0.2.0/24
: 指定されたIPアドレス範囲から送信されたメールを許可 -
include:example.com
: 他のドメインのSPF設定を参照 -
~all
: これ以外のメールは「ソフトフェイル」(弱い拒否)扱い
-
- 例:
-
受信サーバーが、送信元IPアドレスとSPFレコードを照合します
- 一致すれば正当と見なし、不一致ならスパムメールや詐欺メールの可能性が高いと判断します
メリット
- なりすましメール(スプーフィング)の防止
- ドメインの信頼性向上
DKIM(DomainKeys Identified Mail)
DKIMは、電子署名を用いてメールの送信者の正当性とメール内容の改ざん防止を検証する仕組みです。
仕組み
-
送信サーバーがメールに電子署名を追加
- 署名は、送信元ドメインが保有する秘密鍵を使って生成されます
-
DNSに公開鍵(DKIMレコード)を公開
- 例:
default._domainkey.example.com
に以下のような公開鍵が登録されるv=DKIM1; k=rsa; p=MIGfMA0GCSqG...
- 例:
-
受信サーバーが署名を検証
- メールに付加された署名を元に、DNSから公開鍵を取得し、署名の整合性をチェックします
- 正当であれば、送信者がそのドメインに属する正規のメールサーバーであることが確認されます
メリット
- メール内容の改ざんを防止
- 送信者の信頼性を証明
DMARC(Domain-based Message Authentication, Reporting, and Conformance)
DMARCは、SPFとDKIMを組み合わせて、送信者のドメインを厳密に検証し、メールの処理方法を指示するための仕組みです。
仕組み
-
ドメインのDNSに DMARCポリシー を追加
- 例:
_dmarc.example.com
v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com
-
v=DMARC1
: DMARCのバージョン -
p=quarantine
: SPFやDKIMが失敗したメールを隔離- 他に
none
(無視)、reject
(拒否)も指定可能
- 他に
-
rua=mailto:dmarc-reports@example.com
: 検証結果のレポート送信先
-
- 例:
-
SPFやDKIMの検証結果を元に、メールを処理
- SPFまたはDKIMのいずれかが失敗し、ポリシーに従わない場合、メールを隔離または拒否します
-
メール検証結果のレポートを送信
- メールの検証状況を管理者に通知します
メリット
- SPFとDKIMを統合して信頼性を向上
- フィッシングやスパムメールを強力に防止
- 検証結果のレポートで運用状況を把握可能
SPF・DKIM・DMARCの関係
-
SPF
- 送信元IPアドレスの正当性を検証する
-
DKIM
- メールの署名を使って内容が改ざんされていないか確認
-
DMARC:
- SPFとDKIMを組み合わせて検証し、不正メールへの対応方針を明示
GoでSMTPを使ったメール送信サンプルコード
以下は、Go言語でSMTPを使用してメールを送信するサンプルコードです。
package main
import (
"fmt"
"net/smtp"
)
func main() {
// SMTPサーバーの設定
smtpHost := "smtp.gmail.com"
smtpPort := "587"
smtpUser := "ここに自分のGmailアカウント名@gmail.com"
smtpPass := "ここにSMTP送信用パスワード"
// 送信者と受信者のメールアドレス
from := "ここに自分のGmailアカウント名@gmail.com"
to := "ここに自分のGmailアカウント名@gmail.com"
// メールの件名と本文
subject := "【TEST】件名が入ります"
body := "本文です。"
// メールのメッセージ
message := []byte("To: " + to + "\n" + "Subject: " + subject + "\n\n" + body)
// SMTP認証情報
auth := smtp.PlainAuth("", smtpUser, smtpPass, smtpHost)
// メール送信
err := smtp.SendMail(smtpHost+":"+smtpPort, auth, from, []string{to}, message)
if err != nil {
fmt.Println("エラー:", err)
return
}
fmt.Println("送信成功!")
}
送信成功!