Posts
163
Comments
179
Trackbacks
5
Timeout costante con System.Net.Mail e SSL


Se avete avuto necessità di inviare email tramite un SMTP con SSL potreste incontrare il problema che ho riscontrato io. In sostanza utilizzando il codice seguente, l’effetto che si ha è quello di un timeout costante in fase di invio:

   1: Dim smtp As New SmtpClient("SERVER", 465)
   2: Dim cred As New System.Net.NetworkCredential("USERNAME", "PASSWORD")
   3: smtp.UseDefaultCredentials = False
   4: smtp.Credentials = cred
   5: smtp.EnableSsl = True
   6:  ...
   7:  ...
   8: smtp.Send(message)

Il potreste è d’obbligo dato che dipende dall’SMTP che state utilizzando. Il problema è spiegato bene in questo post. In sostanza il namespace System.Net.Mail supporta solo l’Explicit SSL, che nella pratica implica che la connessione inizia sulla porta 25 come connessione in chiaro e poi switcha sulla connessione sicura.
Se l’SMTP che si sta utilizzando non ha la porta 25 aperta (come è facilmente testabile da telnet), si avrà sempre un errore di timeout.

La soluzione sarebbe quella di switchare all’Implicit SSL che wrappa l’intera connessione in modo sicuro, ma il namespace System.Net.Mail non lo supporta (…..). Come fare? Evitando di scegliere componenti di terze parti, si può tornare al vecchio namespace System.Web.Mail che supportava entrambe le modalità. Il frammento di codice seguente è equivalente al precedente ma funziona in ogni situazione.

   1: Dim mail As New System.Web.Mail.MailMessage
   2: mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", "SERVER")
   3: mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465)
   4: mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", True)
   5: mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "USERNAME")
   6: mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "PASSWORD")
   7: mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", 2)
   8: mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", 1)
   9: ...
  10: ...
  11: Web.Mail.SmtpMail.Send(mail)
posted on martedì 2 marzo 2010 11:27 Print
Comments
Gravatar
# re: Timeout costante con System.Net.Mail e SSL
asorcinelli@hotmail.it
13/07/2010 11:08
Potrebbe essere un problema legato all'SMTP.
Verifica di aver specificato bene IP e porta del server. Prova ad omettere il parametro per verificare se l'errore sia lo stesso.

Se stai usando localhost come smtpserver, prova a mettere nome macchina o l'IP.
Comments have been closed on this topic.
News
Se volete sapere con chi avete a che fare eccomi qui in uno "scatto" lavorativo.

La mia foto

Logo MCAD
Logo MCTS