net mvc enviar asp c# asp.net-mvc authentication smtp smtpclient

mvc - smtp credentials c#



La autenticación de C#SMTP falló pero las credenciales son correctas (1)

Este es mi problema: escribí el siguiente programa para probar si puedo enviar un correo electrónico:

class Program { static void Main(string[] args) { try { Console.WriteLine("Mail To"); MailAddress to = new MailAddress("[email protected]"); Console.WriteLine("Mail From"); MailAddress from = new MailAddress("[email protected]"); MailMessage mail = new MailMessage(from, to); Console.WriteLine("Subject"); mail.Subject = "test"; Console.WriteLine("Your Message"); mail.Body = "test"; SmtpClient smtp = new SmtpClient(); smtp.Host = "mail.domain.it"; smtp.Port = 25; smtp.Credentials = new NetworkCredential( "username", "password"); smtp.EnableSsl = false; Console.WriteLine("Sending email..."); smtp.Send(mail); }catch(Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } } }

Las credenciales son correctas (las probé usando telnet, outlook y la aplicación k9mail en Android funciona correctamente), el programa funciona si pongo la configuración smtp de gmail. Realmente no puedo entender la causa de este error.

Usando wireshark he descubierto lo que está sucediendo: S: 220 server1.business.it SMTP Server ready
C: EHLO pc14
S: 250 server1.stargatenet.it Hola [87.28.219.65] | 250 PIPELINING | 250 TAMAÑO 25000000 | 250 8BITMIME | 250 BINARYMIME | 250 CHUNKING | 250 AUTH LOGIN CRAM-MD5 DIGEST-MD5 | 250 Ok
C: Usuario de inicio de sesión AUTH: Nombre de usuario Base64
S: 334 VXNlcm5hbWU6
C: Pase: PasswordBase64
S: 334 UGFzc3dvcmQ6

Parece que el programa no está ingresando las credenciales cuando se le preguntó. ¿Cómo es eso posible?


Este enlace me salvó la vida: enlace

aquí el problema que experimenté está bien descrito: aunque el nombre de usuario se pasa con AUTH LOGIN, el servidor responde con AUTH_LOGIN_Username_Challenge nuevamente.

Este problema ocurre solo con System.Net.Mail. El enlace sugiere posibles soluciones:

1) Utilice CDOSYS (no envía el nombre de usuario con el inicio de sesión AUTH)
2) Usar System.Web.Mail (no envía el nombre de usuario con el acceso AUTH)
3) Póngase en contacto con el propietario del servidor SMTP y pídales que arreglen el servidor.

Lamentablemente, no pude propietario del servidor SMTP, así que tuve que usar System.Web.Mail. Sé que está en desuso, pero lamentablemente en casos como este no hay otra opción IMO.

Ese es mi código de trabajo:

System.Web.Mail.MailMessage msg = new System.Web.Mail.MailMessage(); msg.Body = message.Body; string smtpServer = "mail.business.it"; string userName = "username"; string password = "password"; int cdoBasic = 1; int cdoSendUsingPort = 2; if (userName.Length > 0) { msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", smtpServer); msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25); msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", cdoSendUsingPort); msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", cdoBasic); msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", userName); msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", password); } msg.To = message.Destination; msg.From = "[email protected]"; msg.Subject = message.Subject; msg.BodyFormat = MailFormat.Html;//System.Text.Encoding.UTF8; SmtpMail.SmtpServer = smtpServer; SmtpMail.Send(msg);

Esta respuesta me ayudó a usar System.Web.Mail.