こんにちは。CData Software Japanの色川です。
データのやりとりには、さまざまなツールやテクノロジが溢れていますが、メールでのEDI など、メールボックスを通じてデータの授受をするケースはまだまだ多いですよね。
この記事では、メールを自動的に受信して、添付ファイルの内容をkintone のアプリに連携する方法をご紹介します。
ArcESB とは?
ファイル転送(MFT)とSaaSデータ連携をノーコードで実現できるデータ連携ツールです。ファイル・データベース・SaaS API、オンプレミスやクラウドにある様々なデータをノーコードでつなぐ事ができます。
この記事のシナリオ
この記事では、最近ご相談頂いた「パスワード付zip 圧縮されたテキストファイルが添付されたメールを自動的に受信して、テキストファイルの内容をそのままkintone のアプリに連携する」シナリオを作成します。
メール連携では、メールヘッダや本文、添付ファイルやその中身など、連携したいデータの要素や構造が検討シーンごとに異なりがちです。そんな場面ではArcScript の豊富な機能と柔軟さが頼りになります。
この記事では、テキストファイルの内容全体を1レコードとして使うケースを例にしていますが、添付されるデータがCSV ファイル等でファイルの1行を1レコードとして扱うような場合は、こちらの記事を参考にしてください。
必要なもの
この記事のシナリオでは以下の製品を利用します。すべて30日間のトライアルが提供されています。ぜひお手元で試してみてください。
製品のインストール等はこちらの記事を参考にしてください。
kintone
この記事では、こちらのように添付付き受信メール1通に対して、1レコードを構成するアプリを作成しました。
Date、From、Subject などのメールヘッダの情報とともに、添付されているテキストファイルの内容をText 項目に登録します。
Gmail
この記事では、自動受信したいメールボックスとしてGmail を利用します。このようなテキストファイルをパスワード付きzip 圧縮したメールを、InBox に用意しました。
ArcESB の基本的な使い方
ArcESB の起動方法や基本的なフローの作り方についてはこちらをご覧ください。
それでは実際にそれぞれの連携フローを作成していきます。
連携フローの概要
このシナリオで作成する連携フローは以下のような流れになっています。
コネクタ | 内容 | |
---|---|---|
1 | Email Receive | メール(添付ファイル)の受信 |
2 | Zip | zip ファイルの解凍(展開) |
3 | Script | 解凍されたtext ファイルの読込み(XML 化) |
4 | XML Map | 3.の情報を5.にマッピング |
5 | CData | kintone にUpsert |
Email Receive コネクタの設定
最初にフローの起点となるEmail Receive コネクタを配置し、メール(添付ファイル)受信の設定をします。コアカテゴリから「Email Receive」コネクタを選択し、フローキャンバスへ配置します。
次にメールサーバ接続の設定をします。この記事ではGmail を利用しますので、Gmail へIMAP での受信を設定します。
次にユーザアカウント認証の設定をします。この記事では、基本認証を利用していますが、もちろんOAuth 2.0 での認証にも対応しています。
次にダウンロードに関する設定をします。この記事では、対象メールの添付ファイル(zip)を取得したいので、ダウンロードの種類を「添付ファイル」に設定します。
この記事では、添付ファイル以外にDate、From などのメールヘッダも後続のフローに連携したいので、IMAP ヘッダー:
プロパティを利用します。このプロパティに指定されたIMAP メールメッセージのヘッダーは、ダウンロードされたフローメッセージ(この記事では添付ファイル)のメタデータとして後続のフローに連携されます。
これで添付ファイルのダウンロード設定は完了です。
アウトプットタブから「受信」を実行し、添付ファイルを受信できることを確認します。
Zip コネクタの設定
次にzip ファイルを解凍(展開)するためのZIP コネクタを配置します。コアカテゴリから「ZIP」コネクタを選択し、フローキャンバスへ配置します。
オペレーションで「解凍」を選択します。アーカイブ形式に「Zip」を選択し、複合化パスワードを設定します。
この記事ではZip 形式ですが、ZIP コネクタではさまざまなアーカイブ形式をサポートしています。
Script コネクタの設定
この記事では、レコード形式ではないテキストファイルのデータを1レコードとしてそのまま連携しますので少し工夫が必要です。ArcScript を利用してテキストファイルを読込み、以下のような構造のXML にして、後続のフローでマッピングできるようにします。
<Items> <Item> <Date>受信したメールヘッダの値(Date)</Date> <From>〃(From)</From> <Subject>〃(Subject)</Subject> <text>添付されたテキストファイルの内容</text> </Item> </Items>
コアカテゴリから「Script」コネクタを選択し、フローキャンバスへ配置します。
<!-- インプットファイルの読込み --> <arc:set attr="file.file" value="[FilePath]" /> <arc:set attr="file.encoding" value="UTF-8" /> <arc:call op="fileRead" in="file" out="out"> <arc:set attr="work.data" value="[out.file:data]" /> </arc:call> <!-- 連携されたメタデータ(メールヘッダ)とインプットファイルの内容をXML 化 --> <arc:set attr="fileOut.data"> <Items> <Item> <Date>[Header:Date | xmlencode()]</Date> <From>[Header:From | xmlencode()]</From> <Subject>[Header:Subject | xmlencode()]</Subject> <text>[work.data | xmlencode()]</text> </Item> </Items> </arc:set> <!-- アウトプットファイルの書込み --> <arc:check attr="fileOut.data"> <arc:set attr="fileOut.filename" value="test.xml" /> <rsb:set attr="fileOut.encoding" value="UTF-8" /> <arc:push item="fileOut" /> <arc:else> <arc:throw code="NoData" desc="No File Data."/> </arc:else> </arc:check>
ここまでのコネクタをフローでつないで、保存します。
Email Receive コネクタのアウトプットタブから受信して、Script コネクタのアウトプットタブでXML 化されていることを確認します。
あとでマッピングで利用するために、Script コネクタのアウトプットタブからダウンロードしておきます。
スクリプト欄で指定したように、このような内容でxml 出力されていることを確認します。
<Items> <Item> <Date>[Date の値]</Date> <From>[From の値]</From> <Subject>問合せメールサンプル</Subject> <text>お世話になっております。株式会社〇〇の□□です。 下記製品の点検をお願いしたいです。手続き方法を教えてください。 製品: ●●●● 購入日: 20xx/xx/xx 回答をお待ちしております。</text> </Item> </Items>
CData コネクタの設定
次にフローの終点となるCData コネクタを配置し「kintone へのUpsert を設定」します。「コア」カテゴリからの「CData コネクタ」を選択し、フローキャンバスへ配置します。
コネクタの設定で、kintone への接続を設定してください。
Action は「Upsert」。対象テーブルに「問合せ」を選択します。
XMLMap の設定
このフローの最後に、Script コネクタで出力したXML データを、CData コネクタにマッピングします。
コアカテゴリから「XML Map」コネクタを配置します。
フローキャンバスの中で、Script コネクタからXML Map に。XML Map からCData コネクタへフローを繋ぎます。フローを接続したら、ワークスペースを保存してください。
フローをつないだことで、データ構成が設定されているCData コネクタのスキーマは自動で連携されていますので、ソースファイルとしてScript コネクタで出力するXML データを「サンプルファイルとしてアップロード」して指定します。
これで「パスワード付zip 圧縮されたテキストファイルが添付されたメールを自動的に受信して、テキストファイルの内容をそのままkintone のアプリに連携する」フローができあがりました。
このシナリオではシンプルなマッピングのみでデータ項目の変換などは行いませんが、ArcESB でのデータマッピングや変換について興味のある方はこちらを併せてごらんください。
連携フローの実行と確認
作成したフローを実行して確認してみましょう。
起点となるEmail Receive コネクタからフローを実行してみます。アウトプットタブから「受信」を実行します。
フローの終点となるCData コネクタのインプットタブの結果を確認します。kintone へのインプット(Upsert)が成功されていることを確認します。
メールヘッダと添付ファイルの内容がkintone に連携されていることが確認できます。
シナリオの自動実行
ArcESB ではフローを定期実行するスケジューラ機能を持っています。今回のシナリオであれば、フローの起点となるEmail Receive コネクタの「オートメーション」タブで設定することができます。1時間に1度、毎時0分に定期実行する場合は、このように設定します。
この記事で作成したフロー(テンプレート)の入手
この記事で作成したフローについては、こちら からテンプレートとして使える arcflow がダウンロードできます。
ダウンロードしたarcflow は ワークスペースをインポート
から登録できます。こちらのテンプレートを利用する時は、各コネクタでの接続情報などを、お使いの環境に併せて編集してください。
おわりに
メールでのEDI など、メールボックスを通じてデータの授受をするケースはまだまだ多いと思いますので、自動化できるメールは自動化して、効率よくデータ活用を進めたいですよね。
ArcESB はシンプルで拡張性の高いコアフレームワークに、豊富なMFT・EDI・エンタープライズコネクタを備えたパワフルな製品です。CData Drivers との組み合わせで250を超えるアプリケーションへの連携を実現できます。必要な連携を低価格からはじめられる事も大きな特長です。
皆さんのつなぎたいシナリオでぜひ ArcESB を試してみてください。
お試しいただく中で何かご不明な点があれば、テクニカルサポートへお気軽にお問い合わせください。
この記事では ArcESB™ 2021 - 21.0.8054
を利用しています。