前提
ここに質問の内容を詳しく書いてください。
(例)
Flaskフレームワークとpythonを使い簡単なお問い合せフォームを作っています。
フォームを送信すると同時に自分のGmailアカウントにメールが送信されるようにしたいのですが、
smtplib.SMTPSenderRefused: Must issue a STARTTLS command first.
のようなエラーが出てしまいます。
解決策はMust issue a STARTTLS command firstであると分かったのですが、どうすればSTARTTLSコマンドを実行できるかが分かりません。
初心者でどんな情報を提示したら良いのかも分からないので、足りない情報がありましたらご質問いただけると助かります。
実現したいこと
- フォームを送信すると同時に自分のGmailアカウントにメールが送信されるようにしたい。
発生している問題・エラーメッセージ
smtplib.SMTPSenderRefused: (530, b'5.7.0 Authentication Required. Learn more at\n5.7.0 https://support.google.com/mail/?p=WantAuthError 63-20020a620542000000b0052d50e14f1dsm4771447pff.78 - gsmtp', '=?utf-8?q?Flaskbook?= <ryotatakeuchi11@gmail.com>')
該当のソースコード
言語名: python ソースコード: #(app.py) from cProfile import run from flask import Flask, render_template, url_for, current_app, g, request, redirect, flash from email_validator import validate_email, EmailNotValidError import os import logging from flask_debugtoolbar import DebugToolbarExtension from flask_mail import Mail, Message app = Flask(__name__) #アプリの設定 app.config['SECRET_KEY'] = '2AZSMss3p5QPbcY2hBsJ' #ログレベルの設定 app.logger.setLevel(logging.DEBUG) app.logger.critical('fatal error') app.logger.error('error') app.logger.warning('warning') app.logger.info('info') app.logger.debug('debug') #リダイレクトを中断しないようにする app.config['DEBUG_TB_INTERCEPT_REDIRECTS'] = False #DebugToolbarextensionにアプリケーションをセットする toolbar = DebugToolbarExtension(app) #Mailクラスのコンフィグを追加する app.config['MAIL_USE_TLS'] = os.environ.get('MAIL_USE_TLS') app.config['MAIL_SERVER'] = os.environ.get('MAIL_SERVER') app.config['MAIL_PORT'] = os.environ.get('MAIL_PORT') app.config['MAIL_USERNAME'] = os.environ.get('USERNAME') app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD') app.config['MAIL_DEFAULT_SENDER'] = os.environ.get('MAIL_DEFAULT_SENDER') #flask-mial拡張を登録する mail = Mail(app) # アプリケーションコンテキストを取得してスタックへpushする ctx = app.app_context() ctx.push() # current_appにアクセスが可能になる print(current_app.name) g.connection = 'connection' print(g.connection) @app.route('/contact') def contact(): return render_template('contact.html') @app.route('/contact/complete', methods=['GET','POST']) def contact_complete(): if request.method == 'POST': username = request.form['username'] email = request.form['email'] description = request.form['description'] is_valid = True if not username: flash('ユーザ名は必須です') is_valid = False if not email: flash('メールアドレスは必須です') is_valid = False try: validate_email(email) except EmailNotValidError: flash('メールアドレスの形式で入力してください') is_valid = False if not description: flash('問い合わせ内容は必須です') is_valid = False if not is_valid: return redirect(url_for('contact')) flash('問い合わせ内容はメールにて送信しました。問い合わせありがとうございます。') #メールを送る send_email(email, '問い合わせありがとうございました。', 'contact_mail', username=username, description=description,) return redirect(url_for('contact_complete')) return render_template('contact_complete.html') #メールを送信する関数 def send_email(to, subject, template, **kwargs): msg = Message(subject, recipients=[to]) msg.body = render_template(template + '.txt', **kwargs) msg.html = render_template(template + '.html', **kwargs) mail.send(msg)
該当のソースコード
#(.env) # flask-mailコンフィグ設定 MAIL_SERVER = smtp.gmail.com MAIL_PORT = 587 MAIL_USE_TLS = True MAIL_USERNAME = [ryotatakeuchi11@gmail.com] MAIL_PASSWORD = [djnmvupcusvigbwq] MAIL_DEFAULT_SENDER = Flaskbook <ryotatakeuchi11@gmail.com>
試したこと
Gmailの設定を変えたりportの値を変えたりした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー