带有MailGun配置问题的Heroku上的Flask

时间:2012-10-26 01:52:14

标签: python heroku flask mailgun flask-mail

我的电子邮件遇到问题所在的问题。我在Heroku上设置了Flask应用程序的配置文件,如下所示:

class ProductionConfig(Config):
    DATABASE_URL = 'postgres://stuff'
    MAIL_SERVER = os.environ.get('MAILGUN_SMTP_SERVER', 'localhost')
    MAIL_PORT = os.environ.get('MAILGUN_SMTP_PORT', 25)
    MAIL_USERNAME = os.environ.get('MAILGUN_SMTP_LOGIN', None)
    MAIL_PASSWORD = os.environ.get('MAILGUN_SMTP_PASSWORD', None)
    DEFAULT_MAIL_SENDER = 'myemail@myemail.com'
    MAIL_USE_SSL = True

使用Flask-Mail库:

    from flask.ext.mail import Mail, Message

    mail = Mail(app)

    def send_mail(to, title, msg):
      email = Message(title, recipients = [to], body = msg)

      return mail.send(email)

但果然,我尝试发送电子邮件,它永远不会到达那里。我做错了什么吗?我错过了什么吗? (我已经删除了真正的数据库URL和电子邮件地址,以防您想知道。)

提前非常感谢。

1 个答案:

答案 0 :(得分:2)

根据the documentation,Mailgun的正确SMTP服务器为smtp.mailgun.org而不是localhost,端口为587而不是25。也许改变它们会解决它。看起来也需要登录名和密码。

使用Mailgun API而不是Flask-Mail可能会有更多成功。我发现它在我自己的应用程序中更容易使用。

这是我使用requests库在Heroku上通过Mailgun发送邮件的配置和一个小实用程序函数:

import requests    

app = Flask(__name__)
app.config['MAILGUN_KEY'] = 'YOUR-KEY-HERE'
app.config['MAILGUN_DOMAIN'] = 'YOUR-MAILGUN-DOMAIN'

@app.route('/', methods=['GET', 'POST'])
def home():
    ...
    send_mail(...)

def send_mail(to_address, from_address, subject, plaintext, html):
    r = requests.\
        post("https://api.mailgun.net/v2/%s/messages" % app.config['MAILGUN_DOMAIN'],
            auth=("api", app.config['MAILGUN_KEY']),
             data={
                 "from": from_address,
                 "to": to_address,
                 "subject": subject,
                 "text": plaintext,
                 "html": html
             }
         )
    return r

如果您登录Heroku并单击Mailgun插件,它将带您进入Mailgun控制面板,您可以在其中获取上述代码中所需的密钥和域。