我的电子邮件无法到达所需的位置。我已经在 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/