Question

Je viens de recevoir une demande de mon patron pour une application sur laquelle je travaille.Fondamentalement, nous obtenons une configuration d'adresse e-mail pour qu'un client externe puisse soumettre des fichiers Excel.

Ce dont j'ai besoin, c'est d'un moyen de récupérer automatiquement tout e-mail envoyé à cette adresse, afin de pouvoir récupérer la pièce jointe, la traiter et l'enregistrer dans un dossier.

Toute information sur par où commencer serait utile.\

Note:Nous utilisons un serveur Lotus Notes pour ce faire, mais une méthode générique serait plus utile (si possible).

Était-ce utile?

La solution

E-mail -> serveur de messagerie ->[quelque chose] -> fichier sur disque.

Le fichier sur le disque est assez facile à analyser, utilisez JavaMail.

Le [quelque chose] pourrait être :

Autres conseils

Modifier: depuis que j'ai écrit cette réponse pour la première fois, Wiser a déménagé et prétend désormais n'être qu'un outil de test unitaire, alors prenez la réponse ci-dessous avec une pincée de sel...


La réponse de Svrist est bonne, mais si vous souhaitez éviter son étape intermédiaire (le serveur de messagerie qui écrit le courrier sur le disque pour une récupération ultérieure par le système Java), vous pouvez utiliser Plus sage.

Wiser vous permet de démarrer un serveur de messagerie en Java :

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

Ensuite, vous pouvez simplement l'interroger périodiquement pour recevoir du courrier :

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

    MimeMessage mess = message.getMimeMessage();

    // mail processing goes here
}

Utilisez une base de données de courrier (votre administrateur Domino peut la configurer pour vous, mais elle figure également dans le fichier d'aide).

Dans cette base de données, vous pouvez créer un agent qui s'exécute périodiquement pour traiter tous les nouveaux documents.Cet agent utilisera la propriété EmbeddedObjects de la classe NotesRichTextItem et la méthode ExtractFile de la classe NotesEmbeddedObject pour obtenir un handle sur la pièce jointe et l'extraire à l'emplacement que vous spécifiez.

Par exemple, ce script parcourt toutes les pièces jointes, les liens d'objets et les objets incorporés dans l'élément Corps d'un document.Chaque fois qu'il trouve une pièce jointe, il détache le fichier du répertoire SAMPLES sur le lecteur C et supprime la pièce jointe du document.

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

J'ai fait pas mal de choses ces derniers temps avec des agents Java sur des serveurs Domino.Le serveur Domino 8.5 prend en charge Java 6 et son intégration. Il ne faudra donc pas longtemps à quelqu'un ayant un peu d'expérience en développement Domino pour mettre en place un agent qui s'exécute lorsqu'un nouveau courrier arrive.Dans LotusScript, c'est encore plus simple, mais cela nécessite des compétences plus spécialisées que vous auriez probablement besoin de faire appel à un entrepreneur.

La limitation que vous êtes susceptible de rencontrer concerne le fichier extrait, vous pouvez facilement le placer sur la structure de fichiers du serveur Domino mais vous pouvez être limité par la sécurité du système d'exploitation pour le placer sur un autre serveur.

Lotus Notes/Domino stocke le courrier dans une base de données Notes.Des API sont disponibles pour obtenir des documents (e-mails), lire les valeurs des champs (De, Objet) et détacher des fichiers.

Les API incluent

-LotusScript (variante VB, disponible dans la base de données Notes)

-Java (depuis l'intérieur ou l'extérieur de la base de données)

API -C (externe)

-Même API disponible via le serveur COM

Vous pouvez créer un « agent planifié » dans la base de données (à l'aide de LotusScript ou Java) capable de localiser les documents créés depuis la dernière exécution, de localiser les pièces jointes et de les extraire.L'agent devra être signé avec un ID disposant des autorisations appropriées sur le serveur, y compris celles requises pour écrire sur le système de fichiers et lancer tout autre processus.

En externe à la base de données, vous pouvez utiliser n'importe quelle API à l'exception de LotusScript pour vous connecter au serveur/à la base de données de messagerie et suivre un processus similaire, par ex.extraire les fichiers localement sur un client ou un serveur distinct.L'API C et COM nécessitent une installation du client Notes, mais les applications Java peuvent être configurées pour s'exécuter via CORBA/DIIOP sans installation complète.

Consultez l'aide de Domino Designer (ou le site Web d'IBM pour l'API C) pour plus d'informations.

Quant à une « manière générique » de procéder, si vous accédez à des données dans Notes et devez extraire des pièces jointes, je pense que ces API sont votre meilleure option.Si vous envisagez de porter l'application sur un autre système de messagerie, envisagez de découpler les routines API via une « interface » afin de n'avoir qu'à ajouter une nouvelle implémentation de cette interface pour prendre en charge un nouveau système de messagerie.

Vous pouvez accéder aux documents Notes relativement facilement en utilisant DIIOP, ce serait beaucoup plus facile que de suivre la route C Api...

Essayez POP3Client dans le Forfait NetCommons;cela permettra à votre programme Java de vérifier l'arrivée de nouveaux messages pour un compte particulier à l'intervalle souhaité (toutes les quelques minutes ?toutes les heures ?), et obtenez/supprimez des messages comme vous le souhaitez.

SMTP/POP3 peut être activé sur le serveur Domino.J'ai déjà travaillé avec cela et j'ai fait fonctionner Squirrel Mail avec.SMTP est un peu gourmand en ressources, mais cela en vaut la peine car vous n'avez alors pas besoin de descendre dans LotusLand pour faire fonctionner les choses.Écrivez simplement un petit programme Java CLI qui vérifiera une boîte de courrier électronique spécifique (POP3 ou SMTP) et analysera les messages, en extrayant les pièces jointes et en les plaçant là où c'est nécessaire.

Beaucoup de documentation et d'exemples ici :http://java.sun.com/products/javamail/

Les techniques que vous développerez en suivant cette approche seront plus largement applicables dans votre future carrière que tout ce qui est spécifique à Lotus/Domino.

Quoi que vous fassiez, vous aurez besoin d’une compréhension des structures de données Lotus Notes.La bonne nouvelle est qu’une solution entièrement automatisée peut être créée très facilement dans Notes.

Le mieux est de le créer dans Notes, et il peut être configuré pour s'exécuter automatiquement chaque fois qu'un nouveau courrier est reçu.La réponse de Gary est tout à fait pertinente, mais sans aucune expérience, il serait probablement difficile de comprendre comment la mettre en œuvre vous-même.D'un autre côté, cela ne devrait pas prendre plus d'une heure ou deux à un programmeur Notes compétent pour le configurer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top