パソコン雑学ひろば

パソコン関係のいろいろな情報を綴っていきます

【日記】Pythonのお勉強とメールの文字コードについて

ここのところ、ちょっとスキルを磨こうかと思ってPythonの勉強をしていたりします。

 

Pythonは割と昔からありましたが、特にここ数年?は機械学習などで脚光を浴びてきた様な気がします。

 

ただ、自分の仕事とは接点がなかったので今まで触ったことはありませんでした。

仕事ではC言語C#Perlをよく使っていました。

 

Pythonは区分的にはPerlと同じスクリプト言語のひとつですね。

コンパイル作業が無いのですぐにテスト実行できるのがいいです。

後、VisualStudioCodeにPython関係の拡張機能を入れてますが、テキストエディタ上でデバッグが出来ていい感じです。

 

まずはPerlでよくやっていたメールを受信してあれこれしたり、処理結果を自動でメールしたりみたいなことをPythonでもやってみようかなと思って、メールの受信と送信のサンプルを書いてみました。

 

とは言っても標準のモジュールに基本的な処理はそろっているので昔みたいにゴリゴリソケット通信してみたいなことはやらなくていいのは楽でいいんですが、その代わりモジュールをどうやって使うかを調べないといけないんですよね。

とりあえず、情報収集して、受信はまぁ動くところまで行けたのですが、送信の方がちょっと手間取って?なかなか進んでません。

 

最新のモジュールはpython3.6で追加されたemail.messageモジュールにあるEmailMessageと言うものがあるという事で、とりあえずそれを試してみました。

一応、宛先、題名、本文、添付ファイルをつけて送信する目途はたったんですが、何も考えずにサンプル通りやると文字コードutf-8になってしまうんですよね。

 

メールは歴史的な経緯から長らく7bit文字コードを使うのが慣習になっていて日本語の場合はISO-2022-JP(いわゆるJISコード)がそれに当てはまるので、題名(Subject)や本文(body)の文字コードISO-2022-JPにして送信しようと思いました。

 

ところが、今時ISO-2022-JPで送信しようとする人が少ないだろうことに加えて、EmailMessageを使ってるサンプルも少なくて、自分でも試行錯誤してみた結果、本文の文字コードISO-2022-JPにencodeできたのですが、Subjectはどうやってもできないようなんですよ。

 

 

Subjectの所は本当なら「Subject: =?ISO-2022-JP?B?GyRCRnxLXDhsGyhC?=」ってしたいところなんですが…

set_charset()が機能していないっぽい感じです。

 

仕方がないので、EmailMessage登場前に主流だった?MIMETextモジュールでやってみようと思います。

 

まぁ今時ISO-2022-JPで送信する需要がどのくらいあるのかはわかりませんけどね。

Gmail等のWebメールutf-8ですし、Thunderbirdも2年位前に文字コード設定自体がなくなっているようですし…

ただ、Outlookは最新版(365)でもISO-2022-JPで送信できていました。プライベートだとそもそもメール自体ほとんど使ってないですけど、ビジネスだと相手先のメーラーが古かったりすると文字化けしてるとかクレーム来るんですよね。

 

ちなみにOutlookOutlookで「Winmail.dat」問題はいつまでたっても直りませんね…