Configure Flask-Mail to use GMail

26,644

Solution 1

  1. The server is "smtp.gmail.com".
  2. The port must match the type of security used.
    • If using STARTTLS with MAIL_USE_TLS = True, then use MAIL_PORT = 587.
    • If using SSL/TLS directly with MAIL_USE_SSL = True, then use MAIL_PORT = 465.
    • Enable either STARTTLS or SSL/TLS, not both.
  3. Depending on your Google account's security settings, you may need to generate and use an app password rather than the account password. This may also require enabling 2-step verification. You should probably set this up anyway.
MAIL_SERVER = 'smtp.gmail.com'
MAIL_PORT = 465
MAIL_USE_SSL = True
MAIL_USERNAME = '[email protected]'
MAIL_PASSWORD = 'app password generated in step 3'

Solution 2

A small but important addition to davidism's answer:

You must have '2-step verification' enabled on your Google account before you're able to set up app-specific passwords.

Share:
26,644
stevenperry94
Author by

stevenperry94

Updated on July 09, 2022

Comments

  • stevenperry94
    stevenperry94 almost 2 years

    When I try to send an email using Flask-Mail to Gmail's SMTP server using the settings below, I get [Errno -2] Name or service not known. How do I fix my configuration to send email with Gmail?

    from flask import Flask, render_template, redirect, url_for
    from flask_mail import Mail,  Message
    
    app = Flask(__name__)
    app.config.update(
        MAIL_SERVER='[email protected]',
        MAIL_PORT=587,
        MAIL_USE_SSL=True,
        MAIL_USERNAME = 'ri******[email protected]',
        MAIL_PASSWORD = 'Ma*****fe'
    )
    
    mail = Mail(app)
    
    @app.route('/send-mail/')
    def send_mail():
        msg = mail.send_message(
            'Send Mail tutorial!',
            sender='ri******[email protected]',
            recipients=['ri*********[email protected]'],
            body="Congratulations you've succeeded!"
        )
        return 'Mail sent'
    
  • sniperd
    sniperd almost 6 years
    This should probably be a comment, and not its own answer.