Aggiornamento del codice legacy da System.Web.Mail a System.Net.Mail in Visual Studio 2005:Problemi nell'invio della posta elettronica

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

Domanda

Utilizzando l'obsoleto System.Web.Mail l'invio di e-mail funziona correttamente, ecco lo snippet di codice:

 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

ed ecco la versione aggiornata:

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

Ho provato molte varianti diverse e nulla sembra funzionare, ho la sensazione che potrebbe avere a che fare con SmtpClient, c'è qualcosa che è cambiato nel codice sottostante tra queste versioni?

Non ci sono eccezioni che vengono respinte.

È stato utile?

Soluzione

Ho testato il tuo codice e la mia posta è stata inviata con successo.Supponendo che tu stia utilizzando gli stessi parametri per il vecchio codice, suggerirei che il tuo server di posta (MAIL_SERVER) sta accettando il messaggio e c'è un ritardo nell'elaborazione oppure lo considera spam e lo scarta.

Suggerirei di inviare un messaggio utilizzando una terza via (telnet se ti senti coraggioso) e vedere se ha successo.

MODIFICARE:Noto (dalla tua risposta successiva) che specificare la porta ha aiutato in qualche modo.Non hai detto se stai utilizzando la porta 25 (SMTP) o la porta 587 (Invio) o qualcos'altro.Se non lo stai già facendo, anche l'utilizzo della porta di invio può aiutare a risolvere il tuo problema.

Wikipedia E rfc4409 avere maggiori dettagli.

Altri suggerimenti

La libreria System.Net.Mail utilizza i file di configurazione per memorizzare le impostazioni, quindi potrebbe essere sufficiente aggiungere una sezione come questa

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

Hai provato ad aggiungere

smtp.UseDefaultCredentials = True 

prima dell'invio?

Inoltre, cosa succede se provi a cambiare:

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

a questa:

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

--Kevin Fairchild

Stai impostando le credenziali per l'e-mail?

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

Ho avuto questo errore, tuttavia credo che abbia generato un'eccezione.

Tutto quello che stai facendo è corretto.Ecco le cose che vorrei controllare.

  1. Controlla attentamente che il servizio SMTP in IIS funzioni correttamente.
  2. Assicurati che non venga contrassegnato come spam.

questi sono solitamente i maggiori colpevoli ogni volta che abbiamo avuto problemi con l'invio di e-mail.

Inoltre, ho appena notato che stai eseguendo MsgBox(ex.Message).Credo che abbiano bloccato MessageBox dal funzionamento di asp.net in un service pack, quindi potrebbe esserci un errore, potresti non saperlo.controlla il registro eventi.

Ho aggiunto il numero di porta del server di posta e ha iniziato a funzionare sporadicamente, sembra che fosse un problema con il server e un ritardo nell'invio dei messaggi.Grazie per le vostre risposte, sono state tutte utili!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top