the secure not authenticated c# gmail smtpclient

secure - La clase c#SmtpClient no puede enviar correos electrónicos usando gmail



smtpclient c# (7)

Tengo problemas para enviar correos electrónicos usando mi cuenta de gmail. Estoy tirando de mi cabello.

La misma configuración funciona bien en Thunderbird.

Aquí está el código. También probé el puerto 465 sin suerte.

SmtpClient ss = new SmtpClient("smtp.gmail.com", 587); ss.Credentials = new NetworkCredential("username", "pass"); ss.EnableSsl = true; ss.Timeout = 10000; ss.DeliveryMethod = SmtpDeliveryMethod.Network; ss.UseDefaultCredentials = false; MailMessage mm = new MailMessage("[email protected]", "[email protected]", "subject here", "my body"); mm.BodyEncoding = UTF8Encoding.UTF8; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; ss.Send(mm);

Aquí está el error

"El servidor SMTP requiere una conexión segura o el cliente no fue autenticado. La respuesta del servidor fue: 5.5.1 Autenticación requerida. Obtenga más información en"

Aquí está el rastro de la pila

at System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode, String response) at System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, String from) at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, SmtpFailedRecipientException& exception) at System.Net.Mail.SmtpClient.Send(MailMessage message) at email_example.Program.Main(String[] args) in C:/Users/Vince/Documents/Visual Studio 2008/Projects/email example/email example/Program.cs:line 23 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()


Este trabajo es perfecto. Cree una plantilla de correo en un archivo separado MailTemplate.html .

Añada NetworkCredentials genuinos: inicio de sesión y contraseña

private void SendMail() { string filename = Server.MapPath("~/MailTemplate.html"); string username = UserName.Text.ToString(); string mailbody = System.IO.File.ReadAllText(filename); mailbody = mailbody.Replace("##NAME##", username); string to = Email.Text; string from = "[email protected]"; MailMessage message = new MailMessage(from, to); message.Subject = "Auto Response Email"; message.Body = mailbody; message.BodyEncoding = Encoding.UTF8; message.IsBodyHtml = true; SmtpClient client = new SmtpClient("smtp.gmail.com", 587); System.Net.NetworkCredential basicCredential = new System.Net.NetworkCredential("[email protected]", "test123#"); client.EnableSsl = true; client.UseDefaultCredentials = true; client.Credentials = basicCredential; try { client.Send(message); SuccessMessage.Text = "Email Sending successfully"; } catch (Exception ex) { ErrorMessage.Text = ex.Message.ToString(); } }

MailTemplate.html

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Title</title> </head> <body> <div style="border: thin solid #0066FF; width: 550px; margin: 25px auto; padding: 15px; font-family: ''Microsoft Himalaya''; font-size: x-large; font-style: normal; color: #0066FF; background-color: #EfEFF2;"> <br /> <p style="vertical-align: middle">Dear ##NAME##,</p> </div> </body> </html>


Esto funciona, pero no es muy amigable para el rendimiento. Consulte client.SendAsync: http://msdn.microsoft.com/en-us/library/x5x13z6h.aspx

Un caso de uso de ejemplo:

var message = new MailMessage("from", "to", "subject", "body"); var client = new SmtpClient("smtp.gmail.com", 587) { Credentials = new NetworkCredential("login", "password"), EnableSsl = true }; client.SendCompleted += (s, e) => { client.Dispose(); message.Dispose(); }; client.SendAsync(message, null);


No creerás lo que solucionó mi problema.

La propiedad Credentials

ss.Credentials = new NetworkCredential("username", "pass");

debe ser declarado después

ss.UseDefaultCredentials = false;

Entonces el listado del código de trabajo final es

SmtpClient ss = new SmtpClient("smtp.gmail.com", 587); ss.EnableSsl = true; ss.Timeout = 10000; ss.DeliveryMethod = SmtpDeliveryMethod.Network; ss.UseDefaultCredentials = false; ss.Credentials = new NetworkCredential("username", "pass"); MailMessage mm = new MailMessage("[email protected]", "[email protected]", "subject here", "my body"); mm.BodyEncoding = UTF8Encoding.UTF8; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; ss.Send(mm);

¿Es esto un error?


Puedo verificar que la configuración de UseDefaultCredentials en falso DEBE hacerse antes de que se cree el NetworkCredentials. Yo tuve el mismo problema.


Trabaja para mí solo con el puerto 25.


dijo antes

En su caso, significa que debe enviarlo con la dirección de correo electrónico con la que inició sesión en Google.

también dice

Entonces tal vez hay un firewall que interfiere con la conexión. Me encuentro con este problema ahora mismo mientras pruebo tu código. Pruebe el TELNET-Test sugerido.


Funciona bien en mi caso:

private void btnTestConnection_Click(object sender, EventArgs e) { btnTestConnection.Enabled = false; SmtpClient ss = new SmtpClient(txtSmtpHostName.Text.Trim(), Convert.ToInt32(numSmtpHostPort.Value)); ss.EnableSsl = chkSmtpSecureType.Checked; ss.Timeout = 10000; ss.DeliveryMethod = SmtpDeliveryMethod.Network; ss.UseDefaultCredentials = false; ss.Credentials = new NetworkCredential(txtSmtpAccount.Text.Trim(), txtSmtpPassword.Text); MailMessage mm = new MailMessage(txtSmtpFromEmail.Text.Trim(), "[email protected]", "subject", "my body"); mm.BodyEncoding = UTF8Encoding.UTF8; mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; ss.SendCompleted += (s, b) => { ss.Dispose(); mm.Dispose(); }; try { ss.Send(mm); ss.Dispose(); mm.Dispose(); MessageBox.Show("Connection successfully"); } catch (Exception ep) { MessageBox.Show("Connection error: " + ep.Message, "Smtp Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } btnTestConnection.Enabled = true; }