添付ファイルのついたメールを受信して内容をノーツデータベースに格納する (準備編)

ドミノと Java エージェントを使用したサンプルとして以下のようなアプリケーションを作ってみました。

メール受信データベース(普通のメールでもかまいません。実はそちらの方がよいくらいなかんじですが、メール受信データベースを学習してみようということでこうなっています)で、CSV ファイルにオーダーの内容が入ったメールを受け付けます。

メール到着時に起動されるエージェントで、CSV ファイルの内容を取得し、オーダーデータベースにその内容をノーツ文書として保管します。
もちろんここで JDBC の処理を行なって OS/400 の RDB に格納する、といった応用編も簡単に考えられますね。

オーダーデータベースへの保管の結果、つまり受信したオーダーの処理の結果を、オーダーの送信者にメールします。

と、これだけなのですが、見ていきましょう。


メール受信データベースのセットアップ

最初にメール受信データベースのセットアップの仕方を見ていきましょう。
と思いましたが、ご存知の方もいるでしょうし、一度の HTML にあまり画像が多すぎると見にくいかなと思って、別の文書にしました。
詳細は(というほどの詳細ではありませんが)こちらを参照してみてください。

オーダー受信データベースをメールのテンプレートをもとに作成して、メール受信データベースとして登録します。


アプリケーションの内容

オーダーデータベースを作成します。

"Order" というフォームを作成します。

オーダー受信データベースで、一度処理したメールを重複して処理しないように、処理フラグとビューを使用します。

まず最初に「メール」フォームに "Processed" というフィールドを非表示で追加します。

次にその "Processed" にフラグがたっているものを除外するビューを作ります。
エージェントはこのビューをアクセスするわけです。

オーダー受信データベースに「新規メールが届いたとき」を実行時期とする Java エージェントを作成します。


Java エージェントの内容

こちらがその Java エージェントの内容です。

CSV ファイルの解析などはこちらのやり方をそのまま使っています。
上記のリンクを参照していただけばわかりますが、CSV ファイルのデータ内容によっては以下のコードに使っている標準の Java のクラスでは対応しきれない場合があります。その場合にはリンク先に書いてある方法を試してみてください。

import lotus.domino.*;
import java.io.*;
import java.util.*; 

public class JavaAgent extends AgentBase { 

              public void NotesMain() { 
                            try {
                                          Session session = getSession();
                                          AgentContext agentContext = session.getAgentContext(); 

                                          // (Your code goes here)
                                          String line;
                                          String[] stringArray;
                                          String value;
                                          String server;
                                          int l;
                                          int i;
                                          DbDirectory dbdir;
                                          Database ndb;                                        

                                          Database db = agentContext.getCurrentDatabase();
                                          View view = db.getView("NewOrder");
                                          ViewEntryCollection vn = view.getAllEntries();
                                          ViewEntry ve = vn.getFirstEntry();                                         

                                          while (ve != null) {
                                                        Document doc = (Document) ve.getDocument();
                                                        EmbeddedObject eo = doc.getAttachment("Order.csv");                                                       

                                                        if (eo != null) try {
                                                                      Reader reader = eo.getReader();
                                                                      BufferedReader bufferedreader = new BufferedReader(reader);
                                                                      stringArray = new String[50];

                                                                      l = 1;
                                                                      i = 0;                                                                     

                                                                      server = session.getServerName();
                                                                      dbdir = session.getDbDirectory(server);
                                                                      ndb = dbdir.openDatabase("Order.nsf");                                                                     

                                                                      while((line = bufferedreader.readLine()) != null) {
                                                                                    l++;
                                                                                    StringTokenizer st = new StringTokenizer(line, ",");

                                                                                    while(st.hasMoreTokens()) {
                                                                                                  value = st.nextToken();
                                                                                                  stringArray[i] = value;
                                                                                                 
i++;

                                                                                                  }

                                                                                    save(ndb, stringArray);
                                                                                    i = 0;
                                                                                    }

                                          reader.close();
                                          sendOK(db, doc);
                                          }
                                          catch(Exception e) {
                                                        e.printStackTrace();
                                                        }

                                          else {
                                                        sendError(db,doc);
                                                        }                                         

                                          doc.replaceItemValue("Processed", "1");
                                          doc.save();
                                          ve=vn.getNextEntry();
                                          }

                                          }
                                          catch(Exception e) {
                                                        e.printStackTrace();
                                                        }

                                          }                                         

                            private void sendError(Database db, Document doc) {
                                          try {
                                                        String sendto = doc.getItemValueString("SMTPOriginator");

                                                        if (sendto == null) {
                                                                      sendto = doc.getItemValueString("From");
                                                                      }

                                                        Document maildoc = db.createDocument();

                                                        maildoc.replaceItemValue("Form", "Memo");
                                                        maildoc.replaceItemValue("From", "OrderMail@asdomino.test.com");
                                                        maildoc.replaceItemValue("SendTo", sendto);
                                                        maildoc.replaceItemValue("SMTPOriginator", "OrderMail@asdomino.test.com");
                                                        maildoc.replaceItemValue("InetFrom", "OrderMail@asdomino.test.com");
                                                        maildoc.replaceItemValue("Subject", "オーダーのメールにファイルが未添付");
                                                        maildoc.replaceItemValue("Body", "オーダーのメールにファイルが添付されていませんでした。再度ご送信をお願いします。");

                                                        maildoc.send(sendto);

                                                        }
                                                        catch(Exception e) {
                                                                      e.printStackTrace();
                                                                      }

                                                        } 

                            private void sendOK(Database db, Document doc) {
                                          try {
                                                        String sendto = doc.getItemValueString("SMTPOriginator");

                                                        if (sendto == null) {
                                                                      sendto = doc.getItemValueString("From");
                                                                      }

                                                        Document maildoc = db.createDocument();

                                                        maildoc.replaceItemValue("Form", "Memo");
                                                        maildoc.replaceItemValue("From", "OrderMail@asdomino.test.com");
                                                        maildoc.replaceItemValue("SendTo", sendto);
                                                        maildoc.replaceItemValue("SMTPOriginator", "OrderMail@asdomino.test.com");
                                                        maildoc.replaceItemValue("InetFrom", "OrderMail@asdomino.test.com");
                                                        maildoc.replaceItemValue("Subject", "オーダーのメールの処理完了");
                                                        maildoc.replaceItemValue("Body", "オーダーのメールの処理が完了しました。");

                                                        maildoc.send(sendto);

                                                        }
                                                        catch(Exception e) {
                                                                      e.printStackTrace();
                                                                      }

                                                        }                                                                     

                            private void save(Database ndb, String[] array) {

                                          try {
                                                        int j = 0;

                                                        Document ndoc = ndb.createDocument();

                                                        ndoc.replaceItemValue("Form", "Order");
                                                        ndoc.replaceItemValue("Field1", array[j]);
                                                        j++;
                                                        ndoc.replaceItemValue("Field2", array[j]);
                                                        j++;
                                                        ndoc.replaceItemValue("Field3", array[j]);
                                                        j++;
                                                        ndoc.replaceItemValue("Field4", array[j]);
                                                        j++;
                                                        ndoc.replaceItemValue("Field5", array[j]);

                                                        ndoc.save();
                                                        }
                                                       catch(Exception e) {
                                                                      e.printStackTrace();
                                                                      }
                                                        }

}

[Top Pageに戻る]

Ads by TOK2