##目的
・IMAPサーバからPythonを使ってメールオブジェクトを取り出す
・JupyterNotebookを使ってPythonコードを記述してみる
##当プログラムの機能
(1)メールサーバにログイン
(2)IMAPサーバからメールオブジェクトを取り出す
##環境
▼基礎環境
項目 | 内容 |
---|---|
Host OS | Windows10 |
仮想ツール | Virtual Box Ver.5.2.16 |
仮想 OS | Ubuntu 16.04 |
Python | Python 3.6.6 |
Other ツール | Jupyter Notebook |
▼Python module
module 名 | module 概要 |
---|---|
電子メールメッセージを読む・書く・送信するためのモジュール | |
ssl | 暗号化とクライアント、サーバサイド両方のネットワークソケットのための認証モジュール |
imaplib | サーバからメールを取得するためのモジュール |
email.header | 文字コードを適切に変換するためのモジュール |
##作業環境前提
(1)Windows10上にVirtualBoxがインストール済み
(2)VirtualBox上にUbuntu16.04が設置済み
(3)Ubuntu上にPythonとJupyter Notebookインストール済み
(4)必要Python moduleインストール済み
##完成コード全体
・先に完成予定のコードを下記に…
# -*- coding: utf-8 -*-
# source code name: mail_test.py
import email
import ssl
import imaplib
from email.header import decode_header, make_header
imaplib._MAXLINE = 10000000
# mail server へのログインに必要な情報
HOST = "imap.mail.****.****.co.jp"
USER = "ichitaro@****.****.co.jp"
PASS = "******************"
# クライアントインスタンス作成
settings = ("ssl", 993)
context = ssl.create_default_context()
imapclient = imaplib.IMAP4_SSL(HOST, settings[1], ssl_context=context)
# ログイン実行
imapclient.login(USER, PASS)
# INBOXからオブジェクト取り出し
imapclient.select('INBOX', readonly=True)
typ, data = imapclient.search(None, '(SINCE "11-Nov-2018")')
print(typ)
print(data)
・今回の内容では、このコード記述をJupter Notebookを使いながら説明しています
##以降の流れ
1.Jupyter Notebookの基本設定
① 作業フォルダ作成
② 起動
③ 新規プロジェクト作成
④ プロジェクト名変更
2.プログラミング
① メールサーバにログイン
② IMAPサーバからメールオブジェクト取り出し
##内容
###Jupyter Notebookの基本設定
####① 作業フォルダ作成
・homeディレクトリ上にsrcフォルダを作り、その下にmail_labフォルダを作る。
・今後は、ここにデータを保存していく。
$ cd
$ mkdir src
$ mkdir src/mail_lab
$ cd src/mail_lab
####② 起動
・移動先の作業フォルダ内にてJupyter Notebookを起動
$ jupyter notebook
####③ 新規プロジェクト作成
・NewをクリックしてPython3を選択する
####④ プロジェクト名変更
・画面左上の「Untitled」をクリック
・ポップアップ表示
・フォーム欄にタイトル名として「mail_test」と記述し「Rename」をクリック
###プログラミング
####① メールサーバにログイン
・Jupyter Notebookのインターフェースを使った必要moduleをインポート
・In[] の右欄にインポートするモジュールを記述し、画面上メニュー欄の「Run」をクリック
・せっかくなので、メモも追加してみる
・上部メニュー欄から「Cell」をクリック
・メニューが表示されるので、「Cell Type」の中から「Markdown」を選択
・In[]の右欄にコメントを追加
▼コメントを入れたところの画面
・「Run」をクリックすると、次のセルが出力される
・ログインに必要な情報を変数に入れる
▼追加して「Run」な感じの画面
※ちなみに「*」は、単純に伏字にしているだけですので、変数に入れる情報は、各自のメールサーバに合わせて記述してください
・インスタンス作成
・いよいよログイン!
・下記の記述を行い、「Run」します
####② IMAPサーバからメールオブジェクト取り出し
・ここまで来たので、オブジェクトを取り出してみます
・テストとして、2018年11月10日に届いたメールオブジェクトを取り出してみます
・はい!...地味...ですね。
・今回は、ここまでです。
・あとは、取り出したオブジェクトを目的に沿って煮るなり焼くなりです!
##まとめ
・地味にオブジェクトを取り出すときに、なかなかうまくいかず苦労しました。
・古いサイトや書籍を参考にしてしまったために失敗失敗でした。
・余談として、Jupyter Notebookで実行を確認していた際に、一定の時間が経過すると、ログインセッションが切れてしまうらしく、記述は合っているのにエラーが発生するということがありました。そんな時は、作成したコード全体を改めて「Run」してあげると解決します。
##References
書籍:
『退屈なことはPythonにやらせよう』
『Pythonによるクローラー&スクレイピング入門』
『Pythonによるスクレイピング&機械学習[開発テクニック]』