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

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

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

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

1675閲覧

gmailでHTML形式でメール送信

thinkthink

総合スコア6

Gmail

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/02/15 19:47

編集2020/02/16 00:26

pandas から読み込んだ内容をHTMLに落としてそれをgmailの本文に記載したいです。

※依頼者からのオーダーでメール本文に内容を記載したいです

こちらのサイトを参考にしてやってみましたがエラーが出てしまいます。➡リンク内容

HTMLの内容は以下の感じです

カラムA(店名) カラムB(所在地)
1 ●●店      ●●県●●市
2 ●●店      ●●県●●市
3 ●●店      ●●県●●市
4 ●●店      ●●県●●市
5 ●●店      ●●県●●市

出ているエラーはこちらです

TypeError Traceback (most recent call last) <ipython-input-17-09ff481f31ec> in <module> 40 41 if __name__ == '__main__': ---> 42 main() <ipython-input-17-09ff481f31ec> in main() 32 subject = SUBJECT 33 #htmlファイルを読み込み。メール本文に挿入 ---> 34 test_data = open(r'C:\Users\Desktop\work\情報.html', "r",'utf-8', 'ignore') 35 contents = test_data.read() 36 body = contents TypeError: an integer is required (got type str)

現在のコードは以下です

import smtplib import email.message FROM_ADDRESS = '●●●●@gmail.com' MY_PASSWORD = '●●●●' 送り先のメールアドレス TO_ADDRESS = ['●●●●@gmail.com'] SUBJECT = '本日のメール' def create_message(from_addr, to_addr, subject, body): msg = email.message.Message() msg['Subject'] = subject msg['From'] = from_addr msg['To'] = ",".join(to_addr) msg.add_header('Content-Type','text/html') msg.set_payload(body) return msg def send(from_addr, to_addrs, msg): smtpobj = smtplib.SMTP('smtp.gmail.com', 587) smtpobj.ehlo() smtpobj.starttls() smtpobj.ehlo() smtpobj.login(FROM_ADDRESS, MY_PASSWORD) smtpobj.sendmail(from_addr, to_addrs, msg.as_string()) smtpobj.close() def main(): to_addr = TO_ADDRESS subject = SUBJECT htmlファイルを読み込み。メール本文に挿入 test_data = open(r'C:\Users\Desktop\work\情報.html', "r",'utf-8', 'ignore') contents = test_data.read() body = contents msg = create_message(FROM_ADDRESS, to_addr, subject, body) send(FROM_ADDRESS, to_addr, msg) if __name__ == '__main__': main()

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

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

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

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

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

can110

2020/02/15 21:31

インデントがなくなっていますのでソースコードはコードブロックで囲んでください。 また、どの場所でエラーが発生しているか不明なのでエラーは全文(Traceback)を提示ください。
thinkthink

2020/02/16 00:15

大変失礼致しました。 また、教えて頂きありがとうございます。 追記・修正いたしましたのでご確認よろしくお願いいたします。
guest

回答2

0

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)の説明を見れば明らかですが、三番目の引数bufferingは数値型を指定すべきなのに'utf-8'という文字型を渡しているのが原因です。リンク先と同様にencoding=~のようにキーワードを指定して渡してください。
なお'ignore'も同様です。

日本語を含む場合

pythonでHTMLメールを送信するに記載のコードだと日本語が含まれていても送信できました。参考まで。

投稿2020/02/16 00:22

編集2020/02/22 10:44
can110

総合スコア38266

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

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

thinkthink

2020/02/16 07:30

教えて頂いたpythonのドキュメント(https://docs.python.org/ja/3/library/functions.html#open)や 他にも文字コードについて(https://qiita.com/Akatsuki_py/items/559744816f3c1ba1c699)や open関数の使い方(https://dot-blog.jp/news/python-open-function/)を見ましたが 結果、『strではなくintの場合のキーワードを指定して渡す書き方』がどう書けばいいのか分かりません。 何度も申し訳ありませんが、教えて頂けませんでしょうか?
thinkthink

2020/02/16 07:33

もう一つ分からないことがあります。 htmlとして保存する時に以下の様にutf-8で指定して保存しているのに読み込む時に strではなくintになってしまうのも何故なのか分かりません。 with open('情報.html', 'w',encoding='utf-8') as f: f.write(html_string.format(table=df.to_html(classes='mystyle', index=False)))
can110

2020/02/16 07:40

「open(~, encoding='文字コード')」のような感じです。 もう一つについては、「読み込む時にstrではなくintになってしまう」において、何がintになってしまうのかが分かりません。
thinkthink

2020/02/16 22:26

ご回答ありがとうございます。また、こちらのレスポンスが遅くて申し訳ありません。 現在、こちらの質問(https://teratail.com/questions/241589)とは別で もう一つ質問(https://teratail.com/questions/241591)をしていて、そちらでもご回答頂いていたのでこちらで返信させて頂きます。分かり辛くて申し訳ありません。 ⓵『念のため確認なのですが「encoding=utf-8_sig」と記載しているのは具体的にはどのような目的、意図で書かれているのでしょうか?』についてですが、CSVやhtmlでファイル出力した時に文字化けしてしまうのでこちらのページ(https://qiita.com/y4m3/items/674423b596284bbc7cf7)を参考にencoding='utf-8-sig'を付与しました。
thinkthink

2020/02/16 22:35

また、2020/02/16 16:30に書かせていただいた 『strではなくintの場合のキーワードを指定して渡す書き方がどう書けばいいのか分かりません』と書いた部分は、 open(file, mode='r', buffering=-1, encoding=●●●)の●●●部分を何にすれば良いのかが分からないという意図でした。 『数値型を指定すべきなのに'utf-8'という文字型を渡しているのが原因』なのは分かるのですが、 数値型を指定する場合の●●●は何になるのか?が分かりません。
can110

2020/02/17 13:18

あなたの目的、意図から推測すると、指定したいのは「encoding=●●●」の部分だと思われます。 で、 > encoding='utf-8-sig'を付与しました。 との発言から推測すると「●●●」は自明だと思うのですが。
thinkthink

2020/02/17 15:37 編集

回答ありがとうございます。 もしかして、こういう事でしょうか? open(r'C:\Users\Desktop\work\情報.html', encoding='utf-8-sig', errors='ignore') 前におっしゃていた『encoding=~のようにキーワードを指定して渡してください。なお'ignore'も同様です。』の意味が今やっと分かった気がします。
thinkthink

2020/02/17 16:17 編集

ただ、上記で書いて実行したのですがまた以下の④のエラーが出てしまいます。 今までと同じように➡以下の⓵⓶⓷④の4つのエラーのどれかが出る➡修正➡以下の4つのエラーのどれかが出る みたいな感じのループで先に進めません。特に4つ目のエラーから先に進めません ⓵SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape ⓶UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence ⓷UnicodeEncodeError: 'ascii' codec can't encode characters in position 401-404: ordinal not in range(128) ④FileNotFoundError Traceback (most recent call last) <ipython-input-23-d19d3af819fb> in <module> 41 42 if __name__ == '__main__': ---> 43 main() <ipython-input-23-d19d3af819fb> in main() 33 subject = SUBJECT 34 #htmlファイルを読み込み。メール本文に挿入 ---> 35 test_data = open(r'C:\Users\furug\Desktop\work\情報.html', encoding='utf-8', errors='ignore') 36 contents = test_data.read() 37 body = contents FileNotFoundError: [Errno 2] No such file or directory: 'C:\Users\Desktop\work\情報.html'
can110

2020/02/18 06:35

四番目はそのファイルが存在しないといわれているのでファイルパスが正しいかを確かめましょう。
thinkthink

2020/02/18 22:20 編集

ご回答ありがとうございます。 ファイルパスを修正しましたが別なエラーが出てしまいます。 色々調べて試してみましたが解決できません。 何度も申し訳ございません。 UnicodeEncodeError Traceback (most recent call last) <ipython-input-14-3ee6c4fa9d2d> in <module> 42 43 if __name__ == '__main__': ---> 44 main() <ipython-input-14-3ee6c4fa9d2d> in main() 39 40 msg = create_message(FROM_ADDRESS, to_addr, subject, body) ---> 41 send(FROM_ADDRESS, to_addr, msg) 42 43 if __name__ == '__main__': <ipython-input-14-3ee6c4fa9d2d> in send(from_addr, to_addrs, msg) 26 smtpobj.ehlo() 27 smtpobj.login(FROM_ADDRESS, MY_PASSWORD) ---> 28 smtpobj.sendmail(from_addr, to_addrs, msg.as_string()) 29 smtpobj.close() 30 ~\Anaconda3\lib\smtplib.py in sendmail(self, from_addr, to_addrs, msg, mail_options, rcpt_options) 853 esmtp_opts = [] 854 if isinstance(msg, str): --> 855 msg = _fix_eols(msg).encode('ascii') 856 if self.does_esmtp: 857 if self.has_extn('size'): UnicodeEncodeError: 'ascii' codec can't encode characters in position 250-253: ordinal not in range(128)
can110

2020/02/19 01:46

確認なのですが、参考にしたサイトのコードは日本語を本文に含むケースに対応しているでしょうか?
thinkthink

2020/02/20 13:28

レスが遅くて申し訳ありません。 ご回答ありがとうございます。 『日本語を本文に含むケースに対応しているか?』ですが、自分では分かりません こちらのサイト(https://www.python.ambitious-engineer.com/archives/1174 )の -- ------------ htmlを出力する htmlに出力することも可能です。分析結果をwebに出力する場合などに重宝するでしょう。 1 df.to_html('sample.html') 引数に出力ファイル名を指定するだけでhtmlのtableで出力することができます。 ------- の部分を見てhtmlに出力し、 その後、同じ方のこちらのサイト(http://wheelchairtext.net/program/1487/)を見て、出力したhtmlを本文に表示させるコードを参考にしました。
can110

2020/02/20 13:41

まずは日本語を含まないhtmlで試してみてはいかがでしょうか。
thinkthink

2020/02/22 09:00 編集

日本語を含まないhtmlで試してみました。 ファイル部分のコードは以下のように書きました。 test_data = open(r'C:\Users\furug\Desktop\work\mojinasi.html') 結論、メール本文にhtmlの内容を記載したメールを送信する事ができました。 メール送信自体のコードには問題がないようです。 日本語を含むhtmlがどうすればメール送信できるのか、が分かりません。
can110

2020/02/22 10:44

参考リンクを追加しました。
guest

0

Pythonは書いたことがないのですが、この行で、

  1. 謎のr
  2. 第3引数は buffering で integer が求められているのに str 'utf-8' を渡している

のが怪しいと思います。

python

1test_data = open(r'C:\Users\Desktop\work\情報.html', "r",'utf-8', 'ignore')

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

組み込み関数 — Python 3.8.2rc1 ドキュメント

投稿2020/02/16 00:18

thyda.eiqau

総合スコア2982

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問