1

我的电子邮件无法到达需要的位置。我已经在 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 和电子邮件地址。)

非常感谢提前。

4

1 回答 1

2

根据文档,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 控制面板,您可以在其中获取上述代码中所需的密钥和域。

于 2012-10-26T15:26:49.787 回答