我的电子邮件遇到问题所在的问题。我在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和电子邮件地址,以防您想知道。)
提前非常感谢。
答案 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控制面板,您可以在其中获取上述代码中所需的密钥和域。