2009-07-21 6 views
6

Wir haben einen Anbieter, der CSV-Dateien als E-Mail-Anhänge sendet. Diese CSV-Dateien enthalten Status, die in unsere Anwendung importiert werden. Ich versuche, den Prozess Ende-zu-Ende zu automatisieren, aber momentan hängt es davon ab, dass jemand eine E-Mail öffnet und den Anhang auf einer Serverfreigabe speichert, damit die Anwendung die Datei verwenden kann.Programmatisch eine E-Mail von einem POP3 öffnen und einen Anhang extrahieren

Da ich den Anbieter nicht davon überzeugen kann, seinen Prozess zu ändern, z. B. einen FTP-Standort oder einen Webdienst anzubieten, bin ich dabei, den bestehenden Prozess zu automatisieren.

Kennt jemand eine Möglichkeit, eine E-Mail von einem POP3-Konto programmgesteuert zu öffnen und einen Anhang zu extrahieren? Die bevorzugte Lösung würde sich auf einem Windows 2003 Server befinden, VB.NET geschrieben und sicher sein. Die Anwendung kann sich auf demselben Server wie der POP3-Server befinden. Beispielsweise könnten wir den kostenlosen POP3-Server einrichten, der mit Windows Server geliefert wird, und gegen die im Dateisystem gespeicherte Mail-Datei auswählen.

BTW, wir sind bereit, für eine Standardlösung zu bezahlen, wenn eine existiert.

Hinweis: Ich habe mir diese question angesehen, aber die Antwort zeigt auf eine CodeProject-Lösung, die sich nicht mit Anhängen beschäftigt.

Antwort

2

möglich Vervielfältigung von Reading Email using Pop3 in C#

Atleast, gibt es einen Schuppen Belastung von Vorschlägen gibt, die Sie nützlich

+0

Fast ... Ich war auf der Suche nach einer vordefinierten Lösung mit integrierter Sicherheit und in VB.NET geschrieben. Wenn ich keine weitere Antwort erhalte, gebe ich dir diese Antwort. – Josh

3

Mail.dll email component Versuchen Sie finden können, ist es sehr erschwinglich unterstützt Anhänge nationale Zeichen und ist einfach zu bedienen, auch unterstützt SSL:

Using pop3 As New Pop3() 
    pop3.Connect("mail.server.com") 
    pop3.Login("user", "password")        

    Dim builder As New MailBuilder() 
    For Each uid As String In pop3.GetAll()   
     ' Receive email message' 
     Dim mail As IMail = builder.CreateFromEml(pop3.GetMessageByUID(uid)) 

     'Write out received message' 
     Console.WriteLine(mail.Subject) 

     'Here you can use mail.Attachmets collection' 
     For Each attachment As MimeData In mail.Attachments 
      Console.WriteLine(attachment.FileName) 
      attachment.Save("c:\" + attachment.FileName) 
      ' you can also use attachment.Data here' 
     Next attachment 

    Next 

    pop3.Close(true) 
End Using 

Sie können es hier herunterladen: http://www.lesnikowski.com/mail.

+1

Sieht wie eine nette Lösung aus. – Josh

1

Ich werde einen späten Vorschlag für eine verallgemeinerte "Download POP3-Nachrichten und Extrahieren von Anlagen" -Lösung mit vorhandener Software und minimale Programmierung werfen. Ich musste dies für einen Kunden tun, der auf den Empfang von Faxen per E-Mail umstieg und nicht damit zufrieden war, die Anhänge manuell an einem Ort zu speichern, an dem sie in eine Anwendung importiert werden konnten.

Für fetchmail Nachrichten auf * nix-Systemen Download scheint den Standard und ist durchaus in der Lage zu sein, aber ich wählte mpop sowohl aus Gründen der Einfachheit und Kompatibilität mit Windows (aber es ist Cross-Plattform). Wenn mpop den Trick für mich nicht gemacht hätte, hätte ich wahrscheinlich etwas mit dem Python-basierten getmail getan, das erstellt wurde, als die Entwicklung von fetchmail für eine gewisse Zeit ins Stocken geriet (es wurde seither wieder aufgenommen).

Mpop wird entweder über die Befehlszeile oder die Konfigurationsdatei gesteuert, daher habe ich einfach mehrere Konfigurationsdateien erstellt und über die Befehlszeile angegeben, welche Datei geladen werden soll. Ich verwende es im "Exchange-Abholverzeichnis" -Modus, was bedeutet, dass es einfach die Nachrichten herunterlädt und sie als Textdateien (.eml) in einem bestimmten Verzeichnis ablegt.

Für die Extraktion der Nachrichtenanhänge scheint UUDeview der Standard zu sein (ich benutze die Windows port of UUDeview) über fast jedes System, das Sie mit fast allen gewünschten Funktionen möchten. Meine Hauptalternative dazu war ein viel weniger leistungsfähiges Python-Skript, das ich 2007 für einen anderen Client entwickelt hatte, aber ich bin froh, dass ich mit einer vorkompilierten ausführbaren Datei entweder Python installieren oder mit einem Python-Paket packen kann. to-exe Optionen.

Endlich gibt es die Konfiguration - zusammen mit den zwei oben erwähnten mpop Konfigurationsdateien (die ich mit Befehlszeilenoptionen beseitigen könnte), habe ich auch zwei 2-Zeilen-CMD-Dateien alle 10 Minuten nach geplanten Aufgabe gestartet - die erste Zeile, um mpop zum Herunterladen in ein Arbeitsverzeichnis zu starten und die zweite Zeile zum Starten von UUDeview und zum Extrahieren von Anhängen bestimmter Typen (.pdf oder .tif) löscht dann jede Datei, von der sie Anhänge extrahiert hat. Die Ausgabe wird an ein anderes Verzeichnis gesendet, von dem die Mitarbeiter Dateien bei Bedarf direkt anhängen können.

Dies ist insgesamt nicht der eleganteste Weg, um diese Ziele zu erreichen, aber es war schnell, einfach, funktional und einigermaßen robust - in jeder Phase scheitert es, wenn keine Daten verloren gehen. Die einzigen Stellen, an denen Daten verloren gehen könnten, sind alle Nicht-Attachment-Nachrichten, die an die dedizierten Fax-E-Mail-Adressen gesendet werden, und selbst diese werden im Verarbeitungsverzeichnis gespeichert und eventuell abgefangen.