前提・実現したいこと
gmailにExcelファイルを添付して送信するプログラムをpythonで作成したいと考えています。
gmailアカウントAでは作成したプログラムが問題なく動きましたが、
gmailアカウントBでは以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "<ipython-input-12-d47c9bac69af>", line 1, in <module> runfile('C:/Users/******/.spyder-py3/cancellation_report.py', wdir='C:/Users/******/.spyder-py3') File "C:\Users******\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 786, in runfile execfile(filename, namespace) File "C:\Users******\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile exec(compile(f.read(), filename, 'exec'), namespace) File "C:/Users/******/.spyder-py3/cancellation_report.py", line 76, in <module> server.login(username, password) File "C:\Users******\AppData\Local\Continuum\anaconda3\lib\smtplib.py", line 730, in login raise last_exception File "C:\Users******\AppData\Local\Continuum\anaconda3\lib\smtplib.py", line 721, in login initial_response_ok=initial_response_ok) File "C:\Users******\AppData\Local\Continuum\anaconda3\lib\smtplib.py", line 642, in auth raise SMTPAuthenticationError(code, resp) SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials x26sm4079741pfq.69 - gsmtp')
該当のソースコード
# 以下にGmailの設定を書き込む★ --- (*1) username = '**********' password = '**********' # メールの送信先 --- (*2) to_addrs = '**********' cc_addrs = '**********' # 添付ファイルのパス(ZIPファイルで指定) --- (*3) file_path = "./**********.xlsx" # メールデータ(MIME)の作成 --- (*4) subject = '*************' body ='テスト' encoding = 'utf-8' msg = MIMEMultipart() msg["Subject"] = Header(subject, encoding) msg["To"] =to_addrs if cc_addrs != '': msg["Cc"] = cc_addrs msg["From"] = username msg.attach(MIMEText(body, 'plain', encoding)) # 添付ファイル(xlsx)をメールに追加 --- (*5) attach = MIMEBase('application','vnd.ms-excel') with open(file_path, "br") as f: attach.set_payload(f.read()) encoders.encode_base64(attach) attach.add_header('Content-Disposition', 'attachment', filename='********************') msg.attach(attach) # メールサーバーへアクセス smtp_host = 'smtp.gmail.com' smtp_port = 587 server = smtplib.SMTP(smtp_host, smtp_port) server.ehlo() server.starttls() server.ehlo() server.login(username, password) sendToList = to_addrs.split(','), cc_addrs.split(',') server.sendmail(username, sendToList, msg.as_string()) server.quit()
試したこと
gmailの二段階認証を設定の上、アプリパスワードをgmailアカウントA,Bともに取得して、まったく同じ環境にて動作確認を行いました。
ログインが拒否されたgmailアカウントBでは、アプリパスワードを再取得、再度動作確認をしましたが改善しませんでした。
"安全性の低いアプリへのアクセスを許可"は、Gsite管理者(社内システムを利用のため)によって操作ができなくなっています。
※gmailアカウントA,Bは、どちらも 同じドメインの「 G Suite 」アカウントとなります。
gmailアカウントAでは動作確認ができているために、gmailアカウントBの設定に原因があることまではわかっていますが、
アプリパスワードを取得しているにもかかわらずgmailにログイン拒否される理由がわかりません。
gmailアカウントA,Bの動作確認時に変更した箇所は、username,passwordのみです。
補足情報(FW/ツールのバージョンなど)
window7,10
anaconda3 2019.03(python3.7.3 64-bit)
あなたの回答
tips
プレビュー