なぜメール送信は「思ったより複雑」なのか?──Flask×Resendで感じた手軽さと本番運用のギャップ

アイキャッチ画像

初めてWeb制作会社に入ったとき、先輩にこう言われたのを覚えています。

「メール送信って実はかなり複雑で、本番運用しようとするといろいろなことを考慮しないといけない」

当時はピンと来ていませんでしたが、最近FlaskでWebアプリの学習をしていた中で、ようやくその言葉の意味が腑に落ちました。

この記事では、私自身がFlaskでメール送信を試した際に感じた「思ったより複雑なメール処理」についての気づきと、それをシンプルに解決してくれたResendというサービスの紹介、そして実務レベルで考慮すべきことをまとめてみたいと思います。

Flaskの学習中にぶつかった「メール送信」の壁

現在、Flaskを使ってWebアプリケーション開発の自己学習を進めています。

使用しているのは2022年発行の参考書で、基本的なルーティングやテンプレートエンジン、ORMなどに加えて、メール送信機能についても触れられていました。

そこでは Gmail + アプリパスワード を使ったSMTPメール送信の手順が紹介されていたのですが、調べてみるとすでにこの方法は非推奨となっていました。

現在はGoogle APIとOAuth認証を組み合わせる方法が推奨されており、設定が煩雑で気軽に学習には取り入れづらい印象でした。

「Resend」という救世主

SMTP設定やOAuthの認証フローに悩む中、見つけたのが Resend というサービスです。

・APIベースでメール送信が可能

・無料プランでも検証に十分

・SMTP設定不要

・ドメイン認証も任意(本番利用時のみ)

という点が非常に魅力的で、「これならすぐ動かせそうだ」と思い、試してみることにしました。

Flask × Resend の実装概要

実装自体も非常にシンプルです。

1.Resendに無料登録し、APIキーを発行

2..env ファイルにキーを設定

3.宛先・件名・本文をJSONで送信

ほんの十数行のコードで、即座にメール送信が確認できました。

import resend

from flask import Flask

app = Flask(__name__)

resend.api_key = “your_resend_api_key”  # 実際は.envなどで管理

@app.route(“/send”)

def send_email():

    params: resend.Emails.SendParams = {

        “from”: “test <onboarding@resend.dev>”,

        “to”: [“user@example.com”],

        “subject”: “テストメール”,

        “html”: “<strong>Flaskからメール送信できました!</strong>”,

    }

    try:

        resend.Emails.send(params)

        return “メール送信に成功しました”

    except Exception as e:

        return f”送信エラー: {e}”

なぜ「メール送信」は複雑とされるのか?

冒頭の先輩の言葉を振り返ると、メール送信には以下のような本番環境ならではの課題があると実感しました:

1. なりすまし対策(SPF/DKIM/DMARC)

ドメイン認証を正しく設定しないと、送ったメールが迷惑メール判定される可能性が高まります。ResendなどではDNSレコードの設定を通してSPFやDKIMを有効にする必要があります。

【補足】

・SPF(Sender Policy Framework)

送信元IPが正当かを証明するためのDNS設定

・DKIM(DomainKeys Identified Mail)

メールにデジタル署名を付与して改竄されていないことを証明

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

SPFやDKIMの結果をどう扱うかを定めたポリシー

2. バウンス・配信エラー管理

送信先が存在しない/拒否されたなどの理由でメールが届かないことも多々あります。バウンスしたメールのログ収集や再送の設計も本番環境では必要です。

3. 遅延・スロットリングへの対応

大量メールを一括送信する際、送信先サーバ側でスロットリング(制限)がかかり、メールが遅れたり弾かれたりします。スケジューリングやリトライの仕組みも必要です。

4. セキュリティ

SMTPでのパスワード管理や、APIキーの漏洩、オープンリレーのリスクなど、セキュリティ面でも慎重な設計が求められます。

まとめ:学習はシンプルに、運用はしっかりと

今回Flask × Resendでメール送信を体験して、「学習用途としてはこれ以上ないほどシンプルな構成」だと感じました。

一方で、本番運用ではセキュリティ・信頼性・ログ管理といった要素をしっかり押さえる必要があるという気づきも得られました。

最後に:まずは気軽に試せる環境から

初心者がいきなりGmailのOAuth認証を扱うのはハードルが高いですが、ResendのようなモダンなメールAPIサービスを使えば、メール送信の仕組みそのものへの理解を深めるきっかけになります。

自己学習では「簡単に動く」ことを優先し、慣れてきたらセキュリティや認証の仕組みにも手を広げていく、という進め方が無理なくて良いなと思っています。