0

我有一个奇怪的情况。

在我的网站中,我模拟了一个实验室帐户来访问数据库,但对于前端,我允许 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();

这也不起作用。我在这里不知所措。甚至可以使用这种方法吗?我还能尝试什么?

4

1 回答 1

0

显然,这是做不到的。我通过在 Outlook 中启动一个撰写窗口并在 HTML 中预加载电子邮件正文来解决这个问题。

http://msdn.microsoft.com/en-us/library/office/aa171418(v=office.11​​).aspx

于 2013-02-20T15:58:04.553 回答