Заявка, пожалуйста, пришлите мне E-mail

Это класс электронной почты, который я создал для отправки электронной почты, когда /если служба Windows (которая будет установлена ​​на всех компьютерах) выдает ошибку, так что я знаю, что происходит.

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

class Emailer
{
    public void sendEmail(string bodyText, string sender, List<string> recipientAddresses)
    {
        int portNumber = 25;
        SmtpClient smtpClient = new SmtpClient("mailexchanger_String", portNumber);
        using (MailMessage mailMsg = new MailMessage())
        {
            mailMsg.Body = bodyText;
            mailMsg.IsBodyHtml = true;
            mailMsg.Priority = MailPriority.High; //I want to know now!
            foreach (string address in recipientAddresses)
            {
                mailMsg.To.Add(address);
            }
            mailMsg.From = new MailAddress(sender);

            smtpClient.Send(mailMsg);
        }
    }
}

Я также хотел бы знать, есть ли у меня правильные идеи о том, как классы должны работать и работать; это простой метод, заключенный внутри класса. Так ли это должно быть?

12 голосов | спросил Malachi 13 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 13 Sep 2014 01:15:57 +0400 2014, 01:15:57

1 ответ


8

Пара пунктов:

Именование и amp; Typing

public void sendEmail(string bodyText, string sender, List<string> recipientAddresses)
  • Имена методов в должны быть PascalCase, по соглашению .
  • recipientAddresses не обязательно должен быть List<string> ; вы используете его только для повторения его содержимого, поэтому IEnumerable<string> будет достаточно и более гибким.
    • Если по какой-либо причине метод действительно нуждается в List<string>, лучше было бы зависеть от абстракции - здесь IList<string> или любой ICollection<string> будет достаточно. В зависимости от класса List<T> привязка вашего кода к конкретной реализации этих интерфейсов.
  • Потому что mailMsg.IsBodyHtml есть true, имя bodyText вводит в заблуждение - я бы назвал его bodyHtml, чтобы дать клиентскому коду подсказку о возможностях форматирования.

IDisposable

Поскольку .net 4.0, класс SmtpClient реализует IDisposable, что означает, что вы должны обернуть его в блок using, если вы не нацеливаете 3.5 или более ранние версии .


Лучшим подходом может быть использование структуры ведения журнала, например NLog (доступно через NuGet ). Вы можете настроить протокол target на SMTP-сервер и получить всю трассировку стека исключений, доставленную в ваш почтовый ящик и , зарегистрированный в файле журнала приложения, не говоря уже о возможности регистрации TRACE, DEBUG, INFO или WARNING, а также отправляет вам электронное письмо (асинхронно!), Когда регистрируется запись ERROR.


Вам также следует рассмотреть возможность использования SendAsync над Send, потому что, вы знаете, async bests sync ! :)

ответил Mathieu Guindon 13 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 13 Sep 2014 01:59:08 +0400 2014, 01:59:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132