繁体   English   中英

能够通过.exe发送email,但不能发送ASP.NET?

[英]Able to send email through .exe, but not ASP.NET?

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

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>

我是 IIS 的新手,但您对如何调试有什么建议吗?

更新:我还必须为用户指定域。 仍然不确定为什么没有它的regular.exe 是可以的。 希望这可以帮助某人。

似乎是一个凭证问题。 正常的 exe 在您的帐户下运行。 ASP.NET 应用程序在 Windows 服务器的 NETWORK SERVICE 和 Windows XP 下的 ASPNET 下运行。 您必须使用其他凭据才能从 ASP.NET 成功发送 email

尝试添加

emailClient .DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;

您是否在 web.config 中设置了与邮件参数相关的任何内容? IIRC,web.config 将覆盖您的代码设置。

此外,您可以做的其他事情是启用日志记录,以实际查看 SmtpClient 发送的内容。

您需要在 your.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>

这是包含更多信息的链接: http://systemnetmail.com/faq/4.10.aspx

这是否适用于 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM