4

私が取り組んでいるアプリケーションについて、上司からリクエストがありました。基本的に、外部クライアントが Excel ファイルを送信するための電子メール アドレスを設定しています。

必要なのは、このアドレスに送信された電子メールを自動的に取得する方法です。これにより、添付ファイルを取得して処理し、フォルダーに保存できます。

どこから始めればよいかについての情報も役立ちます。\

注: これを行うためにロータス ノート サーバーを使用していますが、一般的な方法がより役に立ちます (可能であれば)。

4

9 に答える 9

10

電子メール -> メールサーバー -> [何か] -> ディスク上のファイル。

ディスク上のファイルは非常に簡単に解析できます。 JavaMailを使用してください。

[何か] は次のようになります。

于 2008-09-11T14:46:37.203 に答える
2

編集:私が最初にこの回答を書いて以来、ワイザーは移動し、現在は単体テストツールであると主張しているため、以下の回答を少し塩で取ってください...


Svrist の回答は適切ですが、彼の中間ステップ (後で Java システムがピックアップするためにメールをディスクに書き込むメールサーバー) を避けたい場合は、Wiserを使用できます。

Wiser では、Java 内のメールサーバーを起動できます。

Wiser wiser = new Wiser();
wiser.setPort(2500);
wiser.start();

次に、定期的にメールをポーリングできます。

for (WiserMessage message : wiser.getMessages())
{
    String envelopeSender = message.getEnvelopeSender();
    String envelopeReceiver = message.getEnvelopeReceiver();

    MimeMessage mess = message.getMimeMessage();

    // mail processing goes here
}
于 2008-11-10T16:19:09.903 に答える
1

データベース内のメールを使用します (Domino 管理者が設定できますが、ヘルプ ファイルにも記載されています)。

そのデータベースでは、定期的に実行してすべての新しいドキュメントを処理するエージェントを作成できます。このエージェントは、NotesRichTextItem クラスの EmbeddedObjects プロパティと NotesEmbeddedObject クラスの ExtractFile メソッドを使用して、添付ファイルのハンドルを取得し、指定した場所に抽出します。

たとえば、次のスクリプトは、ドキュメントの Body アイテムにあるすべての添付ファイル、オブジェクト リンク、および埋め込みオブジェクトを調べます。添付ファイルが見つかるたびに、そのファイルを C ドライブの SAMPLES ディレクトリにデタッチし、ドキュメントから添付ファイルを削除します。

Dim doc As NotesDocument
Dim rtitem As Variant
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
  Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) Then
      Call o.ExtractFile( "c:\samples\" & o.Source )
      Call o.Remove
      Call doc.Save( False, True )
    End If
  End Forall
End If
于 2008-09-16T20:32:20.667 に答える
1

私は最近、Domino サーバー上の Java エージェントでかなりの作業を行いました。Domino 8.5 サーバーは Java 6 とその埋め込みをサポートしているため、Domino 開発の経験が少しあれば、新しいメールが到着したときに実行されるエージェントを作成するのに長い時間はかかりません。LotusScript ではさらに簡単ですが、より専門的なスキルが必要であり、おそらく請負業者に依頼する必要があります。

発生する可能性が高い制限は、抽出されたファイルに関するものです。Domino サーバーのファイル構造に簡単に配置できますが、別のサーバーに配置することは OS セキュリティによって制限される場合があります。

于 2008-09-16T11:23:46.353 に答える
0

NetCommonsパッケージのPOP3Clientを試してください。これにより、Javaプログラムは、特定のアカウントの新着メールを任意の間隔(数分ごと?1時間ごと?)でチェックし、必要に応じてメッセージを取得/削除できます。

于 2008-09-16T16:51:35.363 に答える
0

Lotus Notes/Domino はメールを Notes データベースに保管します。ドキュメントの取得 (電子メール)、フィールド値の読み取り (From、件名)、およびファイルの分離に使用できる API があります。

API には以下が含まれます

-LotusScript (VB バリアント、Notes データベース内で利用可能)

-Java (データベース内またはデータベース外から)

-C API (外部)

-COMサーバー経由で利用可能な同じAPI

データベース内に「スケジュールされたエージェント」を (LotusScript または Java を使用して) 作成し、最後に実行された後に作成された文書を検索し、添付ファイルを検索して抽出することができます。エージェントは、ファイル システムへの書き込みやその他のプロセスの開始に必要な権限を含め、サーバー上で適切な権限を持つ ID で署名する必要があります。

データベースの外部では、LotusScript 以外の任意の API を使用してサーバー/メール データベースにログインし、クライアントまたは別のサーバーでローカルにファイルを抽出するなど、同様のプロセスに従うことができます。C API と COM にはノーツ クライアントのインストールが必要ですが、Java アプリケーションはフル インストールをしなくても CORBA/DIIOP 経由で実行するように設定できます。

詳しくは、Domino Designer のヘルプ (または C API については IBM の Web サイト) を参照してください。

これを行う「一般的な方法」については、Notes のデータにアクセスしていて、添付ファイルを抽出する必要がある場合は、これらの API が最適なオプションであると思います。アプリケーションを別のメール システムに移植することを想定している場合は、「インターフェース」を介して API ルーチンを分離することを検討してください。そうすれば、新しいメール システムをサポートするためにそのインターフェースの新しい実装を追加するだけで済みます。

于 2008-09-15T15:58:51.300 に答える
0

Domino サーバーで SMTP/POP3 を有効にできます。以前にこれを使用して、Squirrel Mail を実行しました。SMTP はリソースを少し消費しますが、作業を行うために LotusLand に降りる必要がないため、努力する価値は十分にあります。特定の電子メール ボックス (POP3 または SMTP) をチェックし、メッセージを解析して添付ファイルを取得し、必要な場所に配置する小さな Java CLI プログラムを作成するだけです。

ここにたくさんのドキュメントと例があります: http://java.sun.com/products/javamail/

このアプローチで開発したテクニックは、Lotus/Domino 固有のものよりも、将来のキャリアに広く適用できます。

于 2008-09-16T20:39:47.903 に答える
0

DIIOP を使用すると、Notes ドキュメントに比較的簡単にアクセスできます。C API の道をたどるよりもはるかに簡単です...

于 2008-09-15T16:09:29.747 に答える
0

何をするにしても、Lotus Notes のデータ構造を理解している必要があります。幸いなことに、完全に自動化されたソリューションを Notes に簡単に組み込むことができます。

最善の策は、Notes 内に組み込むことであり、新しいメールを受信するたびに自動的に実行されるように設定できます。Gary の答えはまだ終わっていませんが、経験がなければ、自分で実装する方法を理解するのはおそらく難しいでしょう。一方、有能な Notes プログラマーであれば、セットアップに 1 時間か 2 時間以上かかることはありません。

于 2008-11-10T16:11:12.663 に答える