0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

メールの流れ

メールの送信から受信までの流れは、以下のステップで構成されています。

  1. メールの作成と送信
    ユーザーがメールアプリやウェブメールを使ってメールを作成し、送信ボタンを押します。

  2. 送信サーバー(SMTPサーバー)による処理
    メールは、送信側のSMTP(Simple Mail Transfer Protocol)サーバーに送られます。

  3. ドメイン名を基に受信サーバーを特定
    送信サーバーがDNSを利用して、メールアドレスのドメインに対応する受信サーバーを見つけます。

  4. メールの転送
    送信サーバーが受信サーバーにメールを転送します。

  5. 受信サーバー(POP/IMAPサーバー)に保存
    メールは受信サーバーに保存され、受信者がアクセスできる状態になります。

  6. 受信者によるメールの取得
    受信者がメールクライアントを通じて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は、送信者のドメインが正当なメールサーバーから送信されたものであるかを検証するための仕組みです。

仕組み
  1. ドメインの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: これ以外のメールは「ソフトフェイル」(弱い拒否)扱い
  2. 受信サーバーが、送信元IPアドレスとSPFレコードを照合します

    • 一致すれば正当と見なし、不一致ならスパムメールや詐欺メールの可能性が高いと判断します
メリット
  • なりすましメール(スプーフィング)の防止
  • ドメインの信頼性向上

DKIM(DomainKeys Identified Mail)

DKIMは、電子署名を用いてメールの送信者の正当性とメール内容の改ざん防止を検証する仕組みです。

仕組み
  1. 送信サーバーがメールに電子署名を追加

    • 署名は、送信元ドメインが保有する秘密鍵を使って生成されます
  2. DNSに公開鍵(DKIMレコード)を公開

    • 例: default._domainkey.example.com に以下のような公開鍵が登録される
      v=DKIM1; k=rsa; p=MIGfMA0GCSqG...
      
  3. 受信サーバーが署名を検証

    • メールに付加された署名を元に、DNSから公開鍵を取得し、署名の整合性をチェックします
    • 正当であれば、送信者がそのドメインに属する正規のメールサーバーであることが確認されます
メリット
  • メール内容の改ざんを防止
  • 送信者の信頼性を証明

DMARC(Domain-based Message Authentication, Reporting, and Conformance)

DMARCは、SPFとDKIMを組み合わせて、送信者のドメインを厳密に検証し、メールの処理方法を指示するための仕組みです。

仕組み
  1. ドメインの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: 検証結果のレポート送信先
  2. SPFやDKIMの検証結果を元に、メールを処理

    • SPFまたはDKIMのいずれかが失敗し、ポリシーに従わない場合、メールを隔離または拒否します
  3. メール検証結果のレポートを送信

    • メールの検証状況を管理者に通知します

メリット

  • SPFとDKIMを統合して信頼性を向上
  • フィッシングやスパムメールを強力に防止
  • 検証結果のレポートで運用状況を把握可能

SPF・DKIM・DMARCの関係

  1. SPF
    • 送信元IPアドレスの正当性を検証する
  2. DKIM
    • メールの署名を使って内容が改ざんされていないか確認
  3. 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("送信成功!")
}
送信成功!
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?