Estoy escribiendo un servicio de Windows usando C# .NET 4.0 (mi estación de trabajo de desarrollo es Windows 7). El objetivo es enviar un correo electrónico del servicio directamente en caso de errores durante el procesamiento. He incluido un fragmento de código para mostrar lo que estoy tratando de lograr:No se puede enviar correo electrónico SMTP desde el servicio de Windows en Win7
try
{
string emailAddresses = "[email protected]";
string emailCCAddresses = "[email protected]";
//Send the email
using (MailMessage mailMsg = new MailMessage())
{
mailMsg.To.Add(emailAddresses);
mailMsg.From = new MailAddress("[email protected]");
mailMsg.CC.Add(emailCCAddresses);
mailMsg.Subject = " Error Message ";
mailMsg.Body = DateTime.Now + " : Invalid File Encountered." ;
////Creating the file attachment
using (Attachment data = new Attachment("C:\\users\\sample.xml", MediaTypeNames.Application.Octet))
{
//Add timestamp info for the file
ContentDisposition disposition = data.ContentDisposition;
disposition.ModificationDate = File.GetLastWriteTime("C:\\users\\sample.xml");
mailMsg.Attachments.Add(data);
SmtpClient emailClient = new SmtpClient("example.Sample.com", 25);
emailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
emailClient.UseDefaultCredentials = true;
emailClient.Send(mailMsg);
}
}//end using
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
El problema es estoy frente - la opción de correo electrónico no funciona desde un servicio de victoria en cualquier Windows 7 máquina. Sin embargo, el mismo código funcionará en una máquina Win XP perfectamente bien. Advertencia, esto no se puede probar como una aplicación de consola. Debe ejecutarse como un servicio para ver el comportamiento. Puse el mismo código en una aplicación de consola y funcionó bien en mi máquina de ganar 7.
Además, habilité las características de cliente de telnet y servidor y pude enviar correos electrónicos a través del símbolo del sistema con éxito.
he intentado un par de cosas para tratar de aislar la causa (no funcionaba) -
Ajuste del NetworkCredential explícita y establecer UseDefaultCredentials = false. emailClient.Credentials = new System.Net.NetworkCredential ("username", "pwd", "Domain1");
cambiar el Iniciar sesión como opción del servicio a ser mi ID de usuario y pwd
- El De y direcciones de correo electrónico son auténticos, no direcciones ficticias (en mi código real que es!)
Las únicas diferencias que puedo encontrar es que el servicio de Windows se instala bajo la cuenta del sistema local. Pero cambiar el registro como debería haber causado que use mis detalles de autenticación/las credenciales especificadas en el código. El técnico de TI de mi oficina dijo que la única diferencia que vio fue que mi mensaje se envió como retransmisor (no estoy seguro de lo que significa que las cuentas from/to e iniciar sesión como actualizadas a mi inicio de sesión no cambiaron el resultado)
la excepción veo capturados es:
SMTP excepción lanzada: System.Net.Mail.SmtpException: Si no enviar correo. ---> System.Net.WebException: no se puede conectar al servidor remoto ---> System.Net.Sockets.SocketException: se intentó acceder a un socket de una manera prohibida por sus permisos de acceso XXX.XXX.XXX .XXX XX en System.Net.Sockets.Socket.DoConnect (EndPoint endPointSnapshot, SocketAddress socketAddress) en System.Net.ServicePoint.ConnectSocketInternal (Boolean connectFailure, socket s4, socket s6, socket & socket, direcciónIP & dirección, estado ConnectSocketState , IAsyncResult asyncResult, Int32 tiempo de espera, excepción & excepción)
Todas las ideas son apreciadas!
Creo que tiene que ver con una política/función de seguridad de Windows 7 y con suerte podría ser tan simple como cambiar una configuración predeterminada.
¿Tiene algún firewall funcionando? Un Google rápido para el mensaje de la SocketException que se lanzó inicialmente ("Se intentó acceder a un socket de una manera prohibida por sus permisos de acceso ...") sugiere que varias personas que han experimentado el mismo problema determinaron que su El software de firewall impidió que el servicio enviara el correo y lo resolvió deshabilitando el firewall o agregando una regla de permiso para su servicio en su configuración. – Iridium
pensé en eso ... Pero pude enviar el correo smtp a través de una aplicación de consola (mismo código, simplemente no un servicio) y a través del símbolo del sistema. Además, mi compañero de trabajo (el mismo equipo y los derechos de acceso) que ejecutó el servicio en su máquina con Windows XP pudo enviar un correo electrónico. Verificamos con TI y nos dicen que no estamos bloqueados. – PreethaA
Apuesto a que es la identidad bajo la cual se ejecuta el servicio la causa del problema. No sé si cambiaron el valor predeterminado entre XP y Win 7, pero sé que lo hicieron para el grupo de aplicaciones de IIS. –