Aktualisieren von Legacy-Code von System.Web.Mail auf System.Net.Mail in Visual Studio 2005:Probleme beim Senden von E-Mails

StackOverflow https://stackoverflow.com/questions/52321

Frage

Das Versenden von E-Mails mit dem veralteten System.Web.Mail funktioniert problemlos. Hier ist der Codeausschnitt:

 Public Shared Sub send(ByVal recipent As String, ByVal from As String, ByVal subject As String, ByVal body As String)
        Try
            Dim Message As System.Web.Mail.MailMessage = New System.Web.Mail.MailMessage
            Message.To = recipent
            Message.From = from
            Message.Subject = subject
            Message.Body = body
            Message.BodyFormat = MailFormat.Html
            Try
                SmtpMail.SmtpServer = MAIL_SERVER
                SmtpMail.Send(Message)
            Catch ehttp As System.Web.HttpException
                critical_error("Email sending failed, reason: " + ehttp.ToString)
            End Try
        Catch e As System.Exception
            critical_error(e, "send() in Util_Email")
        End Try
    End Sub

und hier ist die aktualisierte Version:

Dim mailMessage As New System.Net.Mail.MailMessage()

        mailMessage.From = New System.Net.Mail.MailAddress(from)
        mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))

        mailMessage.Subject = subject
        mailMessage.Body = body

        mailMessage.IsBodyHtml = True
        mailMessage.Priority = System.Net.Mail.MailPriority.Normal

        Try

            Dim smtp As New Net.Mail.SmtpClient(MAIL_SERVER)
            smtp.Send(mailMessage)

        Catch ex As Exception

            MsgBox(ex.ToString)

        End Try

Ich habe viele verschiedene Varianten ausprobiert und nichts scheint zu funktionieren. Ich habe das Gefühl, dass es möglicherweise mit dem SmtpClient zusammenhängt. Hat sich zwischen diesen Versionen etwas am zugrunde liegenden Code geändert?

Es gibt keine Ausnahmen, die zurückgeworfen werden.

War es hilfreich?

Lösung

Ich habe Ihren Code getestet und meine E-Mail wurde erfolgreich gesendet.Unter der Annahme, dass Sie dieselben Parameter für den alten Code verwenden, würde ich vorschlagen, dass Ihr Mailserver (MAIL_SERVER) die Nachricht akzeptiert und es zu einer Verzögerung bei der Verarbeitung kommt oder dass er sie als Spam betrachtet und verwirft.

Ich würde vorschlagen, eine Nachricht über einen dritten Weg zu senden (Telnet, wenn Sie sich mutig fühlen) und zu sehen, ob das erfolgreich ist.

BEARBEITEN:Ich stelle fest (aus Ihrer nachfolgenden Antwort), dass die Angabe des Ports etwas geholfen hat.Sie haben nicht gesagt, ob Sie Port 25 (SMTP) oder Port 587 (Übermittlung) oder etwas anderes verwenden.Wenn Sie dies noch nicht tun, kann die Verwendung des Sumission-Ports möglicherweise auch zur Lösung Ihres Problems beitragen.

Wikipedia Und RFC4409 Habe mehr Details.

Andere Tipps

Die System.Net.Mail-Bibliothek verwendet die Konfigurationsdateien zum Speichern der Einstellungen, sodass Sie möglicherweise nur einen Abschnitt wie diesen hinzufügen müssen

  <system.net>
    <mailSettings>
      <smtp from="test@foo.com">
        <network host="smtpserver1" port="25" userName="username" password="secret" defaultCredentials="true" />
      </smtp>
    </mailSettings>
  </system.net>

Haben Sie versucht, hinzuzufügen?

smtp.UseDefaultCredentials = True 

vor dem senden?

Was passiert außerdem, wenn Sie versuchen, Folgendes zu ändern:

mailMessage.From = New System.Net.Mail.MailAddress(from)
mailMessage.To.Add(New System.Net.Mail.MailAddress(recipent))

dazu:

mailMessage.From = New System.Net.Mail.MailAddress(from,recipent)

– Kevin Fairchild

Legen Sie die Anmeldeinformationen für die E-Mail fest?

smtp.Credentials = New Net.NetworkCredential("xyz@gmail.com", "password")

Ich hatte diesen Fehler, glaube jedoch, dass er eine Ausnahme ausgelöst hat.

Alles, was Sie tun, ist richtig.Hier sind die Dinge, die ich überprüfen würde.

  1. Überprüfen Sie noch einmal, ob der SMTP-Dienst in IIS ordnungsgemäß ausgeführt wird.
  2. Stellen Sie sicher, dass es nicht als Spam gekennzeichnet wird.

Das sind normalerweise die größten Übeltäter, wenn wir Probleme beim Versenden von E-Mails hatten.

Außerdem ist mir gerade aufgefallen, dass Sie MsgBox (ex.Message) ausführen.Ich glaube, dass sie MessageBox daran gehindert haben, asp.net in einem Service Pack zu verwenden, sodass es möglicherweise zu einem Fehler kommt, Sie wissen es vielleicht aber nicht.Überprüfen Sie Ihr Ereignisprotokoll.

Ich habe die Portnummer für den Mailserver hinzugefügt und es begann sporadisch zu funktionieren. Es scheint, dass es ein Problem mit dem Server und eine Verzögerung beim Senden der Nachrichten war.Vielen Dank für eure Antworten, sie waren alle hilfreich!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top