2015-05-01 5 views
9

Ich muss eine E-Mail anfragen, wenn Sie dazu aufgefordert werden.Geben Sie den Namen der .eml-Datei mit System.Net.Mail.MailAddress oder einer anderen Bibliothek an

Mein Code unten funktioniert:

  • Sendet E-Mail
  • die E-Mail, wenn
  • angeforderten Dateien, aber erlaubt mir nicht, den Dateinamen angeben (verwendet eine GUID als Dateiname)
  • Beispiel: c: \ Archive \ email \ 1003d05d-11ca-45e2-a5f4-cf2da29c39d9.eml

Mögliche Lösungen:

  1. Speichern Sie die Datei in einen temporären Ordner, benennen Sie Datei, und kopieren Sie dann auf den endgültigen Ziel
  2. Speichern Sie die Datei mit einer anderen Methode, eine bessere Leistung

Vor- und Nachteile

  • Lösung 1: ist und hässlich hat schlechte Leistung

Frage

Wer weiß, wie eine E-Mail-Datei zu „MySpecifiedFileName.eml“, ohne umbenennen und kopieren?

Bestehende Code:

Public Shared Sub Send(ByVal EmailFrom As String, ByVal EmailTo As String, ByVal Subject As String, ByVal HTMLBody As String, Optional SaveToFile As Boolean = False, Optional SaveFilepath As String = "") 
    Dim MyMsg As MailMessage = New MailMessage 

    Dim Recipients() As String 
    Recipients = Split(EmailTo, ";") 

    With MyMsg 
     .From = New System.Net.Mail.MailAddress(EmailFrom) 
     For i = 0 To Recipients.Count - 1 
      If Recipients(i).ToString <> "" Then 
       .To.Add(New System.Net.Mail.MailAddress(Recipients(i))) 
      End If 
     Next 
     .Sender = New System.Net.Mail.MailAddress(EmailFrom) 
     .Subject = Subject 
     .Body = HTMLBody 
     .BodyEncoding = System.Text.Encoding.UTF8 
     .IsBodyHtml = True 
     .Priority = MailPriority.High    
    End With 

    Dim SmtpServer As New SmtpClient(My.Settings("SMTPServer")) 
    SmtpServer.Send(MyMsg) 

    REM 
    REM Save Email when requested 
    REM 
    If SaveToFile = True Then 
     Dim client As New SmtpClient(My.Settings("SMTPServer")) 
     client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory 
     client.PickupDirectoryLocation = SaveFilepath 
     client.Send(MyMsg) 
     client = Nothing 
    End If 
    MyMsg = Nothing 
    SmtpServer = Nothing 
End Sub 
+2

Siehe http://stackoverflow.com/questions/1264672/how-to-save-mailmessage-object-to-disk-as-eml-or-msg-file für eine mögliche Lösung. Sie können es in einem Stream speichern und dann können Sie den Stream unter dem Dateinamen Ihrer Wahl speichern. –

+1

Wenn dies ein Singlethread-Vorgang ist (d. H. Nur eine E-Mail wird zu einem bestimmten Zeitpunkt gespeichert), können Sie sie in einem temporären Verzeichnis speichern und anschließend umbenennen und an das endgültige Ziel verschieben. Wenn client.send den Dateinamen zurückgibt, können Sie ihn einfach umbenennen. –

+0

Vielen Dank für Ihre Kommentare. Ich werde es versuchen. –

Antwort

Verwandte Themen