C# 如何配置SMTP邮件设置

C# 如何配置SMTP邮件设置,c#,smtp,C#,Smtp,您好,我想配置SMTP邮件设置并从C#发送邮件 我正在使用表单并将SMTP设置保存在数据库中 无论何时我想发送邮件,我都在使用下面的函数 private void _MSendMail(string _pToMailId, string _pBody, string _pMailSubject = "Test Mail") { string _SMTPHOST = Value Come From Database; int _SMTPPORT = Value Come From

您好,我想配置SMTP邮件设置并从C#发送邮件

我正在使用表单并将SMTP设置保存在数据库中

无论何时我想发送邮件,我都在使用下面的函数

private void _MSendMail(string _pToMailId, string _pBody, string _pMailSubject = "Test Mail")
{
    string _SMTPHOST = Value Come From Database;
    int _SMTPPORT = Value Come From Database;
    bool _ENABLESSL = Value Come From Database;
    string _MAILID = Value Come From Database;
    string _USERNAME = Value Come From Database;
    string _PASSWORD = Value Come From Database;
    using (var message = new System.Net.Mail.MailMessage())
    {
        message.To.Add(_pToMailId);
        message.Subject = _pMailSubject;
        message.From = new System.Net.Mail.MailAddress(_MAILID);
        message.Body = _pBody;
        using (var smtp = new System.Net.Mail.SmtpClient())
        {
            smtp.Host = "smtp." + _SMTPHOST + ".com";
            smtp.Port = _SMTPPORT;
            smtp.UseDefaultCredentials = false;
            smtp.Credentials = new System.Net.NetworkCredential(_USERNAME, _PASSWORD);
            smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
            smtp.EnableSsl = _ENABLESSL;
            try
            {
                smtp.Send(message);
            }
            catch (Exception e) { }
        }
    }
}
我的问题是:这个函数是正确的还是做了一些修改??。。
我用Gmail测试过它,它能工作。我需要你对其他邮件提供商的建议。相同的功能将起作用,或者需要任何其他更改。

不,这是不正确的。首先,您不能假设所有SMTP服务器的格式都是“SMTP.example.com”。那么“example.net”呢?“mail.example.com”怎么样


我建议您的数据库存储完整的SMTP主机地址。不要对该值进行任何计算。

不,它不正确。首先,您不能假设所有SMTP服务器的格式都是“SMTP.example.com”。那么“example.net”呢?“mail.example.com”怎么样


我建议您的数据库存储完整的SMTP主机地址。不要对该值进行任何计算。

您必须考虑以下几点:

  • 不要从函数内部的数据库中获取smpt参数。 将参数传递给函数。如果你愿意,这会有帮助 反复发送许多电子邮件,您不必连接到 每次都是数据库
  • 不要抑制异常。记录它或抛出异常,以便 外部模块可以处理它
  • 如前面c45207所述,将完整的SMPT主机地址存储在 数据库
  • 该代码只向一个人发送邮件。改用 IList _pToMailId并按如下方式循环它:

                foreach (var to in _pToMailId)
                {
                    message .To.Add(to);
                }
    
    您可以分别为CC和BCC重复此操作


  • 您必须考虑以下几点:

  • 不要从函数内部的数据库中获取smpt参数。 将参数传递给函数。如果你愿意,这会有帮助 反复发送许多电子邮件,您不必连接到 每次都是数据库
  • 不要抑制异常。记录它或抛出异常,以便 外部模块可以处理它
  • 如前面c45207所述,将完整的SMPT主机地址存储在 数据库
  • 该代码只向一个人发送邮件。改用 IList _pToMailId并按如下方式循环它:

                foreach (var to in _pToMailId)
                {
                    message .To.Add(to);
                }
    
    您可以分别为CC和BCC重复此操作


  • 不能有足够的空
    catch
    子句。始终是保持应用程序即时无错误的好方法。@UweKeim谢谢。我有一个全局函数错误处理我总是用它。在Catch{MyFunction()}中,不能有足够的空
    Catch
    子句。始终是保持应用程序即时无错误的好方法。@UweKeim谢谢。我有一个全局函数错误处理我总是用它。在Catch{MyFunction()}中,谢谢。我只想给单身人士发邮件。谢谢。我只想给单身人士发邮件。