【问题标题】:ASP Email sending errorASP 电子邮件发送错误
【发布时间】:2011-02-07 02:49:37
【问题描述】:

我发现这个网站对我以前遇到的所有问题都非常有用,但是我无法获得以下帮助。

我开发了一个可以发送电子邮件的网站。在本地主机上,这绝对正常。当我说本地主机时,我能够接收发送的电子邮件,但是当我上传到服务器时,当它开始发送电子邮件的过程时我会遇到这个错误。

“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应IPADDRESS:PORT”

尝试 ping 端口地址,ping 正常。

这里是代码

string strFrm = ConfigurationManager.AppSettings["FromAddress3"].ToString();

string[] receive = {"emailaddress1","emailaddress2","emailaddress3","emailaddress4"};

string subject = "New registration";

string body = "<html><head><title>Registered Candidates</title></head><body>bla bla bla</body></html>";

//I however have put reg exp validator on the form

if(txtEmail.Text.Contains("@") && txtEmail.Text.Contains("."))
{
    for (int i = 0; i <= receive.Length - 1; i++)
    {
        MailMessage msg = new MailMessage(strFrm, receive[i], subject, body);
        msg.IsBodyHtml = true;

        SmtpClient client = new SmtpClient();

        client.Send(msg);
     }

     Response.Redirect("Thankyou.html");

Web.config

<mailSettings>
  <smtp from="from address">
    <network host="server" port="25"
userName="username" password="password"  />
  </smtp>
</mailSettings>

请帮忙。我通过网站的预编译上传到我的服务器并上传文件。

【问题讨论】:

  • 生产服务器是否在 localhost 上启用了 SMTP?您是否在 Web.config 中配置了 SMTP 设置?
  • 感谢雅各布的回复。即使在我的本地主机中,程序也会连接到 SMTP 服务器,然后将邮件发送到提供的电子邮件地址。是的。我已经在 web config 中配置了设置,正如您在上面看到的那样,我在发送邮件时尝试覆盖这些设置。
  • 您似乎没有覆盖 SMTP 地址?你确定服务器启用了 SMTP 吗?
  • 抱歉,我只是覆盖了凭据。但是,我更改了 web.config。它看起来像这样 并已删除 NetworkCredential nc = new NetworkCredential(Usr, Pwd); client.UseDefaultCredentials = false; client.Credentials = nc;来自程序。

标签: asp.net


【解决方案1】:

确保您指向生产服务器上的 SMTP 服务,它可能无法像在开发机器上那样在“localhost”上工作。 ping 服务器并不能真正告诉您它是否启用了 SMTP。

我通常更喜欢在 web.config 中为我的网站设置 SMTP:

<system.net>
  <mailSettings>
    <smtp deliveryMethod="Network" from="you@yourdomain.com">
      <network host="localhost" port="25" userName="user" password="pass" />
    </smtp>
  </mailSettings>
</system.net>

更新:

如果您的代码在您的开发机器上运行,但它在具有相同配置的服务器上失败,那么可能有一些东西阻塞了。我建议尝试使用一个简单的实现来测试服务器的 SMTP 配置。您可能想尝试&lt;smtp deliveryMethod="SpecifiedPickupDirectory"&gt;,它在测试发送电子邮件的代码时非常有用。请参阅 MSDN 上的 SmtpDeliveryMethod Enumeration

【讨论】:

  • 已编辑 web.config。它看起来像这样 并删除了 NetworkCredential nc = new NetworkCredential(Usr, Pwd); client.UseDefaultCredentials = false; client.Credentials = nc;从节目。但我还是一样。当我说 localhost 时,我将它托管在 IIS 上,但该页面仍然连接到与 we.config 中相同的 smtp 服务器以发送邮件。
  • 用您的最新更改更新您的问题,包括您的 web.config。 :)
  • 这会将电子邮件复制到某个文件夹,外部应用程序可以使用该文件夹发送相同的电子邮件。它对我解决问题有什么用处?
  • 确认您的电子邮件生成代码是否正常工作很有用,并且您只是处理服务器配置问题。
  • Jakob,从我的本地系统运行时能够接收电子邮件。但是当加载到服务器上时,我得到了那个错误。
【解决方案2】:

解决了.. :D

我的托管服务器是 Godaddy,我的托管计划仅支持古老的 system.web.mail 即 CDOSYS 概念。

这里是代码。

using System.Web.Mail;

private void SendEmail()
{
const string SERVER = "relay-hosting.secureserver.net";
MailMessage oMail = new System.Web.Mail.MailMessage();
oMail.From = "emailaddress@domainname";
oMail.To = "emailaddress@domainname";
oMail.Subject = "Test email subject";
oMail.BodyFormat = MailFormat.Html; // enumeration
oMail.Priority = MailPriority.High; // enumeration
oMail.Body = "Sent at: " + DateTime.Now;
SmtpMail.SmtpServer = SERVER;
SmtpMail.Send(oMail);
oMail = null; // free up resources
}

感谢 Jakob 的积极参与! :)

【讨论】:

  • 您现在是否提供空白用户名/密码?请使用您的更改编辑您的原始问题(这是一个答案),并且不要忘记更改您的服务器的登录名/密码。
  • (你现在应该删除这个答案)
猜你喜欢
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 2016-05-06
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多