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:
- Speichern Sie die Datei in einen temporären Ordner, benennen Sie Datei, und kopieren Sie dann auf den endgültigen Ziel
- 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
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. –
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. –
Vielen Dank für Ihre Kommentare. Ich werde es versuchen. –