サポート > リポジトリ > メール送受信 > メール受信(ジョブによる時間指定)
ja | en

時間指定によるメール受信を行うことができます。メール本文を解析し、データとして登録します。

例 注文モデルを用意する

ここでは、受信メールを保存するモデル「注文」を用意します。図1で赤枠の部分は、受信したメールを取り込むために用意したものです。

「差出人」「宛先人」「Cc登録先」は「繰り返しとして利用する」設定を行います。

図1 注文モデル

メール受信の設定

メニューから「メール > 受信」タブを開きます。設定の詳細は次のとおりです。

図2 メール受信設定欄

ジョブ

項目 説明 入力例
ジョブ名 このアプリケーションシステム全体で、重複しないジョブ名(英語)を指定します。 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) の値を転記する(このモデルの)項目名を指定します。この値が空白の場合、差出人の情報は無視されます。 文字列型(メールアドレス属性)で、かつ繰り返し指定を行ってください。
差出人は1人の場合が多いですが、インターネットメールの仕様では複数人を扱えるようになっています。Wagbyもこの仕様に準拠しています。
宛先人 受信メールの宛先人 (To) の値を転記する(このモデルの)項目名を指定します。この値が空白の場合、宛先人の情報は無視されます。 文字列型(メールアドレス属性)で、かつ繰り返し指定を行ってください。
CC 受信メールのカーボンコピー (CC) の値を転記する(このモデルの)項目名を指定します。この値が空白の場合、CC の情報は無視されます。 文字列型(メールアドレス属性)で、かつ繰り返し指定を行ってください。
送信日付 受信メールの送信日付の値を転記する(このモデルの)項目名を指定します。この値が空白の場合、送信日付の情報は無視されます。 日付型/日付時刻型/時刻型としてください。
本文 受信メールの本文 (BODY) の値を転記する(このモデルの)項目名を指定します。この値が空白の場合、本文の情報は無視されます。 文字列型としてください。大量の文字列を記録する場合は、テキストエリアの利用を推奨します。

本文の自動解析機能

項目 説明 初期値
有効にする この欄をチェックした場合、受信メールの本文を自動解析し、モデルの各項目に値を設定します。(後述)
値部分の開始区切り文字 本文の自動解析機能を有効にしたとき、値部分の開始区切り文字を指定できます。 未指定時は「半角スペース」となります。
値部分の終了区切り文字 本文の自動解析機能を有効にしたとき、値部分の終了区切り文字を指定できます。 未指定時は「改行」となります。
対象項目 本文の自動解析機能を有効にしたとき、解析対象項目を指定します。 未指定時は全項目が対象となります。
区切り文字の扱い 本文の自動解析機能を有効にしたとき、開始区切り文字と終了区切り文字の全角・半角文字区分を無視するかどうかを指定します。 未指定時は全角文字と半角文字を区分します。

ジョブ専用アカウントjobadminの設定

「サポート>管理者ガイド>準備:ジョブ実行アカウントを利用可能にする」の手順に従って jobadmin アカウントを有効にします。

メール送信の対象モデルの操作権限(プリンシパル)をjobadminアカウントに与える必要があります。図4の例では「一般ユーザ」プリンシパルを付与した例です。

図3 jobadminアカウントの設定

スケジュールの設定

ジョブスケジュールの新規登録を行います。

  1. 管理者権限をもったアカウントでログオンします。
  2. メニューから「ジョブ管理」「ジョブスケジュール検索」画面を開きます。
  3. 「登録画面へ」ボタンを押下し、ジョブスケジュールの新規登録処理を行います。
  4. ジョブ名から図1で設定したジョブ名を選択します。(図5)※ ジョブ名が選択できない場合、図5下欄の注意書きをお読みください。
  5. スケジュールを指定します。
  6. 「有効」フラグをチェックします。
  7. このジョブを実行するアカウント "jobadmin" を入力します。
  8. ジョブスケジュールを登録します。指定した時間になると、コマンドが実行されます。
図4 スケジュールの新規登録

ジョブ名が選択できない場合

上の手順4でジョブ名が選択できない場合、ビルド後に旧データをすべてインポートした可能性があります。追加したジョブは「ジョブマスタ」モデルとして用意されており、ビルド後の "data_init" フォルダにエクスポートデータが記載されていますが、旧データには存在しません。そのため、旧データを取り込んだタイミングで、ジョブ情報が古いデータとなっています。

この対応として、旧データインポート後、あらためてインポートフォルダ名に "data_init" フォルダを指定し、「システムによって提供されるモデル一覧 > ジョブマスタ」をインポートしてください。これによって(追加した)ジョブを認識できるようになります。

メール受信の間隔

メール受信機能は、一定間隔を空けて実行するようにしてください。短い時間に連続して受信機能を実行すると、メールサーバおよびWagbyが稼動するアプリケーションサーバの負荷が増大します。メールサーバによっては、セキュリティ上の攻撃と解釈し、このアカウントからの受信を停止するといった可能性も生じます。

ジョブによってメールが取り込まれた例を図5に示します。

図5 メール受信

ログファイル (logs/system.log) には次のような記録が残ります。

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 は正常に終了しました。

メール本文を所定のフォーマットにしておくと、アプリケーションがメール本文の内容を自動的に解析して、各項目に値をセットします。

メール本文を次のフォーマットで記述してください。

  • 項目名と値は、1行に記述します。
  • 項目名には「項目名(日本語)」を使用します。
  • 項目名と値の間に、区切り文字として半角空白文字を置きます。(各行2つ目以降の半角空白文字は値の一部として扱われます。)

例えば「氏名」「住所」「電話」(これらはすべて「項目名」)を項目に持つモデルに対しては、メール本文を次のように記述します。

氏名 山田 太郎
住所 沖縄県
電話 098-000-0001

値の開始区切り文字と終了区切り文字を指定することもできます。例えば、開始区切り文字に「<」を、終了区切り文字に「>」を指定した場合、次のようなメール本文を解析することができます。

氏名<山田 太郎>
住所<沖縄県>
電話<098-000-0001>
備考<改行つきの
文章も
格納できます。>

本機能の詳細なルールは次のとおりです。

  • 開始区切り文字および終了区切り文字は「1文字」を指定できます。
  • 開始区切り文字に半角スペース以外の文字を指定すると、項目名に半角スペースが含まれていても解析できるようになります。
  • 終了区切り文字に改行以外の文字を指定すると、メール本文中に空白および改行が含まれていても解析できるようになります。
  • 項目名の前に余分な空白が含まれているような場合でも正しく解析処理されます。
  • モデル参照項目にも対応しています。この場合はコードではなく「値」(内容部)を記述してください。
  • 本文解析処理後に、自動計算および参照連動の解決処理も行われます。
  • 「メール受信設定」定義で「〜の登録先」が指定された場合、項目の値はメール本文解析結果より「〜の登録先」指定が優先されます。例えば「件名の登録先」として "subject" 項目を指定していた場合、メール本文解析で subject 項目に値が設定された場合であっても、「件名の登録先」で指定した項目の値に上書きされます。

HTMLメール受信時、本文を格納する項目がテキストエリア(リッチ)の場合は、改行文字を<br/>に置き換えます。

詳細

HTMLメールはテキスト部分とHTML部分から構成されます。Wagbyのメール受信は、テキスト部分を使用します。テキスト部分の改行文字を<br/>に置換します。

このテキスト部分は、HTML部分の改行文字と必ずしも一致しません。お使いのメールソフトによって扱いが異なります。そのため、リッチテキストエリアの改行は、HTML部分の改行と異なる位置に出現することがあります。疑問が生じた場合は、取り込んだメールの「テキスト部分」の改行文字をご確認ください。

次に示すパラメータを設定することができます。

Wagby Desinger で指定した値より、ジョブパラメータの方が優先されます。運用中にメール受信者などを変更することができます。
パラメータ名 説明 記述例
mailhost メールホスト mail.yourdomain.com
username メール受信を行うアカウント yamada
password メール受信を行うアカウントのパスワード
protocol プロトコル pop3
pop3s
APOP APOP認証の使用有無 true
analyzeBody 本文の自動解析機能の有効無効 true
dataStartChar 値部分の開始区切り文字 [
dataEndChar 値部分の終了区切り文字 ]
debug デバッグモードを有効にします。 system.log に mailhost, username, password の情報が表示されます。設定した情報でメールサーバにアクセスされているかどうかを確認することができます。 true
removeErrorMail 処理途中でエラーが発生したメールについてもメールサーバから削除します。 true
JavaMailDebug ジョブを実行するたびに、詳細なログを出力します。[詳細...] true

ジョブを一時的に無効にすることができます。

  1. 管理者権限をもったアカウントでログオンします。
  2. メニューから「ジョブ」「ジョブスケジュール検索」画面を開きます。
  3. 該当する「ジョブスケジュール」を検索し、更新画面を開きます。
  4. 「有効」フラグについているチェックをはずし、保存します。
図6 ジョブを無効にする

ジョブの実行結果をメールで送信することができます。

ジョブの多重実行を行うことはできません。

あるジョブを 1 分毎に起動させるようにした場合、1 分後にこのジョブの実行が終了していなければ、新しいジョブは実行されません。

juserモデルに対するメール受信で、パスワードの登録も行うことができます。 メール本文に「新規パスワード」という項目を加えてください。

  • 本機能はジョブが起動している間、指定した間隔でメールを受信し続けます。それらのメールは「受信済み(既読)」となります。これを未受信の状態に戻すことはできません。また、条件によって受信しない、ということもできません。
  • 項目の値を参照した、条件付き権限管理を設定することはできません。権限管理の式はストアモデルの値を使いますが、メール受信時はストアモデルが空のためです。画面からの処理で条件付き権限管理を用いる必要がある場合、メール受信用のサブモデルを定義して、併用してください。

メール受信機能が動作しないという場合、以下の点をご確認ください。

ジョブが起動されたかどうかを調べる

管理処理メニューのシステムログ閲覧画面で、次の検索を行うことで確認できます。

[検索条件]
タイプ:INFO
キーワード:JFC-00902

N 分間隔でメール受信を行うようにしているが起動しない

ジョブスケジュール設定で「時」の部分に数値(例:0など)が含まれていませんか。この場合、0時になった場合のみ起動するという意味になります。「時」の部分を「*」とすることで解決します。

メール受信が失敗することがある

(1) メール受信の間隔が短すぎませんか。前のジョブが終了していないにも関わらず次のジョブが起動してしまうと、受信に失敗します。または、頻繁なメール受信はメールサーバ側でセキュリティ上の攻撃と誤認識される可能性もあります。

(2) 複数のメール受信ジョブが登録されていませんか。同じメールボックスを同時に種類の違う複数のメール受信ジョブがアクセスした場合に、 後から起動したジョブが受信に失敗します。

データベース書き込みエラーが発生する

一般に、メール本文は長大なテキスト文字列となります。本文を取り込む場合、データベースの標準的な「文字列型」では、文字列の格納領域の制限により、保存エラーとなることがあります。これは運用時のログファイル (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認証の際のユーザ名、パスワードが入ります。また、すべての受信メールの内容が出力されます。このように個人情報が多く含まれますので、取扱いには注意してください。開発途中のデバッグ用途以外では、このログの出力を行わないようにしてください。