-4

我使用以下代码发送电子邮件。有时它工作正常,有时它会产生错误。有没有更好的代码来发送电子邮件。还有一件事是必须提供发送邮件的密码。

using System.Net.Mail;
public void SendEmail()
{
    MailMessage mail = new MailMessage();

    mail.To.Add("sales@ojhatraders.com");
    mail.From = new MailAddress("ojhatraderscustomer@gmail.com");
    mail.Subject = "Contact Us Enquiry";

    string Body = "<b>From:<b>" + mail.From + "<br/>" + "Your Query Recived "+"<br/>"+"Name"+nameTextBox.Text+"<br/>"+"Mobile:"+mobileTextBox.Text+"<br/>"
        +"Email:"+emailTextBox.Text+"<br/>"+"Query:"+queryTextBox.Text;
    mail.Body = Body;

    mail.IsBodyHtml = true;
    SmtpClient smtp = new SmtpClient();

    smtp.Host = "smtp.gmail.com"; //Or Your SMTP Server Address
    smtp.Credentials = new System.Net.NetworkCredential("sample@gmail.com", "passsword");//Or your Smtp Email ID and Password
    smtp.EnableSsl = true;
    smtp.Send(mail);
}

请提供一些有用的建议和更好的代码。

4

3 回答 3

1

您是否尝试过添加

     smtp.Port = 587;   

对您的凭据保密的最佳选择是运行一个接受匿名推荐人的 SMTP 服务器。满足此条件后,匿名请求不需要凭据。允许匿名请求的邮件服务越来越少,而 10 年前它曾经很猖獗。现在大多数 SMTP 服务都需要有效的用户名和密码凭据,有些甚至需要网络域凭据。

于 2013-07-05T17:10:44.097 回答
1

错误

如果不告知我们您的代码生成的错误,我们将无法真正帮助解决该问题。您应该检查推荐的 smtp-port。来自 Google 支持网站:

如果您尝试在端口 465(使用 SSL)和端口 587(使用 TLS)上配置 SMTP 服务器,但仍然无法发送邮件,请尝试将您的 SMTP 配置为使用端口 25(使用 SSL)。

“更好”的代码

发送邮件在 ASP.NET 中非常明显,因此发送邮件的“更好”代码更多的是一种观点,而不是事实。但是,我应该从架构的角度将事情分开一点。这将提高代码质量并减少重复代码。

您应该考虑做的事情以使此代码“更好”。

  1. 使用 stringbuilder 构建您的邮件内容并将其注入到 mailtemplate
  2. 使用例如默认构造函数、Send() 和 GetTemplate() 方法创建一个单独的类“电子邮件”
  3. 在 web.config 中指定 SMTP 设置

这样您就可以在应用程序中的任何地方用几行代码创建和发送电子邮件。我的一个应用程序中的一些示例代码:

var content = new StringBuilder();
content.Append("Name: " + contactForm.Name + "<br/>");
content.Append("Email: " + contactForm.Name + "<br/>");
content.Append("Message: " + contactForm.Name + "<br/>");

//Email constructor accepts two arguments: the content and the name of the template
var mail = new Email(content, "mailTemplateName")
mail.Send("mymail@domain.be", "recipient@gmail.com", "Subject of the mail")
于 2013-07-05T17:28:43.670 回答
0

尝试为您的 SMTP 包括一个端口。通常使用的是 25、465 和 587。我通常使用 25 没有问题,您也可以将 465 用于 ssl。我通常也将 UseDefaultCredentials 设置为 false:

SmtpClient smtp = new SmtpClient();
smtp.Port = 25;
smtp.UseDefaultCredentials = false;

此外,您可能希望在使用消息后将其处理掉。这是一种很好的做法,对性能和成本来说更安全。

using (smtp as IDisposable) 
                { 
                    smtp.Send(yourEmail); 
                    yourEmail.Dispose(); 
                }

总而言之,非常开放的问题。希望这会有所帮助,但要更具体一些,以便您下次获得更好的帮助

于 2013-07-05T17:16:09.270 回答