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

时间:2012-05-12 11:42:30

标签: 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;
            }
        }

它适用于本地,当我在我的本地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,而且它不起作用也会产生同样的错误,我试图从我的支持服务器备份团队

1 个答案:

答案 0 :(得分:5)

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

  1. 您的代码似乎正在使用UseDefaultCredentials=true,但在下一行您提供凭据
  2. 如评论中所述,请检查端口587是否未在您的网站主机上屏蔽
  3. 如果您托管在共享服务器(非专用计算机)上,那么可能 ASP.Net将设置为medium trust IF 所以,您cannot use any port for SMTP other than Port 25

  4. 更新

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

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

    本地计算机上的ASP.Net在FULL TRUST中运行。上述设置使您正在处理的当前网站/应用程序在medium trust中运行。您可以根据需要删除/评论。这个练习的目的是尝试并匹配你的网站主机设置(如果你的本地机器上的东西工作,那么它们显然会有所不同)。从你的网站主机获取信息会很高兴..但在那之前......

    然后尝试端口587和25。

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

    GMAIL是同一个故事。如果ASP.Net的Web主机设置为medium trust,则无法使用端口587。我经历了很多次 - 它会&#34;工作&#34;在我的本地计算机上,但只要在本地开发计算机中启用medium trust,它就会失败。

    您应该询问您的网络托管服务商他们对ASP.Net的设置是什么 - 如果它的一些&#34; custom&#34;您可以设置副本并在开发框中使用它。