メール受信(ジョブによる時間指定)
最終更新日: 2020年3月14日
R8 | R9
ここでは、受信メールを保存するモデル「注文」を用意します。図1で赤枠の部分は、受信したメールを取り込むために用意したものです。
「差出人」「宛先人」「Cc登録先」は「繰り返しとして利用する」設定を行います。
メニューから「メール > 受信」タブを開きます。設定の詳細は次のとおりです。
「サポート>管理者ガイド>準備:ジョブ実行アカウントを利用可能にする」の手順に従って jobadmin アカウントを有効にします。
メール送信の対象モデルの操作権限(プリンシパル)をjobadminアカウントに与える必要があります。図4の例では「一般ユーザ」プリンシパルを付与した例です。
ジョブスケジュールの新規登録を行います。
上の手順4でジョブ名が選択できない場合、ビルド後に旧データをすべてインポートした可能性があります。追加したジョブは「ジョブマスタ」モデルとして用意されており、ビルド後の "data_init" フォルダにエクスポートデータが記載されていますが、旧データには存在しません。そのため、旧データを取り込んだタイミングで、ジョブ情報が古いデータとなっています。
この対応として、旧データインポート後、あらためてインポートフォルダ名に "data_init" フォルダを指定し、「システムによって提供されるモデル一覧 > ジョブマスタ」をインポートしてください。これによって(追加した)ジョブを認識できるようになります。
メール受信機能は、一定間隔を空けて実行するようにしてください。短い時間に連続して受信機能を実行すると、メールサーバおよびWagbyが稼動するアプリケーションサーバの負荷が増大します。メールサーバによっては、セキュリティ上の攻撃と解釈し、このアカウントからの受信を停止するといった可能性も生じます。
ジョブによってメールが取り込まれた例を図5に示します。
ログファイル (logs/system.log) には次のような記録が残ります。
メール本文を所定のフォーマットにしておくと、アプリケーションがメール本文の内容を自動的に解析して、各項目に値をセットします。
メール本文を次のフォーマットで記述してください。
例えば「氏名」「住所」「電話」(これらはすべて「項目名」)を項目に持つモデルに対しては、メール本文を次のように記述します。
値の開始区切り文字と終了区切り文字を指定することもできます。例えば、開始区切り文字に「<」を、終了区切り文字に「>」を指定した場合、次のようなメール本文を解析することができます。
本機能の詳細なルールは次のとおりです。
HTMLメール受信時、本文を格納する項目がテキストエリア(リッチ)の場合は、改行文字を<br/>に置き換えます。
HTMLメールはテキスト部分とHTML部分から構成されます。Wagbyのメール受信は、テキスト部分を使用します。テキスト部分の改行文字を<br/>に置換します。
このテキスト部分は、HTML部分の改行文字と必ずしも一致しません。お使いのメールソフトによって扱いが異なります。そのため、リッチテキストエリアの改行は、HTML部分の改行と異なる位置に出現することがあります。疑問が生じた場合は、取り込んだメールの「テキスト部分」の改行文字をご確認ください。
次に示すパラメータを設定することができます。
Wagby Desinger で指定した値より、ジョブパラメータの方が優先されます。運用中にメール受信者などを変更することができます。
ジョブを一時的に無効にすることができます。
ジョブの多重実行を行うことはできません。
あるジョブを 1 分毎に起動させるようにした場合、1 分後にこのジョブの実行が終了していなければ、新しいジョブは実行されません。
juserモデルに対するメール受信で、パスワードの登録も行うことができます。
メール本文に「新規パスワード」という項目を加えてください。
メール受信機能が動作しないという場合、以下の点をご確認ください。
管理処理メニューのシステムログ閲覧画面で、次の検索を行うことで確認できます。
設定
例 注文モデルを用意する
メール受信の設定
ジョブ
項目
説明
入力例
ジョブ名
このアプリケーションシステム全体で、重複しないジョブ名(英語)を指定します。
InsertOrderFromMailJob
説明
自由に記述してください。
-
起動条件
取り込んだメールをモデルに変換後、取り込むための条件を指定することができます。標準は空白(条件なし)です。対象モデルに関する項目は "${" + (項目名) + "}" で表現します。関数を使うこともできます。
(ただしこの条件に合致しても、入力チェックでエラーになった場合は、やはり取り込まれません。すなわち、この起動条件および入力チェックともに正の場合に、データベースに新規登録されます。)
メールのサブジェクトをsubject項目にセットした場合、サブジェクトが "Wagby" で始まるものだけを登録する:
FIND("Wagby", ${subject})==1)
成功時のアクション
メール受信が成功したあとに行う処理を指定します。対象モデルに関する項目は "${" + (項目名) + "}" で表現します。関数を使うこともできます。また、「=」を使った代入文を指定することもできます。
この指定を行った場合、指定された処理を実行したのちにデータベースへの書き込みを行います。そのため、何らかの理由でデータベースへの書き込みが失敗した場合、取り込まれたメールおよび成功時のアクションはいずれも無効となります。
許容する差出人アドレス
差出人アドレスを指定します。完全一致で指定します。正規表現式によるパターンマッチを指定することができます。
.*@jasminesoft.co.jp
と記載することで、ドメイン名が jasminesoft.co.jp のメールアドレスだけを取り込むことができるようになります。
添付ファイルの登録先
受信メールに添付されているファイルを登録する(このモデルの)項目名を指定します。この項目はファイル名型としてください。添付ファイルが複数あった場合は繰り返しコンテナとして定義します。
例えば繰り返しコンテナ attachments 内にファイル型の項目 filename を用意していた場合、この欄には
attachments/filename
と記述します。メールサーバ
項目
説明
入力例(Gmail利用の場合)
メールサーバ
メールサーバ名を指定します。メールサーバ名の後に「:(コロン)」を付加し、任意のポート番号を指定することもできます。
pop.gmail.com:995
アカウント名
受信用のメールアカウントを指定します。
YOURNAME@gmail.com
パスワード
受信用のパスワードを指定します。
プロトコル
POP3, IMAP, POP3 over SSL, IMAP over SSL のいずれかを選択できます。未選択時は POP3 となります。
POP3 over SSL
APOP認証
APOP認証を利用する場合はチェック欄を有効にします。
(Gmailではチェックしない)
受信先の詳細
項目
説明
補足
件名
受信メールの件名 (Subject) の値を転記する(このモデルの)項目名を指定します。この値が空白の場合、件名の情報は無視されます。
文字列型としてください。
差出人
受信メールの差出人 (From) の値を転記する(このモデルの)項目名を指定します。この値が空白の場合、差出人の情報は無視されます。
文字列型(メールアドレス属性)で、かつ繰り返し指定を行ってください。
宛先人
受信メールの宛先人 (To) の値を転記する(このモデルの)項目名を指定します。この値が空白の場合、宛先人の情報は無視されます。
文字列型(メールアドレス属性)で、かつ繰り返し指定を行ってください。
CC
受信メールのカーボンコピー (CC) の値を転記する(このモデルの)項目名を指定します。この値が空白の場合、CC の情報は無視されます。
文字列型(メールアドレス属性)で、かつ繰り返し指定を行ってください。
送信日付
受信メールの送信日付の値を転記する(このモデルの)項目名を指定します。この値が空白の場合、送信日付の情報は無視されます。
日付型/日付時刻型/時刻型としてください。
本文
受信メールの本文 (BODY) の値を転記する(このモデルの)項目名を指定します。この値が空白の場合、本文の情報は無視されます。
文字列型としてください。大量の文字列を記録する場合は、テキストエリアの利用を推奨します。
本文の自動解析機能
項目
説明
初期値
有効にする
この欄をチェックした場合、受信メールの本文を自動解析し、モデルの各項目に値を設定します。(後述)
値部分の開始区切り文字
本文の自動解析機能を有効にしたとき、値部分の開始区切り文字を指定できます。
未指定時は「半角スペース」となります。
値部分の終了区切り文字
本文の自動解析機能を有効にしたとき、値部分の終了区切り文字を指定できます。
未指定時は「改行」となります。
対象項目
本文の自動解析機能を有効にしたとき、解析対象項目を指定します。
未指定時は全項目が対象となります。
区切り文字の扱い
本文の自動解析機能を有効にしたとき、開始区切り文字と終了区切り文字の全角・半角文字区分を無視するかどうかを指定します。
未指定時は全角文字と半角文字を区分します。
ジョブスケジュールの設定
ジョブ専用アカウントjobadminの設定
スケジュールの設定
ジョブ名が選択できない場合
メール受信の間隔
例
2014-10-01 14:33:00 [INFO jp.jasminesoft.jfc.JFCJobTriggerListener triggerFired] (LOGONUSER@localhost) JFC-00902:ジョブ InsertOrderFromMailJob を開始しました。
2014-10-01 14:33:00 [INFO jp.jasminesoft.jfc.LogonStatusManager addUserName] (LOGONUSER@localhost) JFC-90000:アカウント jobadmin がセッションに追加されました。現在の同時接続数は 1 で、合計セッション数は 2 です。
2014-10-01 14:33:01 [INFO jp.jasminesoft.wagby.app.order.InsertOrderFromMailProcessor process] Folder opened
2014-10-01 14:33:01 [INFO jp.jasminesoft.wagby.app.order.InsertOrderFromMailProcessor process] Total mail count: 1
2014-10-01 14:33:01 [INFO jp.jasminesoft.wagby.app.order.InsertOrderFromMailProcessor process] _mcount: 1
2014-10-01 14:33:02 [INFO jp.jasminesoft.wagby.app.order.InsertOrderFromMailProcessor process] Message-ID: <75F5BB63-D2CC-47F1-A004-6E0982C7E865@YOURDOMAIN.co.jp>
2014-10-01 14:33:03 [INFO jp.jasminesoft.wagby.app.order.InsertOrderFromMailProcessor process] Folder closed
2014-10-01 14:33:03 [INFO jp.jasminesoft.jfc.job.JFCBaseJobBean executeInternal] (jobadmin@localhost)1 mail is processed.
2014-10-01 14:33:03 [INFO jp.jasminesoft.jfc.User logoff] (LOGONUSER@localhost) JFC-00028:アカウント jobadmin のログオフを行います。
2014-10-01 14:33:03 [INFO jp.jasminesoft.jfc.LogonStatusManager removeUserName] (LOGONUSER@localhost) JFC-90003:アカウント jobadmin がセッションから除かれました。現在の同時接続数は 0 で、合計セッション数は 0 です。
2014-10-01 14:33:03 [INFO jp.jasminesoft.jfc.JFCJobTriggerListener triggerComplete] (LOGONUSER@localhost) JFC-00900:ジョブ InsertOrderFromMailJob は正常に終了しました。
メール本文の自動解析
氏名 山田 太郎
住所 沖縄県
電話 098-000-0001
氏名<山田 太郎>
住所<沖縄県>
電話<098-000-0001>
備考<改行つきの
文章も
格納できます。>
メール本文をリッチテキストエリアに格納する
詳細
ジョブに指定できるパラメータ
ワンポイント
パラメータ名
説明
記述例
mailhost
メールホスト
mail.yourdomain.com
username
メール受信を行うアカウント
yamada
password
メール受信を行うアカウントのパスワード
protocol
プロトコル
pop3
pop3s
APOP
APOP認証の使用有無
true
analyzeBody
本文の自動解析機能の有効無効
true
dataStartChar
値部分の開始区切り文字
[
dataEndChar
値部分の終了区切り文字
]
debug
デバッグモードを有効にします。
system.log に mailhost, username, password の情報が表示されます。設定した情報でメールサーバにアクセスされているかどうかを確認することができます。
true
readonly
メールボックスを読み込み専用とします。メールサーバからメールは削除されません。未設定時はfalse(読み込み専用ではなく、正常に処理したメールはメールボックスから削除する)です。
true
removeErrorMail
処理途中でエラーが発生したメールについてもメールサーバから削除します。
true
JavaMailDebug
ジョブを実行するたびに、詳細なログを出力します。[詳細...]
true
ジョブの実行を停止する
実行結果をメールで送信する
多重実行の抑制
juserモデルのメール受信
仕様・制約
トラブルシューティング
ジョブが起動されたかどうかを調べる
[検索条件]
タイプ:INFO
キーワード:JFC-00902
N 分間隔でメール受信を行うようにしているが起動しない
ジョブスケジュール設定で「時」の部分に数値(例:0など)が含まれていませんか。この場合、0時になった場合のみ起動するという意味になります。「時」の部分を「*」とすることで解決します。
メール受信が失敗することがある
(1) メール受信の間隔が短すぎませんか。前のジョブが終了していないにも関わらず次のジョブが起動してしまうと、受信に失敗します。または、頻繁なメール受信はメールサーバ側でセキュリティ上の攻撃と誤認識される可能性もあります。
(2) 複数のメール受信ジョブが登録されていませんか。同じメールボックスを同時に種類の違う複数のメール受信ジョブがアクセスした場合に、 後から起動したジョブが受信に失敗します。
解析に失敗する
Linux 環境でご利用の場合、ロケールが日本語になっていることを確認してください。日本語以外だと失敗します。
データベース書き込みエラーが発生する
一般に、メール本文は長大なテキスト文字列となります。本文を取り込む場合、データベースの標準的な「文字列型」では、文字列の格納領域の制限により、保存エラーとなることがあります。これは運用時のログファイル (logs/system.log) にエラーとして記録されます。
この場合、ご利用となるデータベースが提供する「長大なテキスト文字列を保存できる型」を別途、指定するとよいでしょう。例えばデータベースに PostgreSQL をご利用の場合、"text" と指定することで 1GB までの文字列を保存できるようになります。
または Wagby の文字列処理関数を用いて、指定した文字列長でカットしたものを保存するというアイデアもあります。
毎回、同じメール読み込みでエラーが発生する
何らかの理由でエラーになったメールは、受信ジョブの実行の都度、毎回受信エラーになってしまいます。 受信エラーとなるメールが発生した場合は、別のメールソフト等で該当するメールを受信してメールボックスから削除してください。
ただし毎回受信エラーとなるメールの原因は、モデルの設計にあります。ほとんどの場合、定義を見直して頂くことで解決できます。例えば次のようなものです。
- 取り込むデータと項目の型の不一致
- ユニーク制約がついている項目に重複する値をセット
- 必須項目にデータがセットされていない
添付ファイルの処理が失敗することがある
添付ファイルのファイル名が日本語文字を含む場合に、このような現象が発生することがあります。
例えばメールサーバが日本語を含むファイル名に対して何らかの処理を行い、ファイル名に "?" など、Windows OS が扱うことができない文字を埋め込んでしまうといったケースです。Wagbyは、そのファイル名を使ってファイルを保存しようとしますが、Windows OS がこれをエラーとして扱うため、メール受信処理に失敗します。
このような場合は(メールに添付された)ファイル名を変更するか、または「文字列-ファイル > 保存ファイル名の扱い」で、"オリジナルファイル名をそのまま使う" を選択しないようにします。
詳細なログの取得
ジョブパラメータ JavaMailDebug を true
とすることで、受信状況の詳細なログを取得できます。ファイル名は次のとおりです。
javamail-Insert<モデルID>FromMailProcessor-yyyyMMdd_HHmmss.log
例えばモデル Model1 のメール受信ジョブ実行時に "javamail-InsertModel1FromMailProcessor-20150624_194742.log"というログファイルが用意されます。ログの内容は次のようになります。
DEBUG: getProvider() returning javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc]
DEBUG POP3: connecting to host "YOURMAILSERVER", port 995, isSSL true
S: +OK Dovecot ready. <73b1.e.5583d560.2eAI44Sem3e4iVvBMeQCaQ==@XXX.jasminesoft.co.jp>
C: USER [※ユーザ名]
S: +OK
C: PASS [※パスワード]
S: +OK Logged in.
C: STAT
S: +OK 2836 266374220
C: NOOP
S: +OK
C: TOP 1 0
S: +OK
Return-Path: <yamada@jasminesoft.co.jp>
X-Original-To: who@jasminesoft.co.jp
Delivered-To: who@jasminesoft.co.jp
Received: from XXX.jasminesoft.co.jp (localhost [127.0.0.1])
....
Sender: suzuki@jasminesoft.co.jp
Errors-To: adm@jasminesoft.co.jp
.
C: QUIT
S: +OK Logging out.
[※ユーザ名]や[※パスワード]の部分にPOP認証の際のユーザ名、パスワードが入ります。また、すべての受信メールの内容が出力されます。このように個人情報が多く含まれますので、取扱いには注意してください。開発途中のデバッグ用途以外では、このログの出力を行わないようにしてください。