Kon's DX Lab - Case Study

Day 95|VPSからのメール送信ってどうするの?

Published on 2025-07-05

🔬 Case Study Summary
Problem

(ここに課題を記述)

Result

(ここに具体的な成果を記述)


Tech & Process

(ここに採用技術とプロセスを記述) コードを詳しく見る »

こんにちは、こんです🦊

「VPSでアプリ作ったけど、何かエラーがあったら誰が気づくんだろう…?」

そんな風に思ったこと、ありませんか?

Botが止まったり、ログにエラーが出たり。
Slack通知だけじゃ心もとないときに、古くて最強の通知手段が “メール” です。

でもいざPythonで smtplib を書いてみると、
「あれ?届かない?」問題に必ずハマるのがこの世界の伝統芸。

今回は、

✅ smtplib で届かない体験をあえてしてみる
✅ そして SendGrid に切り替えて「届く!」を実感する
✅ VPSで小さな監視メールやお問い合わせ通知を自分で作れる

ここまでを作っていきます🦊

「VPS×メール」は地味だけど、
小さいチーム開発でも一人の開発でも、通知があるだけで安心感がケタ違いです。

送れない地獄から抜けて「届く」を作ってみます🦊✨

1. 導入:この記事でできるようになること

今回は「VPSからメール通知を送る」超基本の方法をやってみます。

✅ Pythonの smtplib を動かしてみる
✅ VPSでメールが届かない“あるある”を体験して学ぶ
SendGrid を使って「ちゃんと届く方法」に切り替える

💡 そもそも、なぜメール送信がいるの?

  • アプリのエラー通知を自分に送れると心強い

  • お問い合わせフォームの送信結果を自分宛にメールで受け取れる

  • Slack通知と合わせて、最後の保険にできる

「VPS上で動くアプリやBotが誰にも言わずに止まっていた…」
という悲劇を防ぐのに、メール通知は超役立ちます!


2. 背景・基礎知識

🔹 Pythonでメール送るってどうやるの?

Pythonには smtplib という標準ライブラリがあります。

これを使うと、GmailなどのSMTPサーバーにアクセスしてメールを送るコードが書けます。

🔹 なんで最初に smtplib を試すの?

  • 追加ライブラリ不要ですぐ動く

  • 「Python メール送信」で検索するとほぼ smtplib の例が出てくる

なので「これで十分だろう」と思って試してみましたが…。

🔹 でも届かない問題

実際にVPS上で smtplib から Gmail に接続して送ってみると、
Gmail側が「怪しい送信者」と判断してブロックするのがほとんどです。

  • VPSのIPが逆引きできない

  • 認証(SPF/DKIM)が整っていない

  • Gmailは「パスワードだけで送信」を廃止している

これで「届かない or スパム扱い」が鉄板の落とし穴。


3. 実践パート

✅ ステップ1|ダメ元で smtplib を体験する

まずは動作確認としてローカル or VPSで試すのは大事。

import smtplib
from email.mime.text import MIMEText

# Gmailアカウント情報
gmail_user = "あなたのメール@gmail.com"
gmail_pass = "アプリパスワード"

# メール本文
msg = MIMEText("テスト送信です")
msg["Subject"] = "テストメール"
msg["From"] = gmail_user
msg["To"] = "送りたい相手のメールアドレス"

# SMTPサーバーに接続
with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server:
    server.login(gmail_user, gmail_pass)
    server.send_message(msg)

✅ この時点で多くの人は
「ローカルでは送れる → VPSで送ると届かない or スパム行き」
を体験します。

✅ ステップ2|SendGridに切り替える理由

だからこそ、個人でSMTP設定を整えるより
SendGridのような配信サービスを中継するのが一番安全です。

🔹 SendGridとは?

SendGrid(センドグリッド) は、
世界中で使われている「メール配信専門のクラウドサービス」です。

いわゆる SMTPサーバーAPI送信 を代行してくれるので、
あなた自身が複雑なメールサーバーの設定をしなくても、
認証済みの安心な仕組みでメールを送れる のが特徴です。


  • 「VPSからメールを送りたいけど、自分でメールサーバー建てるのはハードル高い…」

  • 「GmailやOutlookに直送するとスパム扱いされて届かない…」

こういう人のために、送信基盤をまるっと貸してくれるのがSendGridです!


🔹 無料で使えるの?

はい!
SendGridには 無料プラン(Free Tier) があります✨

✅ 1日あたり100通まで送信可能
✅ クレジットカード登録はいるけど、従量課金は発生しない
✅ APIキーを発行してすぐ試せる


なので、
個人の小規模なVPS通知・テスト開発・フォーム送信には十分


💡 ただし:
無料枠を超えると課金が発生するので、商用で大量送信する場合は有料プランにアップグレードする必要があります。


🔹 結局どう便利?

  • VPS → SendGrid経由 → 相手の受信箱 に届く

  • SPF/DKIMなどの送信認証を自前で組まなくてOK

  • Pythonの公式ライブラリがあり、すぐコードに組み込める


なので、
「自分でSMTPサーバーを全部管理するのはしんどい」という人の99%はSendGridを使えばOK!
というくらい定番の仕組みです✨

✅ ステップ3|SendGridでちゃんと届く形にする

import os
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail

def send_via_sendgrid(to_email, subject, content):
    message = Mail(
        from_email="yourname@example.com",
        to_emails=to_email,
        subject=subject,
        html_content=content
    )

    sg = SendGridAPIClient(os.environ["SENDGRID_API_KEY"])
    response = sg.send(message)
    print(response.status_code)

# 送信テスト
send_via_sendgrid(
    "送りたい相手のメールアドレス",
    "SendGridテスト",
    "<p>ちゃんと届く!</p>"
)

.env に必ず

SENDGRID_API_KEY=xxxx

を入れておきましょう!


4. つまずきポイントと対処法(FAQ)


5. まとめと次回予告

今回は、

✅ smtplib で「届かない体験」をしてから
✅ SendGridなど外部サービスで届く形にシフト

という「ハマりがちな落とし穴と解決策」を整理しました!

次は、送信通知をWebhookやSlack連携と組み合わせる 実践を予定しています🦊


#VPS #Python #sendgrid #smtplib