ドアホン画像を保存閲覧する設定(その2)

ドアホン画像を保存閲覧する設定(その1) にて、メール送信の基本機能の動作確認できたなら、送信時認証 AUTH CRAM-MD5 を確認したのち、ドアホン親機 VL-MWH705(Panasonic)のメール設定をタッチパネルで行う。ドアホンカメラの映像が送信されたなら画像がメールサーバrapiq.localdom.jp(192.168.0.8)に受信できていることを確認する。

メールクライアント Emacs(26.1)のMew(6.8)でのIMAP設定のち、カメラの画像をチェックする。さらに iPhone標準メールでも設定してみる。

カメラの画像がメールサーバに蓄積されていることが確認できたなら、.forward .procmailrc の設定とともに、uudeviewコマンドにて、画像を取り出し保存して、lighttpd HTTPサーバでサムネール画像でブラウズ出来るようになる。

```shell-session
### 新規着信メールは new ディレクトリに
user@rapiq:~ $ ls -lt ~/Maildir/new | sed -n 2,3p
-rw------- 1 user user  48490 May 22 14:34 1621661681.19147_1.rapiq
-rw------- 1 user user  50671 May 22 14:34 1621661677.19131_1.rapiq

### メールクライアントから読み出すと cur ディレクトリに
user@rapiq:~ $ ls -lt ~/Maildir/cur | sed -n 2,3p
-rw------- 1 user user 139720 May 22 13:18 1621657104.H39131P18433.rapiq:2,S
-rw------- 1 user user 144867 May 22 13:15 1621656916.H637716P18415.rapiq:2,S
user@rapiq:~ $
```

###(6) ローカルエリア内のホストrapiq.localdom.jpで受信するかの確認(続き)

送信時認証 AUTH CRAM-MD5 は ドアホン親機で必須でないが、ほかのメールクライアントでAUTHが必須になることがあるのでCRAM-MD5をテストしておく。

```shell-session
user@rapiq:~ $ telnet 192.168.0.8 25
Trying 192.168.0.8...
Connected to 192.168.0.8.
Escape character is '^]'.
220 rapiq ESMTP Exim 4.92 Wed, 19 May 2021 09:47:59 +0900
ehlo rapiq
250-rapiq Hello rapiq.localdom.jp [192.168.0.8]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-AUTH CRAM-MD5
250-CHUNKING
250-STARTTLS
250-PRDR
250 HELP
AUTH CRAM-MD5
334 PDU5NTYuMTYyMTM4NTMxNEByYXBpcT4=
dXNlciBiZDNhNDU1NzQ3YjMyMzA4Y2JlNzJkMGRiNWNlYmFlNw==
235 Authentication succeeded
```

AUTH CRAM-MD5 に対して"334 チャレンジ"にcram_md5.shで生成したレスポンスを返して"235 Authentication succeeded"となればOK
; (cram_md5.sh 参照URL)
; 　http://blog.livedoor.jp/aspplus/archives/51807106.html
; 　　telnet で CRAM-MD5 な SMTP 認証

```shell-session
user@rapiq:~ $ cat /usr/local/bin/cram_md5.sh
#!/bin/bash
### $Id: cram_md5.sh,v 1.00 2021/05/18 16:50:50 user $
if [ $# -ne 3 ]; then
    echo "Usage: $(basename $0) user pass challenge"
    echo "334 12345678901234567890123456789012 <- challenge STRING"
    exit 1
fi
UNAME=$1
PASWD=$2
CHLNG=$3
CHLNG_DECODED=`echo -n $CHLNG | base64 -d`
HMAC=`echo -n ${CHLNG_DECODED} | openssl md5 -hmac $PASWD`
echo $HMAC | grep -q stdin
if [ $? = 0 ]; then
    ### openssl version "OpenSSL 1.1.1d 10 Sep 2019" のとき
    ### '(stdin)= 9999...' になっていてstdinを取り除く
    ### openssl version "LibreSSL 2.6.5" ではこうならない
    HMAC=`echo $HMAC | echo $HMAC | awk '{print $2}'`
fi
TEMP="$UNAME $HMAC"
RESPO2=`echo -n $TEMP | openssl enc -base64 | tr -d '\n'`
echo $RESPO2
exit 0

user@rapiq:~ $ /usr/local/bin/cram_md5.sh user p**** 'PDU5NTYuMTYyMTM4NTMxNEByYXBpcT4='
dXNlciBiZDNhNDU1NzQ3YjMyMzA4Y2JlNzJkMGRiNWNlYmFlNw==
```

###(7) ドアホン親機 VL-MWH705(Panasonic)のメール設定

ドアホン親機のタッチパネルから[情報／設定]を押して設定を進める。おもな設定画面を示す。
親機設定_03 でテストメールが正しく送信されると、親機設定_06(iPhone表示) のようなメールが得られる。


| 親機設定_01 | 親機設定_02 | 親機設定_03 |
|:------:|:------:|:------:|
|<img width="266" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499844/1a08983a-7ef2-47d7-ced0-b13ec28e9d2e.jpeg">|<img width="266" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499844/156abd9e-4263-6729-acc4-2008558e1677.jpeg">|<img width="266" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499844/f7307125-626b-eec7-224e-f4abea3977e1.jpeg">|
| 親機設定_04 | 親機設定_05 | 親機設定_06(iPhone表示) |
|<img width="266" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499844/17c40457-e00f-38b3-0fc6-de49ac411fd3.jpeg">|<img width="266" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499844/b2a0861d-3718-7d88-f745-90bc8faad14c.jpeg">|<img width="66" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499844/27f6914c-44ad-ff34-621a-d5f55b53f2a6.jpeg">|

###(8) MewのIMAP受信設定 .mew.elの抜粋

Mewは、mbox形式のPOP受信で使っていたが、Maildir形式のIMAP受信の設定したことがなかったので、mew-config-alist に追加して動作確認する。

```elisp
; ;; For IMAP
(setq mew-imap-auth nil)   ; IMAPの認証方式 nilはLOGIN(生パスワード)
(setq mew-imap-ssl nil)
(setq mew-imap-port "143")
;(setq mew-imap-ssl-port "993")
(setq mew-imap-delete nil)
;(setq mew-debug t)
(setq mew-auto-get nil)

(setq mew-config-alist
'(
  (default
    (proto "%")
    (user "user")
    (mail-domain "localdom.jp")
    (smtp-server "192.168.0.8")
    (smtp-user "user")
    (smtp-auth-list ("CRAM-MD5"))
    (smtp-port "25")
    (imap-user "user")
    (imap-server "192.168.0.8")
    )
  ;; https://mail.nifty.com/mailer/
  (nifty
   (proto "+")
   (user "nifty_id")
   (mail-domain "nifty.com")
   (smtp-server "smtp.nifty.com")
   (smtp-user "nifty_id")
   (smtp-auth-list ("CRAM-MD5" "PLAIN" "LOGIN"))
   (smtp-port "587")
   (pop-user "obsA7user")
   (pop-server "192.168.0.6")   ;; obsA7
   (pop-port "110")
   (pop-auth pass)
   (mew-pop-delete t)
   )
  )
)
```

| 操作 |	キーバインド | M-xコマンド |
|:------|:------:|:------|
| Summaryでアカウント切替え | C | mew-summary-set-case |
| Summaryを表示し直す | s | mew-summary-ls | 
| 新着メールの受信(Summary) | i | mew-summary-retrieve |
| メッセージの全体を取得 | I | mew-summary-retrieve-message |
| フォルダ名取得 | C-u Z | mew-status-update |

キーバインドCで送受信先を変更するが、ケース名defaultとniftyを切り替えても画面の切り替えが起こることもあるがほとんどは画面上は変化しない。なんでも出来るEmacsなので知恵がある方は何とかするのであろうが、能力が無くここでは、Cのあと都度 ‘M-x mew’ にて送受信先画面を切り替えることにしている。:sweat:

[ 8.11 送受信の動作変化 ] https://www.mew.org/ja/info/release/mew_8.html#config
;（引用）
; "proto" (‘mew-proto’)は、‘M-x mew’ と入力された際に、どのフォ ルダに移動するか指定するために使います。(Mew を起動するために ‘M-x mew’ と入力する場合、"default" ケースの "proto" が利用されま す。Mew が起動している際に、‘M-x mew’ と入力するとケースに従って、 "proto" が選ばれます。) 

| Mew表示例_01 | Mew表示例_02 | Mew表示例_03 |
|:------:|:------:|:------:|
|<img width="266" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499844/121c53fd-6446-1265-1607-ff07f33c46bf.png">|<img width="266" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499844/fcdd023b-4d36-877f-571b-a8b190c57e59.png">|<img width="266" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1499844/7387a29c-00c0-64aa-7524-91310ae96310.png">|

上部Summaryモードのメール選択行の‘M’マークはマルチパートを意味し、‘T’マークが付いていると一部だけが取得されており、‘I’大文字アイでメッセージの全体を取得する。 

###(9) .forward、.procmailrc の設定

```shell-session
user@rapiq:~ $ cat ~/.forward
"|/usr/bin/procmail -f-"

user@rapiq:~ $ cat ~/.procmailrc
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/uty
MAILDIR=$HOME/Maildir/
# すべてのレシピを通り抜けた後の配送先
DEFAULT=$MAILDIR
LOGFILE=$MAILDIR/from.log
LOCKFILE=$HOME/.lockmail
VERBOSE=ON

:0
*^From:.*.localdom.jp|^To:.*.localdom.jp
{
  :0 c
  | /usr/local/bin/uudeview.sh
}

:0
$MAILDIR
```

`apt-get install uudeview` しておく。
uudeviewコマンドはメールMIMEマルチパート添付を、ファイルにしてくれる。
現在 年月日のディレクトリ先に移動して画像を保存する。
このようなメール内容のMIMEパートのときは、WC1_210522143126-1.JPG が保存される

```
--MIME_boundary_1220D34F54CAD601
Content-Type: image/jpeg; name=WC1_210522143126-1.JPG
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=WC1_210522143126-1.JPG
```

###(10) /usr/local/bin/uudeview.shの内容

```sh:uudeview.sh
#!/bin/bash
IDNT='$Id: uudeview.sh,v 1.00 2021/05/22 16:50:50 user Exp $'
CTIME=`date '+%Y/%m/%d(%a)%H:%M:%S'`
CMDHM=`date '+%m/%d %H:%M'`
  YY1=`date '+%Y'`
  MM1=`date '+%m'`
  DD1=`date '+%d'`
  HM1=`date '+%H%M'`
BASEDIR="${HOME}/sda3/DCAM/Rec"
MYNM=`basename $0`
umask 022
if [ ! -d ${BASEDIR} ]; then
    ERRMSG="$CTIME dir NOT FOUND $BASEDIR."
    logger $ERRMSG
    exit 1
fi
cd ${BASEDIR};
if [ $? != 0 ] ; then
    ERRMSG="$CTIME CANNOT cd $BASEDIR."
    logger $ERRMSG
    exit 1
fi

dst_path="${BASEDIR}/motion/${YY1}/${MM1}/${DD1}"
if [ ! -d ${dst_path} ]; then
	mkdir -p ${dst_path}
	if [ $? != 0 ]; then
	    ERRMSG="$CTIME Cannot mkdir $dst_path."
	    logger $ERRMSG
	    exit 1
	fi
fi
cd ${dst_path}
echo "+++ `date`" >> TIME_STAMP.txt
#/usr/bin/uudeview -i -m -q -
/usr/bin/uudeview -i -m - 2>&1 >> TIME_STAMP.txt
echo "---" >> TIME_STAMP.txt
```

procmail から起動した uudeview.sh が正しく動作しているならば、以下のようなファイルが得られる。
identifyコマンドがなければ `apt install imagemagick`

```shell-session
user@rapiq:~ $ (cd sda3/DCAM/Rec/motion/2021/05/22/; ls -1t|sed -n 2,5p|xargs ls -l)
-rw-r--r-- 1 user user 16993 May 22 15:14 SC2_210522151444-1.JPG
-rw-r--r-- 1 user user 16890 May 22 15:14 SC2_210522151444-2.JPG
-rw-r--r-- 1 user user 44717 May 22 15:14 WC1_210522151436-1.JPG
-rw-r--r-- 1 user user 55632 May 22 15:14 WC1_210522151436-2.JPG

user@rapiq:~ $ (cd sda3/DCAM/Rec/motion/2021/05/22/; ls -1t|sed -n 2,5p|xargs identify|awk '{print $1,$2,$3,$4}')
SC2_210522151444-1.JPG JPEG 640x360 640x360+0+0
SC2_210522151444-2.JPG JPEG 640x360 640x360+0+0
WC1_210522151436-2.JPG JPEG 640x480 640x480+0+0
WC1_210522151436-1.JPG JPEG 640x480 640x480+0+0
```

###(11) sda3ディレクトリについて

やがて大量に溜まって行くであろう画像ファイルは、外付けドライブに保存している。
このようにして、sda3以下のディレクトリを作成した。

```shell-session
user@rapiq:~ $ mount|grep sda3
/dev/sda3 on /dsk/sda3 type ext4 (rw,relatime)
user@rapiq:~ $ pwd
/home/user
user@rapiq:~ $ ln -s /dsk/sda3 sda3
user@rapiq:~ $ sudo mkdir sda3/DCAM
user@rapiq:~ $ sudo chown user:user sda3/DCAM
user@rapiq:~ $ mkdir -p sda3/DCAM/Rec/motion/2021
```

/dev/sda3は次のような外付けドライブで ext4 でマウントしている。
SSDの製品名は、crucial MX500 CT1000MX500SSD1/JP
Serial Number: は伏せ字にしている。


```shell-session
# apt-get install hdparm
# hdparm -I /dev/sda|sed -n 5,8p
	Model Number:       CT1000MX500SSD1
	Serial Number:      1XXXXXXXXXX1
	Firmware Revision:  M3CR023
	Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0

# gdisk -l /dev/sda|tail -4
Number  Start (sector)    End (sector)  Size       Code  Name
   1              40          409639   200.0 MiB   EF00  EFI System Partition
   2          411648       976574463   465.5 GiB   0700
   3       976574464      1953523711   465.8 GiB   8300  CT1T_ext4

# df -H|grep sda
/dev/sda2       500G  2.5G  498G   1% /dsk/sda2
/dev/sda3       492G  271G  197G  58% /dsk/sda3
```

(その3)に続く。https://qiita.com/borg5618/items/80778b834461dbec876a