メール受信をトリガーにし、件名、送信者などの条件でプログラムを実行して送信者に返信するには

2020年2月25日

mailOne

https://www.yamamototakashi.com/soft/mailone/download.html

条件にあったものを特定のフォルダにMH形式(eml)で保存しプログラム、バッチファイルを実行します。ISO-2022-JP形式のsubjectの条件判定と日本語が入ったメールbodyの文字化けを考慮する必要があります。

Sylpheed

https://sylpheed.sraoss.jp/ja/
シンプル、軽量かつ高機能で使いやすいメールソフトですが、MH形式で条件にあったものをバッチファイル、プログラムで実行でき特定の受信フォルダに保存できます

その他のソフトでは

・Becky!
・Thunderbird Mailbox Alert https://addons.thunderbird.net/ja/thunderbird/addon/mailbox-alert/

・OUTLOOK
以前はOUTLOOKもできていたようですがレジストリを変更すると元に戻るようです
https://blogs.technet.microsoft.com/outlooksupportjp/2017/12/29/rule_security/



レジストリキー : HKEY_CURRENT_USER\Software\Microsoft\Office\xx.0\Outlook\Security
名前: EnableUnsafeClientMailRules
種類: REG_DWORD
値: 1 (有効)
※レジストリ キーのパス中にある xx は以下の通り
Outlook 2010 の場合 : 14
Outlook 2013 の場合 : 15
Outlook 2016 の場合 : 16




Fetchmail & Procmail

unixで使用されているものです。MH形式(eml)で受信しprocmailで条件判定してプログラムを実行できます
https://linuxjm.osdn.jp/html/fetchmail/man1/fetchmail.1.html

cygwinにてwindowsで使用できます

php-mime-mail-parser

php-mime-mail-parserはメールパーサです。MH形式のものからfrom,to,subject,body,attatchを抽出できます。
これを使ってメールファイルから必要なものを抜き取ってバッチファイルで操作できます。PHPのインストールが必要です。


[mailfrom.php]
<?php
require "d:/php/php726/vendor/autoload.php"; 
$input1 = $_SERVER['argv']][[1]]; 
$path = $input1; 
$Parser = new PhpMimeMailParser\Parser(); 
$Parser->setText(file_get_contents($path)); 

$addressesFrom = $Parser->getAddresses('from'); 
echo $addressesFrom[0]['address']; 
?> 
 
本文、件名は下記のように変更

$text = $Parser->getMessageBody('text'); 
echo $text; 

$subject = $Parser->getHeader('subject'); 
echo $subject; 

添付ファイルは
[mailattach.php]
<?php
 require "d:/php/php726/vendor/autoload.php";
 $input1 = $_SERVER['argv'][1];
 $attach1 = $_SERVER['argv'][2];
 $path = $input1;
 $Parser = new PhpMimeMailParser\Parser();
 $Parser->setText(file_get_contents($path));
 $attach_dir = $attach1;
 $include_inline = true;
 $Parser->saveAttachments($attach_dir ,[$include_inline]);
 $attachments = $Parser->getAttachments([$include_inline]);
//  Loop through all the Attachments
 if (count($attachments) > 0) {
     foreach ($attachments as $attachment) {
         echo 'Filename : '.$attachment->getFilename()."\n";
     }
 }
 ?>

CMAIL WRITER

CMAIL WRITERはsmtpクライアントでメールをコマンドラインで送信できます
https://www.vector.co.jp/soft/win95/net/se069973.html
http://espresso3389.hatenablog.com/entry/20080826/1219739382
メール受信したあとに返信するときに使用できます。オプションをつけるとMH形式のファイルを作成できます。

SMAIL

SMAIL 送信専用コマンドラインメールソフトです。仕事で使うには連絡が必要のようです。メール受信したあとに返信するときに使用できます
https://www.picolix.jp/disp2.html

fake sendmail

MH形式のメールをそのまま送信できます。メール受信したあとに転送するときに使用できます
https://www.glob.com.au/sendmail/

Mercury Mailもあります
http://www.pmail.com/

またXAMPPのインストール時に「Fake Sendmail」を選択できるようです。

これらのソフトを使用するとwindowsでメール受信の自動化を実現できます。

サンプル

Sylpheed
php-mime-mail-parser
CMAIL WRITERの組み合わせなど

::------------------------
::sample.bat [infile]
::------------------------
::------------------------
::EMLからfrom抽出
::------------------------
php mail2from.php %1>%~n1fromb.txt
::------------------------
::fromファイル からBOM取る
::------------------------
nkf32 -w %~n1fromb.txt > %~n1from.txt
::------------------------
::EMLからtitle抽出
::------------------------
php mail2subject.php %1>%~n1subjectb.txt
::------------------------
::titleファイル SJIS
::------------------------
nkf32 -s %~n1subjectb.txt > %~n1subjects.txt
::------------------------
::EMLから本文抽出
::------------------------
php mail2body.php %1> %~n1textb.txt
::------------------------
::本文ファイルからBOM取る
::------------------------
nkf32 -s %~n1textb.txt > %~n1texts.txt
::------------------------
::添付ファイル抽出
::------------------------
md attach\%~n1
php mail2attach.php %1 attach\%~n1
::------------------------
::転送メール cmail.cfg
::------------------------
echo #自動作成>pdf2text.cfg
echo -m %~n1texts.txt>>pdf2text.cfg
echo -a snd@mail.com>>pdf2text.cfg
echo -L rcv@mail.com/pass>>pdf2text.cfg
echo -S +mail.jp>>pdf2text.cfg
echo -x %cmailfo%sig.doc>>pdf2text.cfg
for /F "tokens=1" %%a in ( %~n1from.txt ) do (
 echo -t %%a>>pdf2text.cfg
)
::デリミタを空白にしない
for /F "tokens=1 delims=" %%a in ( %~n1subjects.txt ) do (
 echo -s "Conversion:%%a">>pdf2text.cfg
)
::------------------------
::text変換
::------------------------
for /r attach\%~n1 %%a in (.pdf) do (  
 pdftotext -layout -encShift-JIS "%%~fa" 
) 
for /r attach\%~n1 %%a in (.pdf) do (
 pdfimages -raw "%%~fa" "%%~fa"
)
for /r attach\%~n1 %%a in (.tmp) do (  del "%%~fa" ) 
::------------------------ ::ocr text変換 ::-------------------
for /r attach\%~n1 %%a in (.jpg) do (
  tesseract  "%%~fa"  "%%~fa" -l jpn
)
 for /r attach\%~n1 %%a in (.png) do (  tesseract  "%%~fa"  "%%~fa" -l jpn ) for /r attach\%~n1 %%a in (.gif) do (
  tesseract  "%%~fa"  "%%~fa" -l jpn
)
::----------------
for /r attach\%~n1 %%a in (.) do (
 echo -f "%%~fa">>pdf2text.cfg
)
::
::------------------------
::転送メール
::------------------------
cmail -C pdf2text.cfg
del /q attach\%~n1
rd attach\%~n1
del %~n1subjectb.txt
del %~n1subjects.txt
del %~n1fromb.txt
del %~n1from.txt
del %~n1textb.txt
del %~n1texts.txt

参考

winmail.datのデコード
ytnef https://github.com/Yeraze/ytnef
tnef https://github.com/verdammelt/tnef

pdfのテキスト化
 pdftotext.exe pdfimages.exe http://www.xpdfreader.com/download.html
 ocr https://opensource.google/projects/tesseract

かなふり
 MeCab https://taku910.github.io/mecab/
 KAKASI http://kakasi.namazu.org/index.html.ja]


windows

Posted by eightban