2008-09-11 7 views
4

Ich habe gerade eine Anfrage von meinem Chef für eine Anwendung erhalten, an der ich gerade arbeite. Grundsätzlich erhalten wir eine E-Mail-Adresse für einen externen Client, an den Excel-Dateien gesendet werden.Automatische Verarbeitung einer E-Mail in Java

Was ich brauche, ist eine Möglichkeit, automatisch alle an diese Adresse gesendeten E-Mails abzuholen, damit ich den Anhang übernehmen, verarbeiten und in einem Ordner speichern kann.

Alle Informationen auch dann, wenn hilfreich wäre zu starten \

. Hinweis: Wir verwenden einen Server Lotus Notes, dies zu tun, aber eine generische Art und Weise hilfreicher wäre (wenn möglich).

Antwort

9

Email -> Mailserver -> [etwas] -> Datei-auf-Festplatte.

Datei auf der Festplatte ist ziemlich einfach zu analysieren, verwenden Sie JavaMail.

Die [etwas] könnte sein:

  • Zuhörer für SMTP-Verbindungen (Overkill)!
  • Pop3/imap Client
  • Maildir/Mailbox
+1

Sie Java Mail als dass [etwas] verwenden können, kann nicht Sie? –

0

Lotus Notes/Domino speichert Mail in einer Notes-Datenbank. Es gibt APIs zum Abrufen von Dokumenten (E-Mails), Lesen von Feldwerten (Von, Betreff) und Trennen von Dateien.

APIs umfassen

-LotusScript (VB Variante innerhalb der Notes-Datenbank)

-Java (von innerhalb oder außerhalb der Datenbank)

-C API (extern)

- API über COM-Server verfügbar

Sie können einen "geplanten Agenten" in der Datenbank (mit LotusScript oder Java) erstellen kann Dokumente finden, die seit der letzten Ausführung erstellt wurden, sucht die Anhänge und extrahiert sie. Der Agent muss mit einer ID signiert sein, die über die entsprechenden Berechtigungen auf dem Server verfügt, einschließlich derjenigen, die zum Schreiben in das Dateisystem und zum Starten anderer Prozesse erforderlich sind.

Extern für die Datenbank können Sie eine beliebige API außer LotusScript verwenden, um sich bei der Server/Mail-Datenbank anzumelden, und einem ähnlichen Prozess folgen, z. Extrahieren der Dateien lokal auf einem Client oder einem separaten Server. C-API und COM erfordern eine Notes Client-Installation, aber Java-Anwendungen können so eingerichtet werden, dass sie ohne eine vollständige Installation über CORBA/DIIOP ausgeführt werden.

Weitere Informationen finden Sie in der Domino Designer-Hilfe (oder der IBM Website für die C-API).

Zu einer "generischen Art und Weise", wenn Sie auf Daten in Notes zugreifen und Anlagen extrahieren müssen, glaube ich, dass diese APIs die beste Option sind. Wenn Sie beabsichtigen, die Anwendung auf ein anderes Mail-System zu portieren, sollten Sie die API-Routinen über eine "Schnittstelle" entkoppeln, sodass Sie nur eine neue Implementierung dieser Schnittstelle hinzufügen müssen, um ein neues Mail-System zu unterstützen.

0

Sie können Notes-Dokumente relativ einfach mit DIIOP zugreifen, wäre viel einfacher als die C Api Straße hinunter ...

1

Ich habe in letzter Zeit ziemlich viel mit Java-Agenten auf Domino-Servern getan. Der Domino 8.5-Server unterstützt Java 6 und seine eingebettete Version. Es dauert also nicht lange, bis jemand mit etwas Domino-Entwicklungserfahrung einen Agenten zusammenstellt, der ausgeführt wird, wenn neue Mail ankommt. In LotusScript ist es noch einfacher, aber das erfordert mehr spezialisierte Fähigkeiten, die Sie wahrscheinlich benötigen, um einen Auftragnehmer in Anspruch zu nehmen.

Die Einschränkung, auf die Sie wahrscheinlich stoßen werden, betrifft die extrahierte Datei. Sie können sie problemlos auf der Domino Server-Dateistruktur platzieren. Sie können jedoch durch die Betriebssystemsicherheit davon abgehalten werden, sie auf einem anderen Server zu speichern.

0

Versuchen Sie POP3Client in Net Commons package; Es lässt Ihr Java-Programm in jedem beliebigen Intervall nach neuen E-Mails für ein bestimmtes Konto suchen (alle paar Minuten? stündlich?) und erhält/löscht Nachrichten wie gewünscht.

1

Verwenden Sie eine Mail in der Datenbank (Ihr Domino-Administrator kann dies für Sie einrichten, aber sie befindet sich auch in der Hilfedatei).

In dieser Datenbank können Sie einen Agenten erstellen, der regelmäßig ausgeführt wird, um alle neuen Dokumente zu verarbeiten. Dieser Agent verwendet die EmbeddedObjects-Eigenschaft der NotesRichTextItem-Klasse und die ExtractFile-Methode der NotesEmbeddedObject-Klasse, um eine Kennung für den Dateianhang zu erhalten und ihn an den angegebenen Speicherort zu extrahieren.

Zum Beispiel durchläuft dieses Skript alle Dateianhänge, Objektverknüpfungen und eingebetteten Objekte im Element "Body" eines Dokuments. Jedes Mal ist es eine Dateianlage findet, löst es die Datei in das Verzeichnis SAMPLES auf dem Laufwerk C und entfernt die Anlage aus dem Dokument

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 
0

SMTP/POP3 kann auf dem Domino-Server aktiviert werden. Arbeitete damit vorher und bekam damit Squirrel Mail. SMTP ist ein wenig ressourcenintensiv, aber die Mühe lohnt sich, denn dann müssen Sie nicht in LotusLand absteigen, um die Dinge zum Laufen zu bringen. Schreiben Sie einfach ein kleines Java-CLI-Programm, das eine bestimmte E-Mail-Box (POP3 oder SMTP) prüft und die Nachrichten durchsucht, die Anhänge zieht und sie dort ablegt, wo sie benötigt werden.

Viel Dokumentation und Beispiele hier: http://java.sun.com/products/javamail/

Die Techniken, die Sie diesen Ansatz entwickeln werden breiter anwendbar in Ihrer beruflichen Zukunft als alles, was Lotus/Domino spezifisch sein.

0

Egal, was Sie tun, Sie benötigen ein Verständnis der Lotus Notes Datenstrukturen. Die gute Nachricht ist, dass eine komplett automatisierte Lösung in Notes sehr einfach aufgebaut werden kann.

Ihre beste Wette ist es in Notes erstellt zu haben, und es kann so eingerichtet werden, dass es automatisch läuft, wenn neue Mail empfangen wird. Garys Antwort ist tot, aber ohne jede Erfahrung wäre es wahrscheinlich schwierig herauszufinden, wie man es selbst implementiert. Auf der anderen Seite sollte es wirklich keinen kompetenten Notes-Programmierer mehr als eine Stunde oder zwei dauern, um es einzurichten.

2

Edit: seit ich zum ersten Mal diese Antwort schrieb, hat Weiser bewegt und nun behauptet, nur ein Unit-Test-Tool zu sein, nehmen Sie so die Antwort unten mit einer Prise Salz ...


Svrist des Antwort ist gut, aber wenn Sie seinen mittleren Schritt vermeiden möchten (der Mailserver, der die E-Mail zur späteren Aufnahme durch das Java-System auf die Festplatte schreibt), können Sie Wiser verwenden.

Weiser können Sie starten eine In-Java mail server:

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

Dann können Sie es nur in regelmäßigen Abständen Mail abfragen:

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

    MimeMessage mess = message.getMimeMessage(); 

    // mail processing goes here 
}