0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Python入門】imaplibを使ってメールを取得

Last updated at Posted at 2019-09-29

##目的
・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 概要
email 電子メールメッセージを読む・書く・送信するためのモジュール
ssl 暗号化とクライアント、サーバサイド両方のネットワークソケットのための認証モジュール
imaplib サーバからメールを取得するためのモジュール
email.header 文字コードを適切に変換するためのモジュール

##作業環境前提
(1)Windows10上にVirtualBoxがインストール済み
(2)VirtualBox上にUbuntu16.04が設置済み
(3)Ubuntu上にPythonとJupyter Notebookインストール済み
(4)必要Python moduleインストール済み

##完成コード全体
・先に完成予定のコードを下記に…

mail_test.py
# -*- 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フォルダを作る。
・今後は、ここにデータを保存していく。

ubuntu16.04
$ cd
$ mkdir src
$ mkdir src/mail_lab
$ cd src/mail_lab

####② 起動
・移動先の作業フォルダ内にてJupyter Notebookを起動

ubuntu16.04
$ jupyter notebook

▼実行結果
o0869047514300717426.jpg

####③ 新規プロジェクト作成
・NewをクリックしてPython3を選択する

▼作業画面
o0746027014300719759.png

####④ プロジェクト名変更
・画面左上の「Untitled」をクリック

▼画面
o0765031814300720384.png

・ポップアップ表示

▼クリック後のポップアップ画面
o0763031214300722776.png

・フォーム欄にタイトル名として「mail_test」と記述し「Rename」をクリック

▼フォーム画面
o0744022214300723713.png

▼実行結果(変更完了)
o0768015914300724632.png

###プログラミング
####① メールサーバにログイン
・Jupyter Notebookのインターフェースを使った必要moduleをインポート
・In[] の右欄にインポートするモジュールを記述し、画面上メニュー欄の「Run」をクリック

▼実行結果
o0768036914300727033.png
・エラーが表示されなければ問題なし

・せっかくなので、メモも追加してみる
・上部メニュー欄から「Cell」をクリック
・メニューが表示されるので、「Cell Type」の中から「Markdown」を選択

▼画面
o0767035914300728328.png

・In[]の右欄にコメントを追加

▼コメントを入れたところの画面
o0769032514300731872.png
・「Run」をクリックすると、次のセルが出力される

・ログインに必要な情報を変数に入れる

▼追加して「Run」な感じの画面
o0769037214300734796.png
※ちなみに「*」は、単純に伏字にしているだけですので、変数に入れる情報は、各自のメールサーバに合わせて記述してください

・インスタンス作成

▼コードイメージ
o0770020514300741063.png

・いよいよログイン!
・下記の記述を行い、「Run」します

▼成功の瞬間
o0769018314300742764.png

####② IMAPサーバからメールオブジェクト取り出し
・ここまで来たので、オブジェクトを取り出してみます
・テストとして、2018年11月10日に届いたメールオブジェクトを取り出してみます

▼オブジェクトを取り出した瞬間!
o0767029814300745971.png

・はい!...地味...ですね。
・今回は、ここまでです。
・あとは、取り出したオブジェクトを目的に沿って煮るなり焼くなりです!

##まとめ
・地味にオブジェクトを取り出すときに、なかなかうまくいかず苦労しました。
・古いサイトや書籍を参考にしてしまったために失敗失敗でした。
・余談として、Jupyter Notebookで実行を確認していた際に、一定の時間が経過すると、ログインセッションが切れてしまうらしく、記述は合っているのにエラーが発生するということがありました。そんな時は、作成したコード全体を改めて「Run」してあげると解決します。

##References
書籍:
 『退屈なことはPythonにやらせよう』
 『Pythonによるクローラー&スクレイピング入門』
 『Pythonによるスクレイピング&機械学習[開発テクニック]』

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?