从我的网站发送C#的电子邮件

Ali*_*ghi 1 c# asp.net sendmail

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

        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;
            }
        }
Run Code Online (Sandbox Code Playgroud)

它适用于本地,当我在我的本地IIS下使用我的网站时,但当我上传到我的网站时,它不起作用,即使发生任何错误也不会发送电子邮件.

有没有人帮我这个?

UPDATE1:我删除try catch并捕获此消息的错误:Failure sending mail

更新2:我更改了我的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;
                }
            }
Run Code Online (Sandbox Code Playgroud)

现在我得到一个错误:(

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

更新3:这是因为我使用共享服务器,我只是可以将端口更改为25,并且钢不起作用给出相同的错误,我试图从我的服务器备份团队获得支持

EdS*_*dSF 5

假设 SMTP服务器(smtp.datagts.net)运行正常,请检查以下项目:

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

更新:

试图找出错误.在LOCAL(开发)计算机中,将其添加到web.config:

<system.web>
...
    <securityPolicy>
      <trustLevel name="Medium" />
    </securityPolicy>
...
Run Code Online (Sandbox Code Playgroud)

本地计算机上的ASP.Net运行FULL TRUST.上述设置使您正在处理的当前网站/应用程序运行medium trust.您可以根据需要删除/评论.本练习的目的是尝试匹配您的Web主机设置(如果在本地计算机上工作,则在发布时就会死亡,这显然是不同的).从你的网站主机获取信息会很高兴..但直到那时....

然后尝试端口587和25.

  • 它应该在端口587上失败并出现安全性异常(因为medium trust)
  • 如果您的邮件服务器接受端口587上的SMTP连接,那么当然端口25也不会工作(但是您应该得到不同的错误).问题的关键是"...它仍然无法正常工作......"在这种情况下SMTP服务器(smtp.datagts.net)接受端口587连接

GMAIL也是如此.如果您的ASP.Net的Web主机设置是,则无法使用端口587 medium trust.我已经经历了这么多次 - 它将在我的本地机器中"工作",但是一旦我medium trust在我的本地开发机器中启用它就会失败.

您应该询问您的Web主机他们的ASP.Net设置 - 如果它有一些"自定义"设置,您可以要求复制并在您的开发框中使用它.