前提・実現したいこと
CSVファイルからGmailのアカウント情報(メールアドレス・パスワード・メールサーバ・ポート番号)を読み込み、そのGMAILアカウントからメールを送信するプログラムを作成しようとしています。
リテラルでアカウント情報を入力した場合には問題なくメールを送信できるのですが、CSVから情報を読み込み辞書コンテナに格納・その値を関数内で利用しようとしたところエラーが発生し送信できませんでした。
なぜこの変更でエラーが発生するようになったのかわからなかったため、原因・解決方法を教えていただければ幸いです。よろしくお願いします。
(送信用メールアドレス、受信用メールアドレスは公開のため適当な名前を充てがっています)
発生している問題・エラーメッセージ
File "C:\Users\user\Anaconda3\lib\socket.py", line 748, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): gaierror: [Errno 11001] getaddrinfo failed
該当のソースコード(Python 3.7)
import csv import smtplib with open('mail_profile.csv', newline='') as csvfile: reader = csv.DictReader(csvfile) for row in reader: prof = row GMAIL_USER = prof['GMAIL_USER'] GMAIL_PASS = prof['GMAIL_PASS'] SMTP_SERVER = prof['SMTP_SERVER'] SMTP_PORT = int(prof['SMTP_PORT']) def send_email(recipient, subject, text): smtpserver = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) smtpserver.ehlo() smtpserver.starttls() smtpserver.ehlo smtpserver.login(GMAIL_USER, GMAIL_PASS) header = 'To: ' + recipient + '\n' + 'From: ' + GMAIL_USER header = header + '\n' + 'Subject: ' + subject + '\n' msg = header + '\n' + text + ' \n\n' smtpserver.sendmail(GMAIL_USER, recipient, msg) smtpserver.close() send_email('receiver@gmail.com', 'sub', 'this is text')
読み込み用CSV(mail_profile.csv)
GMAIL_USER,GMAIL_PASS,SMTP_SERVER,SMTP_PORT
sender@gmail.com,password,stmp.gmail.com,587
試したこと
・printで入力値とデータ型に問題がないことを確認(正常に送信でできたリテラル版と比較)
・送信失敗後にリテラル版に変更し送信できることを確認、CSV読込に変えるとまた失敗することを確認
・Spyder、IDLEでそれぞれ実行して同様のエラーで実行できないことを確認
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/21 12:12