smtplib.SMTPServerDisconnected

smtplib.SMTPServerDisconnected: please run connect() first

 

# app/email.py 안의 mail.send(msg) 부분에서 문제가 발생하는것같아요.

메일 발송을 위한 데몬이 작동되어야하는데 작동이 안된 상태에서 메일 발송을 시도하면서 발생하는 문제인것같은데...

아래 설정들로 잘 세팅해두고 진행했어요.

그런데 왜 자꾸 메일 발송이 되지 않는지 모르겠네요.

비고1 : 플라스크 서버를 작동시키고 # netstat -nplt 커맨드를 입력해보면, 원하는 대로 메일 데몬이 올라오지 않습니다.

 

 

에러 발생되면서 메일 발송이 안됩니다

해결 요청드립니다 T^T

 

 

export MAIL_SERVER=smtp.googlemail.com
export MAIL_PORT=587
export MAIL_USE_TLS=1
export MAIL_USERNAME=growingsajatest
export MAIL_PASSWORD=testpassword

(비밀번호는 바꿨어요 일부러)

변수 정상적으로 잘 불러오는 것 확인 됬습니다.

 

 

 

아래 파이썬 파일 내부에서 모듈 불러오는 부분 등은 모두 정상입니다.

flask server run은 정상적으로 되지만, mail server run이 함께 진행되지 않는 이유를 모르겠습니다.

 

 

# vim microblog.py

from app import app

if __name__ == '__main__':
    app.run(host='0.0.0.0', port='5001', debug=True)

 

 

# vim app/__init__.py

from flask import Flask
from config import Config
from flask_mail import Mail

app = Flask(__name__)
app.config.from_object(Config)

# Flask-Mail 인스턴스
mail = Mail(app)

# routes와 데이터베이스 구조 정의하는 models 호출
from app import routes, models

 

 

# vim config

import os

basedir = os.path.abspath(os.path.dirname(__file__))

class Config(object):
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'app.db')
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    # 이메일 구성
    MAIL_SERVER = os.environ.get('MAIL_SERVER')
    MAIL_PORT = int(os.environ.get('MAIL_PORT') or 25)
    MAIL_USE_TLS = os.environ.get('MAIL_USE_TLS') is not None
    MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
    MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
    ADMINS = ['growingsajatest@gmail.com']

 

 

# vim app/email.py

from flask_mail import Message
from app import mail

def send_email(subject, sender, recipients, text_body, html_body):
    msg = Message(subject, sender=sender, recipients=recipients)        # 메일 세팅
    msg.body = text_body        # text body
    msg.html = html_body        # html body
    mail.send(msg)      # 메일 발송

from flask import render_template
from app import app
# 비밀번호 재설정 이메일 보내기 기능
def send_password_reset_email(user):
    token = user.get_reset_password_token()
    send_email('[Microblog] Reset Your Password',
               sender=app.config['ADMINS'][0],
               recipients=[user.email],
               text_body=render_template('email/reset_password.txt',
                                         user=user, token=token),
               html_body=render_template('email/reset_password.html',
                                         user=user, token=token))
# 이메일의 텍스트 및 HTML 내용이 익숙한 render_template() 기능을 사용하여 템플릿에서 생성됨
# 템플릿은 사용자와 토큰을 인수로 받아 개인화된 이메일 메시지를 생성할 수 있음

 

 

 

설정값들 중 어느 부분에 문제가 있는건지 도저히 모르겠네요.

 

T^T

 

의견 받습니다. 감사합니다.

 

+ Recent posts