Ciao Ragazzi :)
scrivo per chiedere il vostro sempre prezioso aiuto in merito ad un problema che ad oggi non sono riuscito a risolvere. Come avrete capito dalla domanda, parliamo di invio mail.
Faccio una premessa in merito all'ambiente nel quale si verifica il problema:
siamo in IIS6, nel quale coesistono sia applicazioni scritte in asp classic che asp.net, e la versione di Framework .NET di riferimento è la 4.0.
l'invio delle mail avviene attraverso un host smtp che non richiede autenticazione (non posso riportare quello reale, quindi supponiamo sia "pippo.dominio.it"), la porta è la classica 25 e non è richiesta una connessione che utilizzi ssl.
L'invio mail per le applicazioni asp classic avviene tramite CDOSYS, mentre per la parte asp.net viene utilizzato il namespace System.Net.Mail. Nello specifico è un servizio di windows (per la parte ASP.NET) che, ad intervalli regolari, si occupa di interrogare un db in cui è presente una tabella "pending_mails", che poi provvede ad inviare (a gruppi di 10 per volta).
Per maggiore completezza riporto la configurazione della parte asp:
'Create message and configuration objects
set iMsg = CreateObject("CDO.Message")
set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
'Apply settings to the configuration object
With Flds
' Specify the authentication mechanism to basic (clear-text) authentication.
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoNone
' The username for authenticating to an SMTP server
' .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "someone"
' The password used to authenticate to an SMTP server
' .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "pppwwwddd"
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
'Specify mail server
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "pippo.dominio.it"
'Specify the timeout in seconds
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
' The port on which the SMTP service specified by the smtpserver field is listening for connections (typically 25)
'.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
'Use SSL for the connection (False or True)
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
.Update
End With
e, qui di seguito, la configurazione (in app.config) per il servizio che invia le mail per le applicazioni ASP.NET:
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network host="pippo.dominio.it"
enableSsl="false"
port="25"
defaultCredentials="false" />
</smtp>
</mailSettings>
</system.net>
Il problema è che, mentre l'invio tramite asp classico funziona perfettamente, per ASP.NET il servizio traccia nel proprio log questo errore:
<b>System.Net.Mail.SmtpException: Failure sending mail. ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it (indirizzo ip server):25</b>
il codice di invio mail del servizio è il seguente (è all'interno di una funzione. User e Pwd sono presi da db):
System.Net.Mail.MailMessage mMailMessage = new System.Net.Mail.MailMessage();
mMailMessage.From = new MailAddress(from);
mMailMessage.To.Add(new MailAddress(to));
if ((bcc != null) && (bcc != string.Empty))
{
mMailMessage.Bcc.Add(new MailAddress(bcc));
}
if ((cc != null) && (cc != string.Empty))
{
mMailMessage.CC.Add(new MailAddress(cc));
}
mMailMessage.Subject = subject;
mMailMessage.Body = body;
mMailMessage.Priority = System.Net.Mail.MailPriority.Normal;
SmtpClient mSmtpClient = new SmtpClient();
mSmtpClient.Credentials = new NetworkCredential(senderUserName, senderPassword);
mSmtpClient.Send(mMailMessage);
Prima di mettere mano al codice vorrei un vostro parere a riguardo, anche perchè i problemi sono iniziati proprio dopo l'introduzione dell'smtp host non autenticato, mentre in precedenza tutto funzionava regolarmente.
Grazie mille per il vostro aiuto :)
Davide