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)

しかし、確かに、私は電子メールを送信しようとしますが、それが届くことはありません。私は何か間違ったことをしましたか?私は何かが足りないのですか?(不思議に思うかもしれませんが、実際のDB URLと電子メールアドレスを削除しました。)

よろしくお願いします。

4

1 に答える 1

2

ドキュメントによると、 Mailgunの正しいSMTPサーバーはそうではsmtp.mailgun.orgなくlocalhost、ポートはそうではあり587ません25。多分それらを変えることはそれを修正するでしょう。ログインとパスワードも必要なようです。

Flask-Mailの代わりにMailgunAPIを使用すると、より多くの成功を収めることができます。自分のアプリケーションで使用する方が簡単であることがわかりました。

これは、リクエストライブラリを使用して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 に答える