メールからのデータエントリー
はじめに
メール受信エントリーモジュール「propop.exe」は、特定のメールアドレス宛のメールをPOP3経由でチェックし、Xcuteにメールの内容(添付ファイルを含む)を引き渡すモジュールです。 このモジュールを利用したサンプルアプリケーションにてメールを使ったデータエントリーの仕組みについて解説します。
propop.exeの起動
「propop.exe」は、タスクトレイ常駐型アプリケーションです。 その動作は、”iniファイル”に定義します。 ここでは、サンプルを動作させるために必要な設定項目について解説します。
今回の例では、”propop.ini”とします。
1) ”iniファイル”の下記項目について設定を行います。
# POP3 メールサーバ
Pop3Server=POP3サーバ

# POP3ユーザID
UserID=
Xcuteで利用するメールアドレスのアカウント

# POP3パスワード
POP3Pass=
上記アカウントのパスワード
上記設定については、通常のメーラを使う設定に同じです。 ただし、ここで設定するUserIDは、Xcute用に別途ご用意ください。
2) propop.exeを起動する準備をします。
propop.exeに、どの設定ファイルを利用するか指示する必要があります。 コマンドラインからコマンドを投入することもできますが、起動を簡単にするためにショートカットを利用して起動するように設定します。
propop.exeにて右クリックし、ショートカットの作成を選ぶと、下記のようにショートカットが作成されます。
propop.exeへのショートカットにて、右クリックし、プロパティを選び下記項目を設定します。
3) 作成したショートカットから、propop.exeを起動します。起動するとタスクトレイに常駐します。 設定したアカウント宛のメールを定期的にチェックするようになります。
サンプル・アプリケーションの動作
1) サンプル・アプリケーションpropop.plsをProles.exeで起動します。
2) このフォルダのstrat.htmを起動し、画面を参照してください。
データが登録されていませんので、0件の表示が出ます。
propop.iniに定義したメールアドレス宛に画像添付ありのメールを出して、タスクトレイに常駐しているpropop.exeをクリックしてメニューを出し、「今すぐメールチェック」を選択します。
propop.exeは、iniファイルに定義された間隔でメールを自動チェックしますが、即時チェックしたい場合は、このように「今すぐメールチェック」を選択することにより可能です。
先ほどブラウザで開いたリスト画面を更新してみると、下記のようにメールが登録されていることが確認できます。
メールデータの読み込み
1) ReadReportするレポートの作成
下記のようなひな形を定義し、メールからの情報を読み取ります。
メールからの情報は、この、ひな形シートにマッピングされます。その際のマッピング位置情報は、propop.ini に定義します。下記に、このサンプルでのpropop.iniのマッピング情報を示します。
# 日付
MailDate=Set_R7C3

# サブジェクト
MailSubject=
Set_R7C4

# メール送信者名
MailName=
Set_R7C5

# メールアドレス
MailAddr=
Set_R7C6

# メール本文
MailBody=
Set_R7C7

# メールヘッダー
MailHeader=
Set_R7C8

# 添付ファイル名マッピング開始位置
SetFileName=
Set_R8C2

# 添付ファイル実名マッピング開始位置
SetRealFileName=
Set_R10C3


このように、単純にExcelシート上にマッピングしたい場所をiniファイルに定義します。 Propop.exeは、iniに記載されたマッピング情報をもとにExcelシートにデータをマッピングします。
マッピングしたあとは、このExcelシートをXcuteにReadReportさせるわけですが、そのコマンドも、iniファイルに定義します。
# コマンド
Command=ReadReport=MailEntry

# プロジェクト
Project=
propop
プロジェクトも、iniファイルに定義します。 Propop.exeは、iniファイルを複数用意すれば、プロジェクト単位に複数起動することがでます。 ただし、メールアドレスは、プロジェクト毎に用意する必要があります。(同一のメールアドレスで複数の起動は不整合が出ます。)
ログファイルの設定
処理内容についてのログファイル保存場所の設定を行うことができます。
ログは、1日単位に保存されますが、不要な場合、nologと指定することにより、ログを出力しません。
# LogFileのPath
Log_path=./logs

# ログが不要な場合
Log_path=
nolog
メールデータの書き出し
1) WriteReportするレポートの作成
これは非常に単純であり、XcuteにおいてWebアプリケーションを作成する作法となんら変わりはありません。下記に、このサンプルで使っているひな形を示します。
アップロードされたファイルの扱いや、ブラウザに出力する場合の扱い等については、FileUpDownサンプルに同一です。ManualFileUp.xls を参照してください。
外部プログラムの呼び出し
メール本文を外部プログラムに渡し、その処理結果をpropopが受取り、XCute側に渡すことが可能です。
メール本文の内容により、XCuteに引き渡す番地がことなる場合や、外部プログラムで処理したほうが都合の良い場合に利用します。
呼び出す外部プログラムは、以下のように指定します。
# メール本文
MailBody=filter.exe
通常、MailBody部分は、メール本文のセット位置をSet_RxCy形式で指定しますが、ここを外部プログラム名とすると、そのプログラムを呼び出します。
外部プログラムは、下記の仕様にて作成します。
 ・第一引数に指定されたファイルを読み込む
 ・標準出力に、処理結果を出力する
 ・Set_RxCy=エンコードされた内容&Set_RxCy=エンコードされた内容…… という形式にて処理結果を出力する。
内容はURI形式にエンコードされる必要があります。以下に、VB.NETでのサンプルコードを示します。本例では、1から10行目までと、11行目以降でセット番地を変更しています。
Module Module1
    Sub Main()
        Dim ifilen As Integer
        Dim sArg As String, strZ As String, i As Long
        sArg = Command()
        ifilen = FileSystem.FreeFile()
        FileSystem.FileOpen(ifilen, sArg, OpenMode.Input)
        i = 0
        While Not EOF(ifilen)
            strZ = LineInput(ifilen)
            strZ = System.Web.HttpUtility.UrlEncode(strZ, System.Text.Encoding.GetEncoding("Shift-JIS"))
            If i = 0 Then strZ = "Set_R7C7=" + strZ
            If i = 10 Then strZ = "&Set_R7C8=" + strZ
            Console.WriteLine(strZ)
            i = i + 1
        End While
        FileSystem.FileClose(ifilen)
    End Sub
End Module
なお、本機能をつかうには、propop.exeが存在するフォルダに、tempフォルダが必要となります。
要約
1) メールデータの読み込みについては、このサンプルで示したMailReadレポートをご利用ください。
2) profilesフォルダにサブディレクトリを作成し、そのフォルダにメールの添付ファイルを格納したい場合は、propop.iniのFileUpPathにサブフォルダを指定して下さい。
3) 処理対象メールの最大サイズは、propop.iniのMailMaxSizeに定義します。このサイズを超えているメールは、propop.exeにて処理されず、popサーバにメールが残ったままになります。
4) メールのチェック期間は、propop.iniのCheckIntervalに定義してください。秒単位の設定となります。
メールからのデータエントリーに関するセキュリティの考え方
propop.exeは認証等のしくみはもっておらず、特定の相手からのみメールを受け付けるかどうかは、XcuteのExcelシート上でジャッジする必要があります。
特定のメールアドレスであったらReadReportするなどの工夫や、メール本文やサブジェクトに、許可キーのような情報をメール送信者につけさせるなどして、許可された人からのメールか判断してください。
Xcuteがなんらかのエラーを返した場合でも、propop.exeはそのエラーを関知しません。 また、エラーメールをメール送信者に送信したりしません。 エラーが発生した場合に、メール送信者にエラーメールを送信したい場合は、promail.exeを利用してメールを送信して下さい。
(promailサンプルのマニュアルpromailManual.xls)
望まれない人からのデータエントリー以外にも、許可された人から巨大な添付ファイルをつけたメールをエントリーされる可能性もあります。また、メール本文やサブジェクトが異常に長い場合も考えられます。 ReadReportするひな形シートには必ず入力規則を設定し、これを防いで下さい。巨大な添付ファイルについては、受け付けるメールの最大サイズ(propop.iniのMailMaxSize)を定義することにより、処理を受け付けません。
以上