2013-11-29 10 views
0

Привет Я хочу настроить SMTP-почту и отправить почту с C#.Как настроить настройку почты SMTP

Я использую форму и сохраненные настройки SMTP onces в базе данных.

всякий раз, когда я хочу отправить почту, я использую функцию ниже.

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 работает. Мне нужно ваше предложение для других почтовых провайдеров, то одна функция будет работать или любые другие изменения потребуются.

+4

У вас не может быть достаточно свободных предложений 'catch'. Всегда хороший способ мгновенно отключить ваше приложение. –

+4

@UweKeim спасибо. У меня есть функция обработки ошибок Globle. Я всегда использовал ее. в Catch {MyFunction()} –

ответ

2

Есть целый ряд вещей, которые вы должны рассмотреть следующие вопросы:

  1. Dont принести в ФППХ параметрах из базы данных внутри функции. Передайте параметры функции. Это поможет, если вы хотите, чтобы много раз отправляли много писем, и вам не нужно подключаться к базе данных каждый раз.
  2. Не подавляйте исключение. Запишите его или отбросьте исключение, чтобы внешний модуль его мог обрабатывать .
  3. Как уже было сказано c45207, храните полный адрес хоста SMPT в базе данных .
  4. Код отправляет письмо только одному человеку. Вместо того, чтобы использовать IList _pToMailId и цикл его следующим образом:

      foreach (var to in _pToMailId) 
          { 
           message .To.Add(to); 
          } 
    

    Вы можете repead это для CC и BCC соответственно.

+3

Спасибо. Я хочу отправить письмо только одному человеку. –

4

Нет, это не правильно. Во-первых, вы не можете предположить, что все SMTP-серверы имеют форму «smtp.example.com». Как насчет «example.net»? Как насчет «mail.example.com»?

Я рекомендую, чтобы ваша база данных хранила полный адрес хоста SMTP. Не делайте никаких вычислений по этому значению.

Смежные вопросы