Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending email using flask

I am using flask to send emails to user who submits a form in a contact page.

I have tried to test it myself but even If i fill the whole form. Every time I hit submit, I get a validation error saying that I must fill in the form. In my log it says I get a 200, which means the post was a success.

Here is the code:

routes.py

from flask import Flask, render_template, request, flash
from forms import ContactForm
from flask.ext.mail import Message, Mail


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 = Flask(__name__)
app.secret_key = 'development key'

@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]")
      msg.body = """
      From: %s <%s>
      %s
      """ % (form.name.data, form.email.data, form.message.data)
      mail.send(msg)

      return 'Form posted.'

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

Forms.py

from flask.ext.wtf import Form
from wtforms import Form, TextField, TextAreaField, SubmitField, validators, ValidationError

class ContactForm(Form):
  name = TextField("Name", [validators.Required("Please Enter Your Name")])
  email = TextField("Email",[validators.Required("Please enter your email address"), validators.email("Please enter your email address")])
  subject = TextField("Subject", [validators.Required("Please enter a subject.")])
  message = TextAreaField("Message", [validators.Required("Please enter a message.")])
  submit = SubmitField("Send")
like image 712
Richard Bustos Avatar asked Nov 12 '22 19:11

Richard Bustos


1 Answers

here is an example:

<form action="mailto:[email protected]" method="post" enctype="text/plain">
<tr>
    <td>Code name</td>
    <td><input type='text' name='codename' placeholder="name your code" size=20 /></td>
</tr>
    <tr>
        <td>Name</td>
        <td><input type='text' name='name' maxlength=20 size=20 /></td>
    </tr>
        <tr>
            <td>Code</td><br/>
            <td><textarea name='code' rows=4 cols=50></textarea></td>
        </tr>
            <tr>
                <td></td>
                <td><input type='submit' value='Submit Python Code' /></td>
            </tr>
        </form>

edit this to whatever you need. Keep in mind that you will also have to change your flask code to work with this.

like image 80
Ethan KoehlerBryant Avatar answered Nov 15 '22 00:11

Ethan KoehlerBryant