在Heroku和Mailgun上使用Flask-Mail时邮件无法发送

1 投票
1 回答
2758 浏览
提问于 2025-04-17 18:09

我正在写一个简单的应用程序,想测试如何通过SMTP方法发送电子邮件(需要使用SMTP,这样才能在不同的SMTP服务之间移植),我使用的是Flask-Mail。为了实现这个,我尝试通过Heroku使用Mailgun,但经过很多尝试、错误和研究,我还是无法发送电子邮件。

我的问题和这个问题有点相似,Flask在Heroku上与MailGun的配置问题,不过我在这个问题中没有看到解决方案,除了使用Mailgun的API,这对我正在做的项目来说不可行。

目前,我的flask/flask-mail代码设置如下(当然是简化过的):

from flask import Flask
from flask.ext.mail import Mail
from flask.ext.mail import Message

app = Flask(__name__)
mail = Mail(app)

app.config.setdefault('SMTP_SERVER', environ.get('MAILGUN_SMTP_SERVER'))
app.config.setdefault('SMTP_LOGIN', environ.get('MAILGUN_SMTP_LOGIN'))
app.config.setdefault('SMTP_PASSWORD', environ.get('MAILGUN_SMTP_PASSWORD'))
app.config.setdefault('MAIL_SERVER', environ.get('MAILGUN_SMTP_SERVER'))
app.config.setdefault('MAIL_USERNAME', environ.get('MAILGUN_SMTP_LOGIN'))
app.config.setdefault('MAIL_PASSWORD', environ.get('MAILGUN_SMTP_PASSWORD'))
app.config.setdefault('MAIL_USE_TLS', True)

def EmailFunction(UserEmail):
    msg = Message("Hello",
                  sender='testing@test.com',
                  recipients=[UserEmail])

    msg.html = "<b>testing</b>"
    mail.send(msg)
    return msg.html

@app.route('/EmailTest/')
def EmailTestPage():
    EmailFunction('developer@test.com')
    return 'Email Sent'

if __name__ == '__main__':
    app.run(host='0.0.0.0',debug=True)

我是不是漏掉了什么?有没有办法测试一下哪里出错了,因为代码是通过的,并且返回了“邮件已发送”,但似乎没有邮件被发送或接收。

谢谢你能提供的任何帮助!

1 个回答

1

看起来你没有正确设置SMTP端口。默认情况下,Flask邮件可能会尝试使用25号端口,而Mailgun则使用587号端口。

撰写回答