2015-05-01 11 views
9

Ho bisogno di inviare un messaggio di posta elettronica quando richiesto.Specificare il nome file .eml utilizzando System.Net.Mail.MailAddress o altra libreria

mio codice qui sotto funziona:

  • trasmette l'email
  • file l'e-mail quando richiesto
  • Ma non mi permette di specificare il nome del file (usa un GUID come nome del file)
  • esempio: C: \ Archive \ email \ 1003d05d-11ca-45e2-a5f4-cf2da29c39d9.eml

potenziali soluzioni:

  1. salvare il file in una cartella temporanea, rinominare il file, e quindi copiare alla destinazione finale
  2. Salvare il file utilizzando un altro metodo, una migliore performance

Pro e Contro

  • Soluzione 1: è brutto e ha cattive prestazioni

Domanda

Qualcuno sa come presentare una e-mail a "MySpecifiedFileName.eml", senza dover rinominare e quindi copiare?

codice esistente:

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

Vedere http://stackoverflow.com/questions/1264672/how-to-save-mailmessage-object-to-disk-as-eml-or-msg-file per una possibile soluzione. È possibile salvarlo su un flusso e quindi è possibile salvare lo stream sul nome file desiderato. –

+1

Se questo sarà single-threaded (vale a dire, solo una e-mail viene salvata in un dato momento), è possibile salvarla in una directory temporanea e quindi rinominare e spostare il file nella destinazione finale permanente. Se client.send restituisce il nome file, puoi semplicemente rinominarlo. –

+0

Grazie per i vostri commenti. Ci proverò. –

risposta