Aggiornamento del codice legacy da System.Web.Mail a System.Net.Mail in Visual Studio 2005:Problemi nell'invio della posta elettronica
-
09-06-2019 - |
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.
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.
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.
- Controlla attentamente che il servizio SMTP in IIS funzioni correttamente.
- 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!