我有一个奇怪的情况。
在我的网站中,我模拟了一个实验室帐户来访问数据库,但对于前端,我允许 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);
这不起作用,所以我尝试根据我在这里看到的内容做这样的事情:
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();
这也不起作用。我在这里不知所措。甚至可以使用这种方法吗?我还能尝试什么?