Pull to refresh

Comments 16

Как всегда привязка к Asp .Net приложению цветет и пахнет.... А если убрать эту привязку то вполне можно обойтись 1 сущностью для работы с e-mail, которую кстати очень удобно будет интегрировать в DI контейнер 🙂

Да это тоже вариант, но задача - сделать микросервис который работает с Rabbit и на него ещё накручу пару функций своих, поэтому .Net.

В смысле - работающий с раббит? Читающий оттуда? Или пишущий? Или что? Какая при этом связь с .Net (ну, кроме того, что вам, видимо, удобнее на нем писать)?

Читающий. А микросервис работающий на API можно и без .Net организовать, но думаю это будет более изощрённо и не так поворотливо.

Читающий.

Зачем вам тогда asp.net для этого?

А микросервис работающий на API можно и без .Net организовать

Что такое "работающий на API"?

Вы точно не путаете .net и asp.net?

У меня на проекте примерно такой же, только с разными провайдерами работает, в том числе Mailchimp, и нет контроллеров, только потребляет сообщения из очереди.

Для запуска приложения, исходные данные берутся из файлов appsettings.Development.json и appsettings.json. Эти файлы содержат конфигурационные значения, такие как настройки почты, которые используются для настройки приложения. В файле appsettings.Development.json содержатся значения, применяемые во время разработки, в то время как appsettings.json содержит значения для других окружений, таких как продакшн

Ну вообще не совсем так.

Конфигурацию строит специальный билдер, она собирается в следующем порядке:
1.appsetting.json
2.appsetting.{ТЕКУЩЕЕ ОКРУЖЕНИЕ}.json
3.переменные окружения

Исходя из порядка по умолчанию appsetting.{ТЕКУЩЕЕ ОКРУЖЕНИЕ}.json переопределяет или создаёт конфигурационную секцию, которая будет использоваться только в текущем окружении, a appsetting.json содержит общую конфигурацию, которая будет использоваться в любом окружении.

Как рекомендация, данные, которые могут быть скомпрометированы (здесь это логин и пароль от смтп-клиента) лучше хранить именно в переменных окружения, чтобы усложнить их учетку к третьим лицам.

П.С.

Тэстовые данные для отправки


Мои глаза истекли кровью, на этом предложении)))

  1. Почему проект называется в lowerCamelCase?

  2. using (var client = new SmtpClient()), а потом client.Dispose();, а зачем Dispose?

    1. Давно уже существует конструкция using var, имхо, но для глаза приятнее

  3. Какие-то магические Bcc и Cc в конструкторе, что они означают? (если комментарии в полном коде у конструктора есть, то вопрос отпадает)

  4. Не придирка, а просто вопросы:

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

    2. не пробовали разделение настроек, чтобы не все в appsettings.json складывать? я обычно такие вещи разбиваю на логические куски, например: SerilogSettings.json (настройки для Serilog'a), MongoSettings.json (настройки для MongoDB), etc. В вашем примере хорошо (ИМХО!!!) подошло разделение конфига: appsettings.json, mailsettings.json

  1. Не совсем магические, если учитывать контекст. Это отправка копий письма дополнительным адресатам, но да, лучше бы добавить комментарий, чтобы не было вопросов.

...вот я вижу у вас в коде UseAuthorization. А зачем? У вас есть авторизация? На чем она основана?

Или вот зачем вам сваггер?

Пожалуйста, обратите внимание, что все поля с адресами электронной почты (to, bcc, cc, from) должны быть заполнены при отправке письма. В противном случае, сервер может вернуть ошибку 500.

А почему 500, если это совершенно банальная ошибка валидации входных данных?

Клёво спасибо за то что заметили что можно доработать! 500 - потому севак яндекса выдавал такую ошибку в дебагере на сколько я помню.

500 - потому севак яндекса выдавал такую ошибку в дебагере на сколько я помню.

Так почему у вас невалидные данные вообще отправляются в Яндекс?

...или вот у вас есть настройка:

различные свойства, такие как [...] UseOAuth, которые позволяют задать соответствующие параметры для подключения и аутентификации к почтовому серверу Яндекса.

И я такой: хм, интересно, как у вас там OAuth сделан. А потом выясняется, что настройка-то нигде не используется, зато:

client.AuthenticationMechanisms.Remove("XOAUTH2");

А пароль при этом, небось, лежит в плейнтексте, потому что работы с секретами я у вас тоже не вижу.

Грустно это всё.

Метод MailService.SendAsync нарушает сразу два принципа - "Single Responsibility" и "Dependency Inversion". Он делает сразу две вещи - создает MimeMessage из MailData и отправляет его в SmtpClient, и делает это обращаясь к нему напрямую (new SmtpClient()), а не через абстракцию. На практике результатом будет то, что, например, невозможно будет оттестировать создание MimeMessage не отправляя при этом его в "настоящий" SMTP.

Sign up to leave a comment.

Articles