2016-07-22 15 views
0

このチュートリアル(https://www.boxcontrol.net/adding-contact-form-to-your-site-using-flask-and-python3.html)に従うことにしましたが、ユーザーが個人情報を入力し、私のGメールアカウント。しかし、フォームを送信した後、私は電子メールまたはエラーは受信しません。

最初に私がやったことは、ContactFormクラスを作成することでした。ユーザーがフォームを送信したときに電子メールを送信しないFlask-WTFフォーム

from flask_wtf import Form 
from wtforms import TextField, TextAreaField, SubmitField 
from wtforms.validators import InputRequired 

class ContactForm(Form): 
    name = TextField("Fullname", validators=[InputRequired('Please enter your name.')]) 
    email = TextField("Email", validators=[InputRequired("Please enter your email address.")]) 
    NoChildren = TextField("Number of children dependants (if applicable):", validators=[InputRequired("Please enter a subject.")]) 
    NoAdults = TextField("Number of adult dependants (if applicable):", validators=[InputRequired("Please enter a subject.")]) 
    travel = TextField("Will you be travelling alone?", validators=[InputRequired("Please enter a subject.")]) 
    marriage = TextField("What is your marital status?", validators=[InputRequired("Please enter a subject.")]) 
    nation = TextField("Current nationality(ies):", validators=[InputRequired("Please enter a subject.")]) 
    dob = TextField("Date of birth:", validators=[InputRequired("Please enter a subject.")]) 
    phone = TextField("Phone number:", validators=[InputRequired("Please enter a subject.")]) 
    nonukaddress = TextField("Your current non-UK address:", validators=[InputRequired("Please enter a subject.")]) 
    ukaddress = TextField("UK address:", validators=[InputRequired("Please enter a subject.")]) 
    history = TextField("Do you have any criminal history?", validators=[InputRequired("Please enter a subject.")]) 
    hadvisa = TextField("Have you ever had any other visas?", validators=[InputRequired("Please enter a subject.")]) 
    refusevisa = TextField("Have you been refused a visa before?", validators=[InputRequired("Please enter a subject.")]) 
    medical = TextField("Did you receive any medical treatment in the UK?", validators=[InputRequired("Please enter a subject.")]) 
    letter = TextField("Do you have a letter from a UK regulated financial institution confirming that original evidence of funds has been supplied?", validators=[InputRequired("Please enter a subject.")]) 
    sole = TextField("Are you the sole owner of the money?", validators=[InputRequired("Please enter a subject.")]) 
    additional = TextAreaField("Additional information/questions/requests:", validators=[InputRequired("Please enter a message.")]) 
    submit = SubmitField("Send") 

次に、フォーム用のHTMLテンプレートを作成しました。

{% block content %} 
    <h2>Contact</h2> 

    {% if success %} 
    <p>Thank you for your message. We'll get back to you shortly.</p> 

    {% else %} 
    {% for message in form.name.errors %} 
     <div class="flash">{{ message }}</div> 
    {% endfor %} 

    {% for message in form.email.errors %} 
     <div class="flash">{{ message }}</div> 
    {% endfor %} 

    <form action="{{ url_for('contact') }}" method=post> 
     {{ form.hidden_tag() }} 

     {{ form.name.label }} 
     {{ form.name }} 

     {{ form.email.label }} 
     {{ form.email }} 

     {{ form.NoChildren.label }} 
     {{ form.NoChildren }} 

     {{ form.travel.label }} 
     {{ form.travel }} 

     {{ form.marriage.label }} 
     {{ form.marriage }} 

     {{ form.nation.label }} 
     {{ form.nation }} 

     {{ form.dob.label }} 
     {{ form.dob }} 

     {{ form.phone.label }} 
     {{ form.phone }} 

     {{ form.nonukaddress.label }} 
     {{ form.nonukaddress }} 

     {{ form.ukaddress.label }} 
     {{ form.ukaddress }} 

     {{ form.history.label }} 
     {{ form.history }} 

     {{ form.hadvisa.label }} 
     {{ form.hadvisa }} 

     {{ form.refusevisa.label }} 
     {{ form.refusevisa }} 

     {{ form.parents.label }} 
     {{ form.parents }} 

     {{ form.medical.label }} 
     {{ form.medical }} 

     {{ form.letter.label }} 
     {{ form.letter }} 

     {{ form.sole.label }} 
     {{ form.sole }} 

     {{ form.ukbank.label }} 
     {{ form.ukbank }} 

     {{ form.additional.label }} 
     {{ form.additional }} 

     {{ form.submit }} 
    </form> 
    {% endif %} 
{% endblock %} 

私のメインフラスコファイルは、このように見えます。

from flask import Flask, render_template, request, flash 
from forms import ContactForm 
from flask_mail import Message, Mail 
import os 

mail = Mail() 

app = Flask(__name__) 

app.secret_key = 'development key' 

app.config["MAIL_SERVER"] = "smtp.gmail.com" 
app.config["MAIL_PORT"] = 465 
app.config["MAIL_USE_SSL"] = True 
app.config["MAIL_USERNAME"] = '[email protected]' 
app.config["MAIL_PASSWORD"] = '*******' 

mail.init_app(app) 

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


@app.route('/contact', methods=['GET', 'POST']) 
def contact(): 
    form = ContactForm() 

    if request.method == 'POST': 
    if form.validate() == False: 
     flash('All fields are required.') 
     return render_template('contact.html', form=form) 
    else: 
     msg = Message(form.subject.data, sender='[email protected]', recipients=['[email protected]']) 
     msg.body = """ 
     From:%s <%s>, 
      %s 
      """ % (form.name.data, form.email.data, form.message.data,form.NoChildren.data,form.travel.data,form.marriage.data, form.nation.data, form.dob.data, form.phone.data, form.nonukaddress.data, form.ukaddress.data, form.history.data, form.hadvisa.data, form.refusevisa.data, form.parents.data, form.medical.data, form.letter.data, form.sole.data, form.ukbank.data, form.additional.data) 
     mail.send(msg) 

     return render_template('contact.html', success=True) 

    elif request.method == 'GET': 
    return render_template('contact.html', form=form) 

if __name__ == '__main__': 
app.run() 

答えて

0

多くの可動部品がある瞬間に問題を解決してください。エラーが発生していない場合、私の最初の考えはあなたの電子メールが迷惑メール/スパムに送られることです。

静的な電子メールを送信するだけの新しいビューを作成した場合、正常に動作しますか?

@app.route('/testemail') 
def send_test_email(): 
    msg = Message('Title',sender='[email protected]', recipients=['[email protected]']) 
    msg.body('Hello...') 
    mail.send(msg) 

それは、あなたは問題があなたのコードの電子メール側に関し知っdoesn't--場合は、迷惑メールフォルダをチェックし、Flask-Mailで利用可能なMAIL_DEBUGオプションに探し始めることができるなど

一般的には、自分でSMTPリクエストを送信したり、Pythonライブラリを使って電子メールデータを送信したりして、残りのものを処理するようなサービスを使用する方が、より簡単で信頼性の高いサービスを使用できます。私は個人的にSendgridを使用していますが、同様のサービスを提供する数多くの企業があります。

0

エラーが表示されず、電子メールが送信されない場合は、MAIL_DEBUG=Trueと設定します。 Flask-Mailは、デバッグレベルがsetsmtplibモジュールを使用します。また、メールを初期化する前にconfigを更新してみてください。

app = Flask(__name__) 

app.config.update(dict(
    DEBUG = True, 
    MAIL_SERVER = 'smtp.gmail.com', 
    MAIL_PORT = 587, 
    MAIL_USE_TLS = True, 
    MAIL_USE_SSL = False, 
    MAIL_USERNAME = '[email protected]', 
    MAIL_PASSWORD = 'my_password', 
)) 

mail = Mail(app) 

thisを参照してください。

関連する問題