1

我使用以下代码发送电子邮件:

        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;
                }
            }

现在我得到一个错误:(

我收到此链接中提到的“MustIssueStartTlsFirst”错误。我现在正在尝试检查@EdFS 点并使用端口 25

UPDATE3:这是因为我使用共享服务器,我只能将端口更改为 25 ,并且它不起作用并给出相同的错误,我正在尝试从我的服务器备份团队获得支持

4

1 回答 1

5

假设SMTP 服务器 (smtp.datagts.net) 运行良好,需要检查一些项目:

  1. 您的代码似乎正在使用UseDefaultCredentials=true,但在下一行您正在提供凭据
  2. 如评论中所述,检查您的网络主机是否未阻止端口 587
  3. 如果您托管在共享服务器(而不是专用机器)上,则很可能ASP.Net 设置为medium trust. 如果是这样,您不能为 SMTP 使用Port 25以外的任何端口。

更新:

尝试解决错误。在您的本地(开发)机器中,将其添加到您的 web.config:

<system.web>
...
    <securityPolicy>
      <trustLevel name="Medium" />
    </securityPolicy>
...

本地计算机上的 ASP.Net 以FULL TRUST. 上述设置使您正在处理的当前网站/应用程序在medium trust. 您可以根据需要删除/评论。这个练习的重点是尝试匹配您的网络主机设置(如果事情在您的本地机器上工作然后在发布时死掉,这显然是不同的)。最好从您的网络主机获取信息..但在那之前....

然后尝试端口 587 和 25。

  • 它应该在端口 587 上失败并出现安全异常(因为medium trust
  • 如果您的邮件服务器接受端口 587 上的 SMTP 连接,那么当然,端口 25 也将不起作用(但您应该得到一个不同的错误)。在这种情况下,关键是“......它仍然不起作用......”是 SMTP 服务器(smtp.datagts.net)接受端口 587 上的连接

GMAIL 也是如此。如果您的 ASP.Net 网络主机设置为medium trust. 我已经经历过很多次了——它会在我的本地机器上“工作”,但是一旦我medium trust在我的本地开发机器上启用它,它就会失败。

你应该询问你的网络主机他们对 ASP.Net 的设置是什么——如果它是一些“自定义”设置,你可以要求一个副本并在你的开发框中使用它。

于 2012-05-12T14:12:31.703 回答