2013-02-13 7 views
0

이상한 상황이 있습니다.HttpContext.Current.User.Identity를 사용하여 SmtpClient.Credentials에 인증을 제공하려면 어떻게해야합니까?

내 웹 사이트에서 데이터베이스 액세스를위한 랩 계정을 가장했지만 프런트 엔드의 경우 Windows 인증을 허용합니다. 그래서 HttpContext.Current.User.Identity.Name.Split ('\') 1은 환영 메시지를 인쇄 할 수 있도록 사이트를 보는 사용자의 이름을 제공하지만 Environment.Username은 'labaccount' . > 기본 설정 - -

그냥 서버의 IIS 관리자에 분명합니다> 연결 ... = labaccount 사용자 이름/암호, 그리고 사이트의 web.config에서 : 지금

<configuration> 
    <connectionStrings> 
    <add name="DatabaseConnectionString" connectionString="blahblahblah" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <system.web> 
    <compilation debug="false" targetFramework="4.0" /> 
    <customErrors mode="Off" /> 
    <identity impersonate="true" /> 
</system.web> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    </system.webServer> 

</configuration> 

웹 사이트에서 발신자가 실험실 계정이 아닌 사이트를 보는 사용자가되어야한다는 것을 제외하고는 일련의 사람들에게 전자 메일을 보내는 방법이 필요합니다. 'mailFrom'에서 보낸 사람을 실험실 계정으로 설정하면 모든 것이 예상대로 작동하지만 HttpContext.Current.User로 변경하면 '사서함을 사용할 수 없습니다.'라는 오류 메시지가 나타납니다. 서버 응답 : 5.7.1 클라이언트가이 보낸 사람으로 보낼 수있는 권한이 없습니다. ' 여기에 전자 메일을 보냅니다 내 코드의 일부입니다 :

MailMessage mail = new MailMessage(mailFrom, mailTo, subject, null); 
mail.IsBodyHtml = true; 
mail.Body += mailBody; 
SmtpClient smtpClient = new SmtpClient("smtphost"); 
smtpClient.Credentials = CredentialCache.DefaultNetworkCredentials; 
smtpClient.Send(mail); 

이 작동하지 않는, 그래서 나는이 같은, based on what I saw here을하고 시도 :이 중 하나가 작동하지 않았다

MailMessage mail = new MailMessage(mailFrom, mailTo, subject, null); 
mail.IsBodyHtml = true; 
mail.Body += mailBody; 
SmtpClient smtpClient = new SmtpClient("smtphost"); 
smtpClient.UseDefaultCredentials = false; 
WindowsImpersonationContext impersonationContext; 
impersonationContext = ((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate(); 
smtpClient.Send(mail); 
impersonationContext.Undo(); 

. 나는 여기서 잃어 버렸다. 이 접근법을 사용할 수 있습니까? 그 밖의 무엇을 시도 할 수 있습니까?

답변

관련 문제