2011-09-01 12 views
20

Durante i tentativi di invio di un'e-mail utilizzando la classe SmtpClient tramite un progetto ASP MVC3, si verifica una situazione anomala sui nostri server. Questo è il codice che sto usando.Client SMTP .NET - Il client non dispone delle autorizzazioni per l'invio come questo mittente

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 
} 

Ho installato su tre ambienti; su Windows 7 (utilizzando VS 2010 IIS) invia la multa e-mail, sulla macchina IIS6 Windows 2003 invia la multa e-mail, infine, sul server R2 II7 Windows 2008 ottengo il seguente errore:

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

nessuno consigliare su cosa potrebbe causare questo. Ho notato che quando visualizzo User.Identity.Name, questo restituisce una stringa vuota.

+0

Strano che si ottenga un nome di identità vuoto, provare a disabilitare l'account anonimo e avere l'app Web per impersonare un determinato utente e vedere se funziona. –

+0

Salve, se sostituisco con il seguente: client.UseDefaultCredentials = false; client.Credentials = new NetworkCredential ("myAccount", "myPassword", "myDomain"); L'e-mail invia bene. – StrictlySocial

+0

ok, ma non metterei pwd e username nel codice, usare al minimo web config! –

risposta

15

È probabile che il server di posta non supporti l'invio di e-mail anonime e richiederà che vengano specificate le credenziali che sono registrate sul server di posta.

È possibile specificare le credenziali in questo modo:

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

Spero che questo aiuti.

+1

Salve, ma sono in grado di utilizzare il server di posta senza fornire credenziali di rete quando sono su una mia macchina di sviluppo o su uno dei nostri altri server. È solo sul server Win2008 che ho un problema. – StrictlySocial

+0

@StrictlySocial: è possibile che l'account configurato utilizzato per l'identità del pool di applicazioni manchi di privilegi sufficienti? – jdavies

+0

Al momento è impostato su ApplicationPoolIdentity - Devo ammettere quando arriva a questo livello in IIS, mi sono perso – StrictlySocial

0

Cosa restituisce User.Identity.IsAuthenticated, se restituisce false che è il tuo problema. Stai tentando di inviare posta come utente non autenticato.

+0

Salve, restituisce false. Come potrei fare per tornare vero? Per quanto ne so, l'autenticazione di Windows è abilitata. All'interno di web.config ho il seguente StrictlySocial

+0

È necessario disabilitare anche l'autenticazione anonima. Solitamente lo faccio a livello IIS attraverso la GUI di gestione di IIS piuttosto che nel web.config. Inoltre sei tu che in questo caso User.Identity.Name è una stringa vuota, mi aspetterei che sia null. –

+0

All'interno della GUI di IIS7, ho disabilitato l'autenticazione Anonymouse, la rappresentazione ASP.NET e l'autenticazione basata su form. Solo l'autenticazione di Windows è abilitata. – StrictlySocial

6

Se si utilizza un server di Exchange e l'account di accesso e l'e-mail del mittente sono diversi, verrà visualizzato l'errore "non dispone delle autorizzazioni per inviare ...". Questo a causa delle autorizzazioni dell'account. È necessario concedere l'autorizzazione "Invia come" all'account di accesso.

+0

Grazie, è utile.Sembra che ecco un articolo su come concedere l'autorizzazione - http://tom.603global.com/KB/a8/how-to-grant-send-as-permissions-one-account-ms-exchange.aspx. Si noti che è necessario disporre dell'accesso all'AD e al server di posta per farlo, che non è sempre disponibile. –

5

posso risolvere questo problema rimuovendo le credenziali di autenticazione da 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> 

1

Se si dispone di provare tutto e non riesce ancora, una possibilità è che il server accetta solo utente anonimo. Se si tenta di connettersi con le credenziali:

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

Poi il server restituirà l'errore .NET SMTP Client - Client does not have permissions to send as this sender.

Questo è strano, ma come ultima risorsa, basta provare la semplice:

  • defaultCredentials="false"
0

avuto lo stesso problema - le credenziali di ASP.Net avrebbero mai essere qualcosa che potrebbe inviare e-mail nel mio ambiente. Così ho capito questo percorso attraverso il disordine (che comprende anche la possibilità che NTLM non funziona sempre ragione e che stavo mettendo le informazioni di configurazione di posta in 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; 

A seconda della configurazione, potrebbe essere necessario rimuovere il commento dall'ultima riga.

0

Per me stava usando credenziali diverse -

In credenziali di rete stavo usando -

new NetworkCredential(smtpUser, smtpPassword) 

e in FROMADDRESS

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

Dove, quando l'invio di e-mail in cui FROMADDRESS è diverso da quello attuale le credenziali di rete porteranno questo problema. Vedi sotto -

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

       } 

La soluzione semplice è quella di mantenere entrambe le mail stessi come uno dei credenziali di rete.

+0

Ho lo stesso problema. L'autenticazione ha esito negativo poiché l'indirizzo da è diverso dalle credenziali di rete. C'è un modo per aggirare questo ? Per favore guida. – juilee

0

Una cosa ha funzionato con Visual Studio 2013 con i pacchetti in esecuzione. ho rimosso il tag "Usa autenticazione di Windows" nell'editor di Connection Manager SMTP.

Problemi correlati