Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 交易失败。服务器响应为:SMTP主机_C#_Asp.net_Smtpclient - Fatal编程技术网

C# 交易失败。服务器响应为:SMTP主机

C# 交易失败。服务器响应为:SMTP主机,c#,asp.net,smtpclient,C#,Asp.net,Smtpclient,我一直在尝试制作一个简单的电子邮件发送应用程序,但我被这个错误阻止了,我似乎找不到任何有这个问题的人(但有点不知道该搜索什么) 因此,当我尝试发送电子邮件时出现此错误,它只会将此错误与SMTP主机的名称一起返回给我 交易失败。服务器响应为:smtp.host.com 如果我看到它崩溃的痕迹 位于System.Net.Mail.SmtpConnection.GetConnection(ServicePoint ServicePoint) 这是代码示例,没有什么特别之处 MailMessage ma

我一直在尝试制作一个简单的电子邮件发送应用程序,但我被这个错误阻止了,我似乎找不到任何有这个问题的人(但有点不知道该搜索什么)

因此,当我尝试发送电子邮件时出现此错误,它只会将此错误与SMTP主机的名称一起返回给我

交易失败。服务器响应为:smtp.host.com

如果我看到它崩溃的痕迹

位于System.Net.Mail.SmtpConnection.GetConnection(ServicePoint ServicePoint)

这是代码示例,没有什么特别之处

MailMessage mail = new MailMessage();
mail.From = new MailAddress(CurrentUser.email);
mail.Subject = txtSubject.Text;
mail.Body = txtMailBody.Text;

try
{
    foreach (ListItem user in lbSelectedUsr.Items)
    { 
        mail.To.Add(new MailAddress(user.email));
    }

    SmtpClient mailClient = new SmtpClient("smtp.host.com");
    mailClient.Send(mail);

    lblResultOK.Visible = true;
}
catch(Exception ex)
{
    lblResultOK.Visible = true;
}
注意,为了示例,SMTP是假的

我尝试使用无效的SMTP,但它给了我不同的错误,因此SMTP似乎正常,
我也试着把凭证放进去,同样的错误。有任何关于发生了什么的提示吗?

尝试通过谷歌smtp发送,如果一切正常,则将其更改为您的smtp服务器信息。如果您这样做并且问题仍然存在,则必须检查您的smtp服务器

  • 这是一个很好的起点:()
  • 阅读它的教程

我是否在Web.config文件中正确设置了SMTP配置? 我会说尝试通过host=“smtp.gmail.com”发送一封示例电子邮件



服务器不接受运行应用程序的计算机的中继。适当配置服务器,或在已配置为中继的计算机上运行代码(通常是域中的所有计算机;我认为您的计算机属于不同于SMTP服务器的域)。

以下代码必须放在web.config中。注意点是defaultCredentials=“false”



您正在使用exchange吗?如果是这样,服务器是否设置为从运行代码的ip地址接受中继?还要确保电子邮件地址是有效的。尝试将foreach循环取出,对“to address”进行硬编码,并对address中的一个虚拟对象进行硬编码,然后查看它是否有效。这将消除作为问题的地址。您也可以尝试邮件服务器的IP地址,而不是主机名。我想我是exchange的,我被切换到了那个新项目,对此我很困惑,我会四处询问,但我记得我的计算机在连接到本地服务器时遇到了一些问题,所以这可能就是问题所在。我确实把硬编码邮件放在了“收件人”和“发件人”上,结果还是一样的。我不确定我是否能找到邮件服务器的IP地址,我们正在使用我们的internet主机的SMTP。好的,我们使用了错误的SMTP。显然,我们使用的是Bell(Sympatico),我们正在尝试使用他们的开放式SMTP服务器(不需要身份验证),该服务器应该是:smtp1.Sympatico.ca,但它给了我一个更模糊的错误。{“无法从传输连接读取数据:远程主机强制关闭了现有连接。”}听起来问题在于smtp服务器不接受发送电子邮件的请求。客户端smtp错误消息故意含糊不清。如果你想找出真正的问题是什么,而不需要花费无数的时间进行尝试和错误,你需要联系没有与你交谈的服务器的邮局主管或管理员,并让他/她检查服务器日志。如果将整个ex对象转储到异常处理程序中,您可能会得到一些额外的信息。我会检查我的SMTP。如上所述,它通过谷歌运行良好。这个问题感觉像是来自我们的SMTP。如果您的服务器有凭据,那么您应该在SmtpClient mailClient=new SmtpClient(“abc.host.com”)之后使用mailClient.NetworkCredential(“用户名”、“密码”)传递凭据;您的答案是问题中提供的代码示例的副本。如果您想包含评论中的信息,请编辑您的答案。
<system.net>
<mailSettings>
  <smtp deliveryMethod="Network" from="emailAddress">
    <network host="smtp.gmail.com" port="587" userName="emailAddress" password="password" defaultCredentials="false"/>
  </smtp>
</mailSettings>
MailMessage mail = new MailMessage();
mail.From = new MailAddress(CurrentUser.email);
mail.Subject = txtSubject.Text;
mail.Body = txtMailBody.Text;

try
{
    foreach (ListItem user in lbSelectedUsr.Items)
    { 
        mail.To.Add(new MailAddress(user.email));
    }

    SmtpClient mailClient = new SmtpClient("smtp.host.com");
    mailClient.EnableSsl = true
    mailClient.Send(mail);

    lblResultOK.Visible = true;
}
catch(Exception ex)
{
    lblResultKO.Visible = true;
}
<system.net>
<mailSettings>
  <smtp from="aaa@yourdomain.com">
    <network host="mail.yourdomain.com" userName="aaa@yourdomain.com" password="your password" port="587" defaultCredentials="false"/>
  </smtp>
</mailSettings>