2012-10-26 44 views
1

我的電子郵件問題出現在需要的地方。我建立了我的瓶的應用程序的配置文件在Heroku像這樣:Heroku上的MailGun配置問題

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 = '[email protected]' 
    MAIL_USE_SSL = True 

與瓶郵件庫:

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網址和電子郵件地址。)

非常感謝。

回答

2

the documentation,爲Mailgun正確的SMTP服務器是smtp.mailgun.orglocalhost,端口爲58725。也許改變這些會解決它。看起來像登錄名和密碼也是必需的。

使用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控制面板,您可以在上面的代碼中獲得所需的密鑰和域。

+2

確實如此,但直接綁定我的API,我希望避免。使用Flask-Mail我可以用簡單的配置更改來切換smtp服務器。 +1回答。 – wheaties

+0

好點。猜猜我沒有發現自己需要經常更換SMTP服務器。用一些關於SMTP的想法編輯我的原始答案。 – aezell