maildropを使ってメール受信時に携帯へのお知らせメールを自動送信してみる
ご利用のブラウザは、JavaScript が無効 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
以下の記事では、maildropのインストールおよび簡単な使い方について解説してきました。
今回は、maildrop を使って、メール着信があったら 携帯メールへお知らせメールを自動送信してみます。
maildrop とは、
Courier Mail Serverによって使用される
MDA (
M ail
D elivery
A gent) です。maildrop は、
MDA (
M ail
D elivery
A gent)の機能のほかに、フィルター機能を有しています。
maildropは、stdin(標準入力)からメールを受信し、Maildir、mboxのいずれの形式にも配信します。
maildropは、メンテナンスされていないprocmailのMDAに代わるものとして提案されています。
MDA とは、
メール配送エージェント(Mail Delivery Agent、MDA)で、メールサーバの中で、メール転送エージェント(MTA)によって振り分けられた電子メールを受信者に配送する機能のこと言います。
(Wikipedea 原文)
maildrop is a Mail delivery agent used by the Courier Mail Server. The maildrop MDA also includes filtering functionality. maildrop receives mail via stdin and delivers in both Maildir and mbox formats.
maildrop has been suggested as an alternative to the unmaintained procmail MDA.
maildropを使ってメール受信時に携帯へのお知らせメールを自動送信してみる
procmailの代わりにmaildropを使ってみる(メールの振り分けから自動応答(返信)まで) でも書きましたが、
maildrop は、maildrop独自のスクリプトファイルによって指示されたメールの振り分けを行います。
そのファイルは、以下のとおりで、maildropが読み込む順番の下記のとおりです。
/etc/maildroprc
→ このファイルは、サーバーで受信したすべてのメールに対していmaidropの指示を指定します。
($HOME)/.mailfilter
→ このファイルは、ユーザのホームディレクトリに設置され、そのユーザ宛のメールに対してmaidropの指示を指定します。
ここでは、ユーザのホームディレクトリに設置される .mailfilter を編集して、お知らせメールを自動送信してみます。
簡単なお知らせメールの設定例
ユーザのホームディレクトリに設置される .mailfilter を使った簡単なお知らせメールの設定例を以下に解説してみます。
.mailfilter の例
1
2
3
4
if ( / ^To:\s* .* ( hoge@ example\.com) \s*/ :h )
{
cc "| echo -e 'From: oshirase@example.com\n To: keitai@docomo.ne.jp\n Subject: You got a mail\n You got a mail.\n .\n ' | /usr/sbin/sendmail -t"
}
1行目
正規表現を使ってヘッダ情報から hoge@example.com 宛(To) のメールか否かを判断しています。
3行目
hoge@example.com 宛(To) のメールの場合は、メールをコピーして、| (パイプ)以降のコマンドを実行します。
ここでは、 sendmail コマンドを使って、英語で You got a mail のタイトル、本文を 差出人 : oshirase@example.com 、受信者 : keitai@docomo.ne.jp へ送信するようにしています。
この設定だと、hoge@example.com 宛へのメールを受信した場合、
keitai@docomo.ne.jp へ “You got a mail” というメッセージが oshirase@example.com を差出人として送信されます。
非常に簡単なメッセージです。これで良ければ、上記の設定で完了になります。
ただ、やっぱり、誰からのメールかぐらいは、メッセージに編集して送信したいですね。さらには、日本語で出力したいとも思います。
そうなってくると上記のように単純に1行では済みそうもありません。
以降に簡単に解説してみます。
日本語でのお知らせメールの設定例
先と同様にユーザのホームディレクトリに設置される .mailfilter を使って日本語のお知らせメールの設定例を以下に解説してみます。
ただ、今回は、日本語への対応処理が入ってくるので、処理が多少複雑になります。
.mailfilter でごちゃごちゃと書けなくもないですが、シェルスクリプトファイルを別途作成して、そちらでお知らせメールを送信することにしましょう。
ここでは、そのシェルスクリプトファイル名を mail-info.sh とします。
同じ ユーザのホームディレクトリに設置するものとします。
.mailfilter の例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if ( / ^To:\s* .* ( hoge@ example\.com) \s*/ :h )
{
# 着信者メールアドレスをヘッダ情報から取り出す
ADDR =getaddr( $MATCH1 )
ADDR_SIZE =length( $ADDR )
ADDR_SIZE =` expr $ADDR_SIZE - 1 `
ADDR_TO =substr( $ADDR ,0 ,$ADDR_SIZE )
# 送信者メールアドレスをヘッダ情報から取り出す
/ ^From:\s* ( .* ) / :h
ADDR =getaddr( $MATCH1 )
ADDR_SIZE =length( $ADDR )
ADDR_SIZE =` expr $ADDR_SIZE - 1 `
ADDR_FROM =substr( $ADDR ,0 ,$ADDR_SIZE )
# メールを送信する
cc "| /bin/sh $HOME /mail-info.sh $ADDR_FROM $ADDR_TO "
}
1行目
正規表現を使ってヘッダ情報から hoge@example.com 宛(To) のメールか否かを判断しています。
3行目 – 7行目
先にif分で正規表現を使ってマッチしたメールアドレス情報(括弧”()”の中) をアドレス情報のみに編集しています。
getaddr
: 文字列からメールアドレスのみを抽出します。最後に改行が付加されます。
そのあと、最後に付加された改行を削除しています。
9行目 – 14行目
10行目の正規表現で差出人のメールアドレスを抽出しています。
次に、getaddr
: 文字列からメールアドレスのみを抽出します。最後に改行が付加されます。
そのあと、最後に付加された改行を削除しています。
16行目 – 17行目
hoge@example.com 宛(To) のメールの場合は、メールをコピーして、| (パイプ)以降のコマンドを実行します。
ここでは、 mail-info.sh を shコマンドで実行します。
その際のパラメータとして、
差出人メールアドレス : $ADDR_FROM 、
受信者メールアドレス : $ADDR_TO
を指定しています。
mail-info.sh の例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/sh
# メール情報設定
# $1:from メールアドレス
# $2:to メールアドレス
from ="oshirase@example.com"
to ="keitai@docomo.ne.jp"
subject ="${1} さんからメールが着ました"
contents ="${1} さんから ${2} さんへメールが着たようです。"
# Subject設定
# UTF8 -> iso-2022-jp
subject_h ="=?iso-2022-jp?B?"
subject_b ="`echo "$subject" | iconv -f utf-8 -t iso-2022-jp | base64 | tr -d '\n'` "
subject_t ="?="
# Contents設定
# UTF8 -> iso-2022-jp
contents_jp ="`echo $contents | iconv -f utf-8 -t iso-2022-jp` "
# メール送信
echo "From: ${from} \n To: ${to} \n Subject: ${subject_h} ${subject_b} ${subject_t} \n ${contents_jp} \n .\n " | / usr/ sbin/ sendmail -t
if [ $? -eq 0 ]
then
echo "send mail success"
exit 0
else
echo "send mail failure"
exit 1
fi
6行目
お知らせメールの差出人メールアドレスを指定しています。
7行目
お知らせメールの受信者メールアドレスを指定しています。
8行目
Subject(メールタイトル)を 受信メールの差出人メールアドレス($1:第一パラメータ)を元に編集しています。
9行目
Contents(メール本文)を 受信メールの差出人メールアドレス($1:第一パラメータ)、受信者メールアドレス($2:第二パラメータ)を元に編集しています。
13行目 – 15行目
Subject(メールタイトル)をメールの文字コードに合わせて変換しています。
(ここでのスクリプトは、UTF8で記述されているものとしています。)
19行目
Contents(メール本文)をメールの文字コードに合わせて変換しています。
(ここでのスクリプトは、UTF8で記述されているものとしています。)
22行目
ここで、sendmail コマンドを使ってメールを送信しています。
上記のスクリプトを実行するには、iconv、base64、tr、sendmail コマンドは、あらかじめインストールされておく必要があります。
また、ここでは、sendmailコマンドを使ってお知らせメールを配信しましたが、一般的に使われている mail コマンドでも同じようにできます。
ただ、 mail コマンドの引数は、Linuxのディストリビューションによって異なるために、ここでは、sendmailコマンドを使っています。
mail コマンドに慣れている方は、そちらでメール送信するのも良いと思います。
最初のmaildropの設定で、送受信者のメールアドレスを抽出しているのが、まどろっこしいですが、やっていることは文字列から抽出して、改行を消去しているだけです。
また、わかりやすいように、くどいぐらい一行一行処理を分けて書いています。
そのため、ちょっと行数が多くなったので、複雑に思われるかもしれませんが、文字コードを変換してsendmailでメール送信しているだけですから、
落ち着いて、見られれば、そんなに難しくはないと思います。
ここでは、maildrop側で送受信者のメールアドレスを抽出していますが、
シェルスクリプト内でSTDIN から、メールは読み込めますから、スクリプト内ですべてを処理することもできます。
一応、maildrop側でもできますよ・・・というところを見せたかっただけです。
これでパソコンを起動せずとも、メールの受信チェックぐらいは携帯でできますね。お試しあれ。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
関連記事 :
コメントを投稿 :