2014-10-18 78 views
1

我有一個程序,我正在努力找出如何做到這一點。目前我正在使用System.Net.Mail發送smtp消息。我們的smtp服務器(辦公室365)需要認證才能發送外發郵件。我們的辦公室365通過Single Sign on和AD與我們的域配對,因此我們的憑證與Microsoft Office 365同步。如何使用Kerberos令牌發送郵件,而無需將NetworkCredential basicCredential = new NetworkCredential(用戶名,密碼)置於純文本文本?這甚至有可能嗎?如何在沒有硬編碼NetworkCredentials的情況下使用System.Net.Mail?

目前通過

NetworkCredential basicCredential = new NetworkCredential("<<username>>", strPassword); 

client.Credentials = basicCredential; 
client.EnableSsl = true; 
client.Send(message); 

發送郵件基本上我想要的應用程序來把我的Windows用戶名和密碼,發送郵件。

感謝

+0

我很困惑你在哪裏卡住。你已經說過'目前正在發送電子郵件',因爲它已經起作用了?什麼不起作用,或者需要改變什麼? – 2014-10-18 02:10:26

+0

它將成爲部門其他員工的工作應用程序,而不僅僅是我。所以它需要能夠查找各個用戶的憑證。 – 2014-10-18 02:11:36

+0

所以你的目標是使用當前登錄用戶的憑據來發送這個程序想發送的電子郵件? – 2014-10-18 02:13:11

回答

0

我不知道你的技術背景,在問候約明文密碼和Kerberos的使用註釋所以退一步...

當談到與SMTP服務器進行身份驗證,根本不使用Kerberos。 Kerberos意味着客戶端和服務器都與Active Directory控制器進行通信以進行身份​​驗證。 Kerberos不是SMTP規範的一部分,但SMTP服務器可以使用Active Directory進行驗證,類似於NTLM的工作原理(服務器是唯一與AD進行通信的服務器)。

只要您使用SSL發送電子郵件,您應該沒問題。只要傳輸是安全的,只要有效載荷中的憑證是純文本就沒有關係。如果碰上連接到Office365的問題,因爲TLS的(你會得到一個錯誤5.7.1),你可以client.Send()之前,試試這個...

client.TargetName = "STARTTLS/smtp.office365.com"; 

如果您嘗試使用當前登錄用戶的憑據,「UseDefaultCredentials = true」應該工作,只要你沒有設置憑證。您可以同時使用兩者,但其使用順序可能會重置另一個。

+0

我只在使用UseDefaultCredentials = true時纔得到TLS錯誤。如果我將我的用戶名和密碼編程爲字符串,它可以正常工作。 – 2014-10-18 02:46:46

相關問題