web-dev-qa-db-fra.com

Client SMTP .NET - Le client ne dispose pas des autorisations pour envoyer cet expéditeur

Je reçois une impression étrange sur nos serveurs lorsque j'essaie d'envoyer un courrier électronique à l'aide de la classe SmtpClient via un projet ASP MVC3. C'est le code que j'utilise.

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
}

J'ai déployé sur trois environnements; sur Windows 7 (avec VS 2010 IIS), il envoie correctement le courrier électronique, sur la machine Windows 2003 IIS6, il envoie correctement le courrier électronique, enfin, sur le serveur Windows 2008 R2 II7, le message d'erreur suivant s'affiche:

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

Quelqu'un peut-il conseiller sur ce qui peut être la cause? J'ai remarqué que lorsque je visualise User.Identity.Name, cela retourne une chaîne vide.

20
StrictlySocial

Il est probable que le serveur de messagerie ne prend pas en charge l'envoi d'e-mails anonymes et qu'il soit nécessaire de spécifier des informations d'identification enregistrées sur le serveur de messagerie.

Vous pouvez spécifier les informations d'identification comme suit:

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

J'espère que cela t'aides.

16
jdavies

Si vous utilisez un serveur Exchange et que le compte de connexion et le courrier électronique de l'expéditeur sont différents, vous obtenez le message d'erreur "n'a pas l'autorisation d'envoyer ..." Cela est dû aux autorisations du compte. Vous devez accorder l'autorisation "envoyer en tant que" au compte de connexion.

6
Tũi Wichet S

Je résous ce problème en supprimant les informations d'authentification 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>

5
a52

Pour moi, il a utilisé différentes informations d'identification - 

Dans les informations d'identification réseau que j'utilisais - 

new NetworkCredential(smtpUser, smtpPassword)

et dans fromAddress 

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

Où, lors de l'envoi d'un courrier électronique, où fromAddress est différent des informations d'authentification réseau réelles, ce problème 

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

                }

La solution simple est de garder les deux mails identiques à ceux des identifiants réseau. 

1
Manoz

Si vous avez tout essayé et que cela échoue toujours, il est possible que le serveur n'accepte que les utilisateurs anonymes. Si vous essayez de vous connecter avec des informations d'identification:

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

Ensuite, le serveur retournera l'erreur .NET SMTP Client - Client does not have permissions to send as this sender.

C'est bizarre, mais en dernier recours, essayez simplement:

  • defaultCredentials="false"
1
Cyril Gandon

Une chose a fonctionné pour moi en utilisant les packages exécutés par Visual studio 2013 .

0
oosaf

Avait le même problème - les informations d'identification de ASP.Net n'auraient jamais être quelque chose qui pourrait envoyer un courrier électronique dans mon environnement. J'ai donc compris ce chemin à travers le désordre (ce qui inclut également la possibilité que NTLM ne fonctionne pas toujours correctement et que je mettais les informations de configuration de messagerie dans 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;

Selon votre configuration, vous devrez peut-être supprimer la mise en commentaire de la dernière ligne.

0
Andy

Que renvoie User.Identity.IsAuthenticated, s'il renvoie false, c'est votre problème. Vous essayez d'envoyer un courrier en tant qu'utilisateur non authentifié.

0
Ben Robinson