質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2186閲覧

gmailでcsvから読み込んだ複数の宛先にメールしたい

thinkthink

総合スコア6

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/02/15 20:28

編集2020/02/16 00:22

こちらのyoutube動画(https://www.youtube.com/watch?v=U5VKEM2bqMQ)を参考にして、添付してあった使用コードを使ってみたのですがcsvを読み込む所でどうしても上手くいきません。CSVの内容は2列で1列目が氏名、2列目がメールアドレスです

■以下、試したこと
・最初に出たエラー

File "<ipython-input-4-0a904a6ac562>", line 6 filename = "C:\Users\furug\Desktop\work\test2.csv" ^ SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

・解決のために参考にしたページ➡リンク内容
・対策した内容
raw文字を使えばエスケープは解釈され無いので r を付けて、r"C:\Users …… と書く事を試しました
・結果
別のエラー⓶が発生

・別のエラー⓶

UnicodeDecodeError Traceback (most recent call last) <ipython-input-5-fe9ff54b74e4> in <module> 9 with open(filename, 'r') as f: 10 reader = csv.reader(f) ---> 11 header = next(reader) 12 13 for row in reader: UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence

・解決の為に参考にしたページ➡リンク内容
・対策した内容
filename = r"C:\Users\furug\Desktop\work\test2.csv,encoding=utf-8_sig"と書いた
・結果
別のエラー⓷が発生

・別のエラー⓷

FileNotFoundError Traceback (most recent call last) <ipython-input-6-10c16fac8532> in <module> 7 8 # CSVから読み込み ----> 9 with open(filename, 'r') as f: 10 reader = csv.reader(f) 11 header = next(reader) FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\furug\Desktop\work\test2.csv,encoding=utf-8_sig'

ここで『そんなファイルないって言われても・・・』となり止まってしまいました。

現在のコードは以下です

  

import smtplib from email.mime.text import MIMEText class Mailer: """ メールを送信するクラス """ #初期化 def __init__(self, addr_to, subject, body): self.password = "ログインパスワード" # ← ここにGmailのログインパスワードを追加 self.addr_from = "メールアドレス" # ← ここにメールアドレスを追加 self.addr_to = addr_to self.charset = "ISO-2022-JP" self.subject = subject self.body = body def send(self): # メールの設定 msg = MIMEText(self.body.encode(self.charset), 'plain', self.charset) msg['Subject'] = self.subject msg['From'] = self.addr_from msg['To'] = self.addr_to # gmailのsmtp経由で送信 smtp = smtplib.SMTP('smtp.gmail.com', 587) smtp.ehlo() smtp.starttls() smtp.ehlo() smtp.login(self.addr_from, self.password) smtp.send_message(msg) smtp.close() def create_mail_body(full_name): body = """ {}様 お世話になっております。キカガクの今西です。 こちらのメールはPythonによるGmailのテスト送信になります。 よろしくお願いいたします。 ━━━━━━━━━━━━━━━━━━━━━━━ 今西 航平(Kohei Imanishi) 株式会社キカガク 取締役副社長 Email: kohei.imanishi@kikagaku.co.jp URL : https://www.kikagaku.co.jp/ ━━━━━━━━━━━━━━━━━━━━━━━━ """.format(full_name) return body # 動作確認 import sys import csv # 引数からファイル名を取得 filename = '/content/test.csv' # CSVから読み込み with open(filename, 'r') as f: reader = csv.reader(f) header = next(reader) for row in reader: """ 全員に対して送る """ # CSVからメール送信に必要な情報を抽出 full_name = row[0] # お名前 email = row[1] # メールアドレス # メール内容 addr_to = email subject = "Pythonによるテストメール" body = create_mail_body(full_name) mailer = Mailer(addr_to, subject, body) mailer.send()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

open関数の第一引数の中に、別の引数,encoding=utf-8_sigが文字の形でまぎれこんでいます。
そのためエラーメッセージで云われているように、そのようなファイルがないためエラーが発生しています。

以前の質問と同様にencoding=~のように別の引数としてキーワード指定して渡すように修正ください。

投稿2020/02/16 00:29

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thinkthink

2020/02/16 08:25

『別の引数としてキーワード指定して渡すように修正』の部分でintの場合はどう書けば良いのでしようか?調べたのですが分かりません。
can110

2020/02/16 08:30

以前の質問の回答と同じなのですが… 念のため確認なのですが「encoding=utf-8_sig」と記載しているのは具体的にはどのような目的、意図で書かれているのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問