Python/Flask HTML 表单发送电子邮件

标签 python forms flask smtp

我对编程非常陌生,尤其是 Python/Flask。 我正在尝试将 HTML 表单提交到指定的电子邮件地址。 这两天我一直在尝试一切,但都没有成功。 当我部署到 Heroku 时,一切都很好,但表单不起作用。

这是我的脚本.py

from flask import Flask, render_template, request, flash
from form import ContactForm
from flask_mail import Mail, Message
import smtplib
from dotenv import load_dotenv   #for python-dotenv method
load_dotenv()
import os

OWN_EMAIL = os.environ.get("OWN_EMAIL")
OWN_PASSWORD = os.environ.get("OWN_PASSWORD")

print(os.environ.get("OWN_EMAIL"))
print(os.environ.get("OWN_PASSWORD"))

app = Flask(__name__)

@app.route('/')
@app.route('/home', methods=["GET", "POST"])
def home():
    if request.method == "POST":
        data = request.form
        data = request.form
        send_email(data["name"], data["email"], data["subject"], data["message"])
        return render_template("landing.html", msg_sent=True)
    return render_template("landing.html", msg_sent=False)


def send_email(name, email, phone, message):
    email_message = f"Subject:New Message\n\nName: {name}\nEmail: {email}\nSubject: {subject}\nMessage:{message}"
    with smtplib.SMTP("smtp.zoho.eu") as connection:
        connection.starttls()
        connection.login(OWN_EMAIL, OWN_PASSWORD)
        connection.sendmail(OWN_EMAIL, OWN_EMAIL, email_message)

if __name__=="__main__":
    app.run(debug=True)

这是我的landing.html

  <div class="col-lg-6">
    <form action="{{ url_for('home') }}" name="sentMessage" method="post" class="contactForm" novalidate>
      <div class="row">

        <div id="sendmessage">Your message has been sent. Thank you!</div>
        <div id="errormessage"></div>

        <div class="col-lg-6">
          <div class="form-group contact-block1">
            <input type="text" name="name" class="form-control" id="name" placeholder="Your Name" data-rule="minlen:4" data-msg="Please enter at least 4 chars" />
            <div class="validation"></div>
          </div>
        </div>

        <div class="col-lg-6">
          <div class="form-group">
            <input type="email" class="form-control" name="email" id="email" placeholder="Your Email" data-rule="email" data-msg="Please enter a valid email" />
            <div class="validation"></div>
          </div>
        </div>

        <div class="col-lg-12">
          <div class="form-group">
            <input type="text" class="form-control" name="subject" id="subject" placeholder="Subject" data-rule="minlen:4" data-msg="Please enter at least 8 chars of subject" />
            <div class="validation"></div>
          </div>
        </div>

        <div class="col-lg-12">
          <div class="form-group">
            <textarea class="form-control" name="message" rows="8" data-rule="required" data-msg="Please write something for us" placeholder="Message"></textarea>
            <div class="validation"></div>
          </div>
        </div>

        <div class="col-lg-12">
          <input type="submit" class="btn btn-defeault btn-send" value="Send message">
        </div>

      </div>
    </form>
  </div>

非常感谢任何意见。

谢谢

最佳答案

从 route 删除第一个功能。应该是:

@app.route('/home')
def home():
    if request.method == "POST":
        data = request.form
        data = request.form
        send_email(data["name"], data["email"], data["subject"], data["message"])
        return render_template("landing.html", msg_sent=True)
    return render_template("landing.html", msg_sent=False)

同时更改此行:

<form action="{{ url_for('home') }}"

对此:

<form action="/home" 

在你的html文件中

关于Python/Flask HTML 表单发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66138450/

相关文章:

python - 如何在 EC2 上制作运行 flask - 允许从外部访问?

python - 对象列表到 numpy 数组

javascript - 获取 2 个输入字段中的舍入值,这些值会在其中之一更新时更新

javascript - 提交表单 不提交表单

forms - symfony2文本字段自定义标签

python - 服务器使用 Flask 和 Tornado 发送事件

python - 创建对象而不调用类

Python 和 Numba : incorrect checksum for freed object

python - 如何根据 flask 中的测试和生产环境分配设置?

python - Flask:忽略 'category' 参数的 Flash 函数