python - Heroku 上的 Flask 存在 MailGun 配置问题

标签 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 和电子邮件地址。)

提前非常感谢。

最佳答案

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

关于python - Heroku 上的 Flask 存在 MailGun 配置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13079755/

相关文章:

flask - 如何正确地将 POST 请求从表单 (wtforms) 重定向/提交到 REST api (flask-reSTLess)?

Python3 sleep ()问题

python - 使用 Python、Azure Key Vault Secret Client 以编程方式连接

ruby-on-rails - Rails 基于位置的搜索不适用于 Heroku

python - 无法通过 flask 邮件发送电子邮件

python - Flask 中的重定向实际上并没有重定向到所需的页面。

python - 如何给十六进制添加前导0

python - 检查两个 numpy 数组之间是否相等

ruby-on-rails-3 - 使用应用程序的基础数据填充 Heroku 中的表

heroku - 办公室365 : need to redirect root domain to www