我使用以下代码发送电子邮件:
public static bool SendEmail(string To, string ToName, string From, string FromName, string Subject, string Body, bool IsBodyHTML)
{
try
{
MailAddress FromAddr = new MailAddress(From, FromName, System.Text.Encoding.UTF8);
MailAddress ToAddr = new MailAddress(To, ToName, System.Text.Encoding.UTF8);
var smtp = new SmtpClient
{
Host = "smtp.datagts.net",
Port = 587,
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = true,
Credentials = new System.Net.NetworkCredential("MeEmail@...", "Password")
};
using (MailMessage message = new MailMessage(FromAddr, ToAddr)
{
Subject = Subject,
Body = Body,
IsBodyHtml = IsBodyHTML,
BodyEncoding = System.Text.Encoding.UTF8,
})
{
smtp.Send(message);
}
return true;
}
catch
{
return false;
}
}
它在本地工作,当我在本地 IIS 下使用我的网站时,但当我将它上传到我的网站时,它不起作用,即使发生任何错误也不发送电子邮件。
有没有人可以帮我解决这个问题?
UPDATE1:我删除了 try catch 并捕获了一条错误消息:Failure sending mail
UPDATE2:我更改了我的 stmp 服务器并使用了我的 Gmail 帐户,请看这段代码:
public static bool SendEmail(string To, string ToName, string From, string FromName, string Subject, string Body, bool IsBodyHTML)
{
try
{
MailAddress FromAddr = new MailAddress(From, FromName, System.Text.Encoding.UTF8);
MailAddress ToAddr = new MailAddress(To, ToName, System.Text.Encoding.UTF8);
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new System.Net.NetworkCredential("MeEmail@gmail.com", "Password")
};
using (MailMessage message = new MailMessage(FromAddr, ToAddr)
{
Subject = Subject,
Body = Body,
IsBodyHtml = IsBodyHTML,
BodyEncoding = System.Text.Encoding.UTF8,
})
{
smtp.Send(message);
}
return true;
}
catch
{
return false;
}
}
现在我得到一个错误:(
我收到此 link 中提到的 "MustIssueStartTlsFirst" 错误. 我现在正在尝试检查@EdFS 点并使用端口 25
UPDATE3:这是因为我使用共享服务器,我只能将端口更改为 25,但它不起作用并给出相同的错误,我正在尝试获得我的支持服务器备份组
请您参考如下方法:
假设 SMTP 服务器 (smtp.datagts.net) 运行正常,需要检查一些项目:
- 您的代码似乎使用了
UseDefaultCredentials=true,但您在下一行提供了凭据 - 如评论中所述,请检查您的网络托管服务商是否阻止了端口 587
- 如果您托管在共享服务器(而非专用机器)上,可能 ASP.Net 设置为
中等信任。 如果 所以,你cannot use any port for SMTP other than Port 25 .
更新:
尝试找出错误。在您的 LOCAL(开发)机器中,将此添加到您的 web.config 中:
<system.web>
...
<securityPolicy>
<trustLevel name="Medium" />
</securityPolicy>
...
本地计算机上的 ASP.Net 在 FULL TRUST 中运行。上述设置使您正在使用的当前网站/应用程序以 中等信任 运行。您可以根据需要删除/评论。本练习的重点是尝试并匹配您的 Web 主机设置(如果在您的本地计算机上工作然后在发布时死掉,这显然是不同的)。如果能从您的网络托管服务商那里获取信息就好了……但在那之前……
然后尝试端口 587 和 25。
- 它应该在端口 587 上失败并出现安全异常(因为
中等信任) - 如果您的邮件服务器仅在端口 587 上接受 SMTP 连接,那么当然,端口 25 也不会工作(但您应该会得到不同的错误)。在这种情况下,“...它仍然不起作用...” 的要点是 SMTP 服务器 (smtp.datagts.net)仅接受连接端口 587
GMAIL 也是如此。如果 ASP.Net 的 Web 主机设置为 中等信任,则不能使用端口 587。我已经经历过很多次了——它会在我的本地机器上“工作”,但是一旦我在我的本地开发机器上启用 medium trust,它就会失败。
您应该询问您的网络托管服务商他们对 ASP.Net 的设置是什么 - 如果它是一些“自定义”设置,您可以索要一份副本并在您的开发箱中使用它。
