6
7

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.

メールの添付ファイルを自動保存

Last updated at Posted at 2018-10-07

メールの固定ファイル名の添付ファイルを自動的に決まった場所に保存する方法。

材料

  • getmail
  • procmail
  • python

getmail

http://pyropus.ca/software/getmail/
定番は fetchmail なのかな。

インストール

$ cd /opt/src
$ wget http://pyropus.ca/software/getmail/old-versions/getmail-5.6.tar.gz
$ tar xzf getmail-5.6.tar.gz
$ cd getmail-5.6
$ python setup.py build
$ su
# python setup.py install

設定

$ mkdir -m 700 ~/.getmail
$ vi ~/.getmail/getmailrc

[options]
message_log = ~/.getmail/log
# デバッグが終わったらコメント
message_log_verbose = true
read_all = False
# 指定した日数経過後サーバーから削除
#delete_after = 30
# デバッグが終わったらコメントを外す
#verbose = 0

[retriever]
#type = SimplePOP3SSLRetriever
type = SimplePOP3Retriever
server = pop.hoge.co.jp
username = username
#port = 110
password = password

[destination]
#type = Maildir
#path = ~/Maildir/
type = MDA_external
path = /bin/procmail
unixfrom = True

$ chmod 600 ~/.getmail/getmailrc
$ mkdir -p ~/Maildir/{cur,new,tmp}
$ chmod -R 700 ~/Maildir/

procmail

インストール

# yum -y install procmail
# which procmail
/bin/procmail

設定

$ vi ~/.procmailrc

.procmailrc
#----- ヘッダ
#PATH=
MAILDIR=$HOME/Maildir
DEFAULT=$HOME/Maildir/
#LOGFILE=/dev/null
LOGFILE=$HOME/procmail.`date +%Y%m%d`.log
#SHELL=/bin/sh
# デバッグが終わったら"OFF"る
VERBOSE=ON
#-- 追加変数
FROMADDRESS=from@hoge\.co\.jp
TOADDRESS=to@hoge\.co\.jp
TARGETSUBJECT=mailtitle
ATTACHFILE=filename

#----- レシピ
:0 HBcw :
* $ ^From:.*$FROMADDRESS
* $ ^To:.*$TOADDRESS
* $ ^Subject:.*$TARGETSUBJECT
* ^Content-Type:.*multipart
* $ filename=\"$ATTACHFILE\"
| $HOME/save_attachment.py $ATTACHFILE

:0
$DEFAULT

$ chmod 600 ~/.procmailrc

python

$ which python
/usr/bin/python
$ python --version
Python 2.7.5
$ vi ~/save_attachment.py

save_attachment.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import sys
import email

# 添付ファイル保存先
filedir = '/tmp/'

def attachmentSave(message, attachfile):
    for part in message.walk():
        # 添付ファイルありで区切りを書いている部分なので飛ばす
        if part.get_content_maintype() == 'multipart':
            continue
        # ファイル名取得
        fname = part.get_filename()
        if fname and fname.find(attachfile) != -1:
            savefile = open(os.path.join(filedir, fname), 'wb')
            savefile.write(part.get_payload(decode=True))
            savefile.close()

if __name__ == '__main__':
    args = sys.argv
    message = email.message_from_string(sys.stdin.read())
    attachmentSave(message, args[1])

$ chmod 700 ~/save_attachment.py

実食

$ getmail
うまくいかない場合は procmail.*.log を参照。
ファイルは常に上書きなので用途によりカスタマイズ。
~/Maildir/new/ にメールが残り続けるので別途定期的に削除するシェル等で対応する。

6
7
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
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?