subscribe.html
{% extends 'base.html' %} {% from 'macros.html' import form_field %}
{% block content %} <h2>Flask Weekly</h2> <p>A free weekly newsletter featuring curated news, articles, new releases, jobs etc related to Flask. </p> <p>Delivery at every Wednesday morning.</p> <p>Unsubscribe at any time.</p> <form method="post"> {{ form.csrf_token }} {{ form_field(form.name, placeholder='Your Name') }} {{ form_field(form.email, placeholder='Your Email') }} {{ form.submit(class='btn') }} </form> {% endblock %}
app.py
from flask import Flask,render_template,flash,redirect,url_for import os from flask_mail import Mail, Message from wtforms import StringField, TextAreaField, SubmitField from wtforms.validators import DataRequired, Email from flask_wtf import FlaskForm
app = Flask(name) app.jinja_env.trim_blocks = True app.jinja_env.lstrip_blocks = True
app.config.update( SECRET_KEY=os.getenv('SECRET_KEY', 'secret string'), MAIL_SERVER=os.getenv('MAIL_SERVER'), MAIL_PORT=465, MAIL_USE_SSL=True, MAIL_USERNAME=os.getenv('MAIL_USERNAME'), MAIL_PASSWORD=os.getenv('MAIL_PASSWORD'), MAIL_DEFAULT_SENDER=('ssssssss', os.getenv('MAIL_USERNAME')) )
mail = Mail(app) def send_smtp_mail(subject, to, body): message = Message(subject, recipients=[to], body=body) mail.send(message) class SubscribeForm(FlaskForm): name = StringField('Name', validators=[DataRequired()]) email = StringField('Email', validators=[DataRequired(), Email()]) submit = SubmitField('Subscribe') @app.route('/subscribe', methods=['GET', 'POST']) def subscribe(): form = SubscribeForm() if form.validate_on_submit(): name = form.name.data email = form.email.data send_smtp_mail('Subscribe Success!', email, name=name) flash('Confirmation email have been sent! Check your inbox.') return redirect(url_for('subscribe')) return render_template('subscribe.html', form=form) if name == 'main': app.run()