Skip to main content
 首页 » 编程设计

c#之从我的网站通过 C# 发送电子邮件

2024年02月02日33mate10pro

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

        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) 运行正常,需要检查一些项目:

  1. 您的代码似乎使用了 UseDefaultCredentials=true,但您在下一行提供了凭据
  2. 如评论中所述,请检查您的网络托管服务商是否阻止了端口 587
  3. 如果您托管在共享服务器(而非专用机器)上,可能 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 的设置是什么 - 如果它是一些“自定义”设置,您可以索要一份副本并在您的开发箱中使用它。