0

Das ist wahrscheinlich sehr einfach, aber ich bin extrem neu, alles zu kodieren, sorry im Voraus.Wie programmgesteuert auf einen ZIP-Link in einem E-Mail-Nachrichtentext klicken

Derzeit habe ich eine Taste4, die durch meinen Posteingang nach Nachrichten mit einem bestimmten Thema lesen wird, wenn Bedingung erfüllt ist, zeigt die Nachrichten erste Klasse Eigenschaften in einer Listview aber ich möchte es auch den Link in jeder E-Mail herunterladen.

Es ist ein Zip-Link, der beim Klicken auf den Link aus der E-Mail die ZIP-Datei herunterlädt. Ich möchte, dass alle Links automatisch heruntergeladen werden, wenn button4 angeklickt wird.

Ich werde meinen Button4-Code zeigen und dann ein Beispiel dafür, was die E-Mail ist.

button4 Code:

private void button4_Click(object sender, EventArgs e) 
{ 
    EmailConnect(); 
    TimeSpan ts = new TimeSpan(0, -2, 0, 0); 
    DateTime date = DateTime.Now.Add(ts); 
    SearchFilter.IsGreaterThanOrEqualTo filter = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, date); 

    if (service != null) 
    { 
     FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(50)); 

     foreach (Item item in findResults) 
     { 

      EmailMessage message = EmailMessage.Bind(service, item.Id); 
      string subject = message.Subject.ToString(); 

      if (subject.Contains("NFIRS File Validation")) 
      { 
       ListViewItem listitem = new ListViewItem(new[] 
       {message.DateTimeReceived.ToString(), message.From.Name.ToString() + "(" + message.From.Address.ToString() + ")", message.Subject, ((message.HasAttachments) ? "Yes" : "No")}); 

       lstMsg.Items.Add(listitem); 
      } 
     } 

     if (findResults.Items.Count <= 0) 
     { 
      lstMsg.Items.Add("No Messages found!!"); 
     } 
    } 
} 

Beispiel E-Mail:

NFIRS Validierungsdatei

Die NFIRS Datei Validation Service hat Ihre Dateien Aufträge bearbeitet werden. Bitte folgen Sie diesem Link, um die ZIP-Datei mit Ihren Ergebnissen zu erhalten.

https://www.nfirs.fema.gov/biarchive/xxxxxxxxx_xxxxxxxxx.zip

Diese Datei wird nach 28 Tagen gelöscht.

Wenn Sie Fragen haben, bitte nicht auf diese E-Mail antworten. Wenden Sie sich stattdessen an das NFIRS Support Center.

+0

Also diese "Button4" gibt Ihnen eine Liste von Nachrichten, die die Kriterien erfüllen, richtig? Und Sie möchten, dass die Datei auch heruntergeladen wird ... oder was? Ich folge nicht ganz dem, was du aus diesem einen Klick herausholen willst. – DonBoitnott

+0

@DonBoitnott ja, es ist in der Liste für jetzt, aber die Liste ist irrelevant und kann später entfernt werden, jede einzelne Nachricht, die diese Kriterien erfüllt, wird 1 Zip-Link haben und ich möchte es alle automatisch herunterladen – RobertJRu

+0

Leider Das wird nicht trivial sein. Der Link scheint sich im Textkörper zu befinden. Daher müssen Sie den vollständigen Text des Textkörpers analysieren, den Link identifizieren und die vollständige Webadresse extrahieren. Feed diese Adressen in [so etwas] (https://stackoverflow.com/questions/525364/how-to-download-a-file-from-a-website-in-c-sharp#525372), um den Download zu bekommen und speichern Sie es. – DonBoitnott

Antwort

0

Dies ist im Grunde ein Duplikat der Link @DonBoitnott kommentierte die nur zusätzliche Schritte, die ich nehme, ist der Körper von jeder E-Mail in einer Eigenschaftsliste setzen sie das Parsen und sicherstellen, dass sie als die gleichen Dateinamen speichert, wie die URL hatte in der ursprünglichen E-Mail

private void handleLinks(List<EmailProperties> properties) 
    { 
     using (WebClient client = new WebClient()) 
     { 
      foreach (var prop in properties) 
      { 
       string link = searchForLink(prop.Body); 
       string fileName = MyExtensions.Between(link, "https://www.nfirs.fema.gov/biarchive/", ".zip"); 
       string saveTo = string.Format((@"C:\Users\Foo\Downloads\{0}.zip"), fileName); 
       prop.Name = fileName; 

       client.DownloadFile(link, saveTo); 
      } 
     } 
    } 

    private string searchForLink(string body) 
    { 
     return MyExtensions.Between(body, "results.\r\n\r\n", "\r\n\r\nThis file will"); 
    } 
Verwandte Themen