2012-10-26 2 views
1

이메일 수신에 문제가 있습니다. 그래서 같은 Heroku가 내 플라스크 응용 프로그램의 설정 파일을 설정 한 :MailGun 설정 문제가있는 Heroku의 Flask

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) 

그러나 확실히 충분히, 나는 이메일을 보내려고과 : 플라스크 메일 라이브러리

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 

결코 거기에 도착하지 않는다. 내가 뭔가 잘못 했니? 내가 놓친 게 있니? (궁금한 점을 대비하여 실제 DB URL과 전자 메일 주소를 제거했습니다.)

미리 감사드립니다.

답변

2

the documentation에 따르면, Mailgun에 대한 올바른 SMTP 서버는 smtp.mailgun.org하지 localhost하고 포트는 587하지 25입니다. 어쩌면 그걸 바꾸면 그걸 고쳐 줄거야. 로그인과 비밀번호가 필요합니다.

Flask-Mail 대신 Mailgun API를 사용하면 더 많은 성공을 거둘 수 있습니다. 내 응용 프로그램에서 사용하는 것이 더 쉬운 것으로 나타났습니다.

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 클릭하면 :

이것은 설정과 나는 requests 라이브러리를 사용하여 Heroku가에 Mailgun를 통해 메일을 보낼 쓴 작은 유틸리티 함수입니다 위의 코드에서 필요한 키와 도메인을 얻을 수있는 Mailgun 제어판으로 이동하십시오.

+2

사실 그렇지만 나는 그 API에 직접적으로 묶어서 피하고 싶습니다. 플라스크 메일 사용 간단한 구성 변경으로 SMTP 서버를 전환 할 수 있습니다. +1 응답. – wheaties

+0

좋은 지적. SMTP 서버를 자주 변경해야 할 필요는 없습니다. SMTP에 대한 몇 가지 아이디어로 원래 답변을 수정했습니다. – aezell