能够通过.exe发送电子邮件,但不能通过ASP.NET发送?

能够通过.exe发送电子邮件,但不能通过ASP.NET发送?,asp.net,iis,email,Asp.net,Iis,Email,我正在尝试将电子邮件作为web应用程序的一部分发送到外部地址。使用服务器上运行的简单可执行文件时,我可以发送电子邮件: private void button1_Click(object sender, EventArgs e) { MailMessage message = new MailMessage(welcomeMessageFrom, toAddress, welcomeMessageSubject, welcomeMessageSubject);

我正在尝试将电子邮件作为web应用程序的一部分发送到外部地址。使用服务器上运行的简单可执行文件时,我可以发送电子邮件:

private void button1_Click(object sender, EventArgs e)
    {
        MailMessage message = new MailMessage(welcomeMessageFrom, toAddress, welcomeMessageSubject, welcomeMessageSubject);
        SmtpClient emailClient = new SmtpClient("mail.sortuv.com");

        System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential(username, password);
        emailClient.UseDefaultCredentials = false;
        emailClient.Credentials = SMTPUserInfo;
        emailClient.Send(message);
    }
但是,从ASP.NET页面尝试相同的代码会出现以下异常:

Mailbox unavailable. The server response was: 5.7.1 Unable to relay for <user's email>
邮箱不可用。服务器响应为:5.7.1无法中继尝试添加

emailClient .DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;

似乎是凭证问题。正常的exe在您的帐户下运行。 ASP.NET应用程序在Windows Server中的网络服务下运行,在Windows XP中的ASPNET下运行。
您必须使用其他凭据才能从ASP.NET成功发送电子邮件

您是否设置了与邮件参数相关的web.config?IIRC,web.config将覆盖您的代码设置

另外,您可以做的另一件事是启用日志记录,以实际查看SmtpClient发送的内容

您需要向.config文件中添加一些值。以下是一个例子:

    <configuration>
    <system.diagnostics>
    <trace autoflush="true" />

    <sources>

      <source name="System.Net" >
        <listeners>
          <add name="MyTraceFile"/>
        </listeners>
      </source>

      <source name="System.Net.Sockets">
        <listeners>
          <add name="MyTraceFile"/>
        </listeners>
      </source>

    </sources>


    <sharedListeners>
      <add
        name="MyTraceFile"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="System.Net.trace.log"                />
    </sharedListeners>

    <switches>
      <add name="System.Net" value="Verbose" />
      <add name="System.Net.Sockets" value="Verbose" />
    </switches>
 </configuration>


这是针对IIS7的,因为我遇到了一个类似的问题,我必须在服务器上启用smtp服务


并在那里为每个域设置邮件

谢谢所有的帮助,我刚刚找到了答案。我必须指定域:

SmtpClient emailClient = new SmtpClient(servername);

            System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential(name, pass);
            SMTPUserInfo.Domain = domain; // i.e. "foo.com"
            emailClient.UseDefaultCredentials = false;
            emailClient.Credentials = SMTPUserInfo;
            emailClient.Send(message);

谢谢--我忘了说我试过这个,但我们的Exchange服务器似乎不支持它。我看看是否可以启用。谢谢Dave!我真的很感谢您的帮助,因为这向我展示了如何调试一整类问题:)