2009-09-29 31 views
7

我無法使用以下代碼將電子郵件發送到外部域名地址,如'[email protected]'。無法使用SMTP將電子郵件發送到外部域名

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

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

我得到一個異常 -

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

如果我改變DeliveryMethod到 -

smtpClient.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis; 

我能夠把我的本地計算機上的電子郵件。但它沒有對生產現場有例外 -

Cannot get IIS pickup directory

能否請你建議我該怎麼辦?

+0

這是否解決?我有完全相同的行爲。 – Kevin 2010-02-01 20:46:34

+0

發現任何解決方案? – 2011-05-03 10:54:54

回答

1

您通常需要使用用戶名/密碼與外部郵件服務器進行身份驗證。由於您正在使用外部服務器,因此不會知道您傳遞的憑據。這可能是你的問題。

1

如果您要查找目標地址的MX記錄(在您的示例中爲asdf.com),然後將其用於SmtpClient的主機屬性,則應該接受未經身份驗證發送的消息因爲它是給本地用戶的。這並不容易,因爲System.Net沒有提供可以返回MX記錄的託管DNS類,但是您可以P /調用非託管代碼來執行此操作。否則,您需要確保您連接的任何SMTP服務器都會爲您進行中繼,然後將SmtpClient的Credentials屬性設置爲連接到該服務器的相應憑據。將DeliveryMethod設置爲PickupDirectoryFromIIS仍然只會將文件寫入IIS拾取目錄,因此它只寫入一個文件,而不會執行實際發送。

+0

+1瞭解電子郵件的工作原理。另外,請記住,除了直接發送到該域的服務器(MX查找)之外,還可能需要執行其他操作。主要是由於反垃圾郵件保護,電子郵件領域有很多規則。在「發件人ID」,「SPF」和「SMTP發件人標題」上進行搜索,幫助您開始創作 - 適合任何想要走這條路線的人。 – eselk 2013-03-27 21:10:42

4

我有這個問題,並驗證其固定見下圖:

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

我不得不使用雙斜槓,因爲一個斜線是轉義字符,以便使用兩個爲它工作。

0

我遇到了這個問題,我在IIS 6.0管理器/ SMTP虛擬服務器/域下添加了一個域名爲「* .com」的域名和類型爲「remote」的域名。

雖然在我的情況下SMTP服務器允許匿名訪問。

相關問題