flask_mailでフォームからgmailに送信しよう

python

たまにはエンジニアらしくしっかりした記事を

というわけでflaskといえば巷で大流行Pythonのお手軽フレームワークでございます。

環境構築等はここでは記載しませんのであしからず・・・

今回はフォーム入力した内容をGmailに送信する

といった内容です。

コード関連以外に用意するものは送信用と受信用(確認用)のgmailアカウント

<script language="JavaScript" type="text/JavaScript">
    function check(){
        if(window.confirm('送信してよろしいですか?')){ 
    return true;
    }
    else{
        window.alert('キャンセルされました'); 
        return false; /
    }
}
</script>

<form method="POST" enctype="multipart/form-data" onSubmit="return check()">
        <div class="field">
            <div for="name">お名前</div>
            <input id="students_form" type="text" name="name" placeholder="あなたのお名前を入力してください" required title="must be alphanumeric in 6-12 chars">
        </div>
        <div>
            <div for="league" required>好きなリーグは?</div>
            <select name="league" required>
                <option value="">選んでね</option>
                <option value="プレミア">イングランドプレミアリーグ</option>
                <option value="リーガ">ラリーガサンタンデール</option>
                <option value="ブンデス">ブンデスリーガ</option>
                <option value="セリエ">セリエA</option>
                <option value="リーグアン">リーグアン</option>
            </select>
        </div>
        <div>
            <div for="message" required>自由記載</div>
            <textarea name="about" required placeholder="好きなことを書いてね" onkeyup="count_down(this);"></textarea>
        </div>
        <button type="submit">送信</button>
</form>

CSS等は割愛。

なんてことはないtextフォームとプルダウン選択とtextareaのフォームに記載していくあるあるフォーム

from flask_mail import Mail
from email.mime.text import MIMEText
from flask import Flask, render_template, request
import smtplib

app = Flask(__name__)

@app.route("/form", methods=['GET','POST'])
def form():
    if request.method == "POST":
        from_email = 'send@gmail.com'
        to_email = 'check@gmail.com'
        account = 'send@gmail.com'
        password = 'password'

        subject = 'テスト送信'

        name =  request.form.get('name')
        year = request.form.get('league')
        about = request.form.get('about')
        bodytext = "名前:" + name + "\n" + "好きなリーグ:" + year + "\n" + "自由記載:" + about

        server = smtplib.SMTP('smtp.gmail.com', 587)
        server.starttls()
        server.login(account, password)

        msg = MIMEText(bodytext)
        msg['subject'] = subject
        msg['From'] = from_email
        msg['To'] = to_email

        server.send_message(msg)
        server.close()
        return render_template('send.html', success=True)
    return render_template("form.html")

@app.route("/send")
def send():
    return render_template('send.html')

使用ライブラリはflask導入の上でほぼほぼ入ってくるもので、ここでは割愛

ポイントはメールを送信するうえで送信用のアカウントにログインして

そこからメールを送信するイメージなので、23行目以降の工程が必要となる

outlook等を使用したい場合は

“SMTP” “outlook”で検索すれば必要な設定値が確認できます。

といった具合にsmtplibやMIMETextを使用してメール本文を構築

送信後の画面は↓

<div class="send_main">
    <h1>メッセージを送信しました</h1>
    <input class="button-glow" type="button" value="戻る" onclick="history.back()" />
</div>

うまいこといけば

テスト送信

名前:XXXXXXXXX

好きなリーグ:XXXXXXX

自由記載:あああああああ

みたいな感じでメールが届きます。

ちなみに私はイングランドプレミアリーグ贔屓です。