Rikuo2000
@Rikuo2000 (Rikuo Tsuchida)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

フォームの入力内容の確認メール送信できない

解決したいこと

メールを送信すると下記の画面になります

例)
Flask でwebアプリを作ってみてる最中です
問い合わせフォームの内容をメールで送信する機能を作成する際にエラーが発生しました
解決方法を教えて下さい。

発生している問題・エラー

image.png

該当するソースコード

# loggingをインポート
import logging
import os

from email_validator import EmailNotValidError, validate_email

# Flaskクラスをインポート
from flask import (
    Flask,
    current_app,
    flash,
    g,
    redirect,
    render_template,
    request,
    url_for,
)
from flask_debugtoolbar import DebugToolbarExtension
from flask_mail import Mail, Message

# Flaskクラスをインスタンス化
app = Flask(__name__)
# secret_keyの追加
app.config["SECRET_KEY"] = "2AZSMss3p5QPbcY2hBssJ"
# ログレベルの設定
app.logger.setLevel(logging.DEBUG)

app.logger.debug("DEBUG")
app.logger.info("INFO")
app.logger.warning("WARNING")
app.logger.error("ERROR")
app.logger.critical("CRITICAL")

app.config["DEBUG_TB_INTERCEPT_REDIRECTS"] = False
toolbor = DebugToolbarExtension(app)

# URLと実行する関数をマッピング
@app.route("/")
def index():
    return "Hello,Flaskbook!"


@app.route("/hello/<name>", methods=["GET", "POST"], endpoint="hello-endpoint")
def hello(name):
    return f"Hello, {name}!"


@app.route("/name/<name>")
def show_name(name):
    return render_template("index.html", name=name)


with app.test_request_context():
    # /
    print(url_for("index"))
    # /hello/world
    print(url_for("hello-endpoint", name="world"))
    # /name/Rikuo?page=1
    print(url_for("show_name", name="Rikuo", page="1"))

ctx = app.app_context()
ctx.push()

print(current_app.name)

g.connection = "connection"
print(g.connection)

with app.test_request_context("/users?update=ture"):
    print(request.args.get("updated"))


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


@app.route("/contact/complete", methods=["GET", "POST"])
def contact_complete():
    if request.method == "POST":
        username = request.form["username"]
        email = request.form["email"]
        description = request.form["description"]
        is_valid = True

        if not username:
            flash("ユーザ名は必須です")
            is_valid = False

        if not email:
            flash("メールアドレスは必須です")
            is_valid = False

        try:
            validate_email(email)
        except EmailNotValidError:
            flash("メールアドレスの形式で入力してください")
            is_valid = False

        if not description:
            flash("問い合わせ内容は必須です")
            is_valid = False

        if not is_valid:
            return redirect(url_for("contact"))

        # メールを送る
        send_email(
            email,
            "お問い合わせありがとうございました。",
            "contact_mail",
            username=username,
            description=description,
        )

        flash("問い合わせ内容はメールにて送信しました。問い合わせありがとうございます。")

        return redirect(url_for("contact_complete"))

    return render_template("contact_complete.html")


def send_email(to, subject, template, **kwargs):
    """メールを送信する関数"""
    msg = Message(subject, recipients=[to])
    msg.body = render_template(template + ".txt", **kwargs)
    msg.html = render_template(template + ".html", **kwargs)
    mail.send(msg)


# Mailクラスのコンフィグを追加
app.config["MAIL_SERVER"] = os.environ.get("MAIL_SERVER")
app.config["MAIL_PORT"] = os.environ.get("MAIL_PORT")
app.config["MAIL_USE_TLS"] = os.environ.get("MAIL_USE_TLS")
app.config["MAIL_USERNAME"] = os.environ.get("MAIL_USERNAME")
app.config["MAIL_PASSWORD"] = os.environ.get("MAIL_PASSWORD")
app.config["MAIL_DEFAULT_SENDER"] = os.environ.get("MAIL_DEFAULT_SENDER")

mail = Mail(app)

自分で試したこと

きちんと読めてないだけかもしれませんが
エラー内容は見てみましたがわかりませんでした。
他に確認する必要があるページがあればおっしゃってください

0

No Answers yet.

Your answer might help someone💌