2009-09-29 17 views
7

Non riesco a inviare e-mail a indirizzi di dominio esterni come "[email protected]" utilizzando il codice riportato di seguito.Impossibile inviare e-mail a dominio esterno tramite SMTP

SmtpClient smtpClient = new SmtpClient(smtpMailServer); 
smtpClient.UseDefaultCredentials = true; 
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; 
smtpClient.EnableSsl = true; 

//Sending mail. 
smtpClient.Send(mailMessage); 

ottengo un'eccezione -

Mailbox unavailable. The server response was: 5.7.1 Unable to relay for [email protected]

Se cambio la deliveryMethod a -

smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 

Sono in grado di inviare le e-mail sulla mia macchina locale. Ma non riesce sul sito di produzione con un'eccezione -

Cannot get IIS pickup directory

Potete per favore mi suggeriscono cosa fare?

+0

Questo è stato risolto? Sto avendo lo stesso identico comportamento. – Kevin

+0

trovato qualche soluzione? –

risposta

1

Di solito è necessario autenticarsi con il server di posta esterno utilizzando un nome utente/password. Poiché stai utilizzando un server esterno, questo non conoscerà le credenziali che stai trasmettendo. Questo potrebbe essere il tuo problema.

1

Se si cercava il record MX per l'indirizzo di destinazione (nel proprio esempio è asdf.com) e quindi lo si utilizza per la proprietà host di SmtpClient, lo deve accettare il messaggio per la consegna senza autenticazione poiché è per un utente locale. Questo non è facile da fare poiché System.Net non fornisce una classe DNS gestita in grado di restituire i record MX, ma è possibile P/invocare codice non gestito per farlo. In caso contrario, sarà necessario assicurarsi che qualsiasi server SMTP a cui ci si connetterà verrà inoltrato automaticamente e quindi impostare la proprietà Credentials di SmtpClient sulle credenziali appropriate per la connessione a tale server. L'impostazione di DeliveryMethod su PickupDirectoryFromIIS scrive ancora solo un file nella directory di prelievo di IIS in modo che scriva solo un file, non sta eseguendo una trasmissione effettiva.

+0

+1 per sapere come funziona la posta elettronica. Inoltre, tieni presente che ci sono altre cose che potresti dover fare oltre a inviare direttamente al server per quel dominio (ricerca MX). Principalmente a causa della protezione anti-spam, ci sono molte regole nel mondo dell'email. Cerca "Sender ID", "SPF" e "SMTP Sender Header" per iniziare - per tutti coloro che cercano di percorrere questa strada. – eselk

4

ho avuto questo problema e l'autenticazione riparato vedi sotto:

 SmtpClient client = new SmtpClient(EmailServer, 25); 
     var SmtpUser = new System.Net.NetworkCredential("domain\\username", "password"); 
     client.Credentials = SmtpUser; 
     client.DeliveryMethod = SmtpDeliveryMethod.Network; 

ho dovuto usare la doppia barra da una barra è il carattere di escape in modo da utilizzare due per farlo funzionare.

0

Ho affrontato questo problema, che ho risolto aggiungendo un dominio con "* .com" come nome di dominio e digitare "remoto", in IIS 6.0 Manager/SMTP Virtual Server/Domains.

Anche se nel mio caso il server SMTP ha consentito l'accesso anonimo.

Problemi correlati