1

開発環境では、個人の Gmail アカウントに正常に接続する Flask メーラーをテストしました。同じ構成の構成で Zoho に切り替えましたが、次のエラーが発生します。

>>> send_password_reset_email(user)
>>> Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "app/email.py", line 8, in send_async_email
    mail.send(msg)
  File "/home/user/.local/lib/python2.7/site-packages/flask_mail.py", line 492, in send
    message.send(connection)
  File "/home/user/.local/lib/python2.7/site-packages/flask_mail.py", line 152, in __exit__
    self.host.quit()
  File "/usr/lib/python2.7/smtplib.py", line 772, in quit
    res = self.docmd("quit")
  File "/usr/lib/python2.7/smtplib.py", line 393, in docmd
    self.putcmd(cmd, args)
  File "/usr/lib/python2.7/smtplib.py", line 341, in putcmd
    self.send(str)
  File "/usr/lib/python2.7/smtplib.py", line 333, in send
    raise SMTPServerDisconnected('please run connect() first')
SMTPServerDisconnected: please run connect() first

config.py

class Config(object):
    MAIL_SERVER = 'smtp.zoho.com'
    MAIL_PORT = '587'
    MAIL_USE_TLS = '1'
    MAIL_DEFAULT_SENDER = 'admin@mydomain.com'
    MAIL_USERNAME = 'admin@mydomain.com'
    MAIL_PASSWORD = 'mypassword'
    ADMINS = 'admin@mydomain.com'

ルート.py

@app.route('/recover', methods=['GET', 'POST'])
def reset_password_request():
    if current_user.is_authenticated:
        return redirect(url_for('manage'))
    form = ResetPasswordRequestForm()
    if form.validate_on_submit():
        user = User.query.filter_by(email=form.email.data).first()
        if user:
            send_password_reset_email(user)
        flash('Check your email for the instructions to reset your password')
        return redirect(url_for('login'))
    return render_template('recover.html', form=form)

電子メール.py

def send_async_email(app, msg):
    with app.app_context():
        mail.send(msg)

def send_email(subject, sender, recipients, text_body, html_body):
    msg = Message(subject, sender=sender, recipients=recipients)
    msg.body = text_body
    msg.html = html_body
    Thread(target=send_async_email, args=(app, msg)).start()

   def send_password_reset_email(user):
        with app.app_context(), app.test_request_context(base_url='https://example.com'):
            token = user.get_reset_password_token()
            send_email('[MyDomain] 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))

Zoho アカウントは適切に構成されているようです (IP がブラックリストに登録されていないなど)。この設定を初めて試した後、Zoho サポートから、新しい IP アドレスから新しいログインが行われたことを警告する電子メールを受け取りました。しかし、パスワード再設定のメールは一度も送信されていません。

設定ファイルの微調整を何度も試みましたが、問題は別の場所にある可能性があります。どんな助けでも大歓迎です。

アップデート:

quit 関数を try-except ブロックでラップした後、最終的に、電子メールが送信されない本当のエラーに遭遇しました。完全なトレースバックは次のようになります。

  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "app/custom_mailer.py", line 11, in send_async_email
    mail.send(msg)
  File "/home/user/.local/lib/python2.7/site-packages/flask_mail.py", line 495, in send
    message.send(connection)
  File "/home/user/.local/lib/python2.7/site-packages/flask_mail.py", line 430, in send
    connection.send(self)
  File "/home/user/.local/lib/python2.7/site-packages/flask_mail.py", line 195, in send
    message.rcpt_options)
  File "/usr/lib/python2.7/smtplib.py", line 750, in sendmail
    self.rset()
  File "/usr/lib/python2.7/smtplib.py", line 469, in rset
    return self.docmd("rset")
  File "/usr/lib/python2.7/smtplib.py", line 394, in docmd
    return self.getreply()
  File "/usr/lib/python2.7/smtplib.py", line 368, in getreply
    raise SMTPServerDisconnected("Connection unexpectedly closed")
SMTPServerDisconnected: Connection unexpectedly closed

このエラーは、ここ Stackoverflow のクローズドな質問のいくつかで解決されているように見えますが、このコードを機能させることはできません..

4

0 に答える 0