tutorial net mvc mail example enviar asp c# .net asp.net-mvc smtp

c# - mail - hangfire asp net mvc example



Cliente SMTP.NET: el cliente no tiene permisos para enviar como este remitente (8)

¿Qué devuelve User.Identity.IsAuthenticated, si devuelve falso ese es su problema? Está intentando enviar correo como un usuario no autenticado.

Estoy teniendo una ocurrencia extraña en nuestros servidores cuando intento enviar un correo electrónico utilizando la clase SmtpClient a través de un proyecto ASP MVC3. Este es el código que estoy usando.

try { var client = new SmtpClient("MailServer"); client.UseDefaultCredentials = true; MailMessage message = new MailMessage("[email protected]", "[email protected]", "Test Message", "Test Body"); client.Send(message); } catch (Exception ex) { // Do Nothing }

He desplegado en tres entornos; en Windows 7 (usando VS 2010 IIS) envía la multa por correo electrónico, en la máquina con Windows 2003 IIS6 envía la multa por correo electrónico, finalmente, en el servidor Windows 2008 R2 II7 recibo el siguiente error:

Mailbox unavailable. The server response was: 5.7.1 Client does not have permissions to send as this sender using username

¿Alguien puede aconsejar sobre lo que puede estar causando esto. Me he dado cuenta de que cuando veo User.Identity.Name , esto está devolviendo una cadena vacía.


Es probable que el servidor de correo no admita el envío de correos electrónicos anónimos y requerirá que se especifiquen las credenciales que están registradas en el servidor de correo.

Puedes especificar las credenciales así:

client.UseDefaultCredentials = false; client.Credentials = new System.Net.NetworkCredential("username", "password");

Espero que esto ayude.


Para mi estaba usando diferentes credenciales -

En las credenciales de red que estaba usando -

new NetworkCredential(smtpUser, smtpPassword)

y en fromAddress

var fromAddress = new MailAddress("[email protected]", string.Empty);

Donde al enviar un correo electrónico donde fromAddress es diferente a las credenciales de red reales llevará a este problema. Vea abajo -

using (var message = new System.Net.Mail.MailMessage(fromAddress, toAddress) { Subject = Keys.MailSubject, Body = body, IsBodyHtml = true }) { smtp.Send(message); }

La solución simple es mantener los dos correos igual a los de las credenciales de red.


Resuelvo este problema eliminando las credenciales de autenticación de web.config

<system.net> <mailSettings> <smtp from="[email protected]"> <!--network host="EXCH-SERVER" port="25" userName="userName" password="password" defaultCredentials="false" /--> <network host="EXCH-SERVER" port="25" /> </smtp> </mailSettings>


Si está utilizando un servidor de Exchange y la cuenta de inicio de sesión y el correo electrónico del remitente son diferentes, aparecerá el error "no tiene permisos para enviar ...". Esto se debe a los permisos de la cuenta. Debe otorgar el permiso "enviar como" a la cuenta de inicio de sesión.


Si lo ha intentado todo y sigue fallando, una posibilidad es que el servidor acepte solo usuarios anónimos. Si intentas conectarte con credenciales:

  • defaultCredentials="true"
  • defaultCredentials="false" userName="foo" password="false"

Luego, el servidor devolverá el error .NET SMTP Client - Client does not have permissions to send as this sender .

Eso es raro, pero como último recurso, intente lo simple:

  • defaultCredentials="false"

Tenía el mismo problema: las credenciales de ASP.Net nunca iban a ser algo que pudiera enviar correos electrónicos a mi entorno. Así que descubrí este camino a través del desorden (que también incluye la posibilidad de que NTLM no siempre funcione correctamente y que estaba poniendo la información de configuración de correo en web.config):

System.Net.Configuration.SmtpSection section = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as System.Net.Configuration.SmtpSection; // set up SMTP client SmtpClient smtp = new SmtpClient(); System.Net.CredentialCache myCache = new System.Net.CredentialCache(); NetworkCredential myCred = new NetworkCredential(section.Network.UserName, section.Network.Password); string host = section.Network.Host; int port = section.Network.Port; // do this because NTLM doesn''t work in all environments.... if (myCred != null) { myCache.Add(host, port, "Digest", myCred); myCache.Add(host, port, "Basic", myCred); myCache.Add(host, port, "Digest-MD5", myCred); myCache.Add(host, port, "Digest MD5", myCred); myCache.Add(host, port, "Plain", myCred); myCache.Add(host, port, "Cram-MD5", myCred); myCache.Add(host, port, "Cram MD5", myCred); myCache.Add(host, port, "Login", myCred); //myCache.Add(host, port, "NTLM", myCred); } smtp.Credentials = myCache; smtp.UseDefaultCredentials = false; //smtp.EnableSsl = true;

Dependiendo de su configuración, es posible que necesite descomentar la última línea.


Una cosa me funcionó con Visual Studio 2013 ejecutando paquetes. Eliminé la etiqueta ''Usar autenticación de Windows'' en el Editor del administrador de conexión SMTP.