Разработать веб-сервис, позволяющий формировать и отправлять письма адресатам и логировать результат в БД.
- Сервис должен принимать POST-запрос по URL:
/api/mails/
. Тело запроса в формате JSON:
{
"subject": "string",
"body": "string",
"recipients": [
"string@email.site", "string2@email.site"
]
}
- Метод обработки должен:
- Сформировать email сообщение и отправить его.
- Добавить запись в БД. В записи указать все поля из сообщения, дату создания, результат отправки (OK, Failed) и поле FailedMessage, отвечающее за ошибку отсылки уведомления.
-
Веб-сервис должен отвечать на GET запросы по URL
/api/mails/
. Результатом должен быть список всех отправленных сообщений из БД. -
Закомментировать все
public
свойства и методы согласно XML Documentation Comments -
Конфигурацию SMTP вынести в файл конфигурации.
-
Разработку выполнить на C# .NET (MVS 2019-2022, Rider, VS Code), использовать ASP.NET Core последней версии.
-
В качестве СУБД любая реляционная (MySQL, PgSql, MS SQL etc)
-
В качестве ORM - Entity или Dapper. Для Entity требуется наличие миграции.
-
Библиотека отправки сообщений на свое усмотрение.
Запуск приложения происходит согласно настройкам указанным в файле launchSettings.json, например, https
профиль запускается на 7063 или 5194 портах:
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7063;http://localhost:5194",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
Проверка контроллера производилась при помощи инструмента Swagger. Настройка строки подключения к базе данных производится в файле appsettings.json
"ConnectionStrings": {
"DefaultString": "server=localhost;user=root;password=toor;database=mailsdb"
}
Настройка подключения к SMTP-серверу находится в том же файле appsettings.json
"MailConfig": {
"SmtpServer": "smtp.server.address",
"SmtpPort": 25,
"Email": "email@email.com",
"Password": "password"
}
Результат работы GET-запроса api/mails/
{
"id": "08dc169d-90b7-4269-87b2-9833bfc6f175",
"subject": "ASP NET Core Works?",
"body": "Yes",
"result": "OK",
"failedMessage": "",
"createdAt": "2024-01-16T14:15:16.873548",
"recipients": [
{
"recipient": "mail1@email.com"
},
{
"recipient": "mail2@email.com"
}
]
}
- ASP.NET Core
- .NET 7
- Entity Framework, Entity Framework Tools (с миграциями)
- СУБД: MySQL
- Dependency Injection
- MailKit в качестве библиотеки для отправки Email
- Согласно ТЗ, необходимо реализовать 2 эндпоинта по одинаковым адресам
api/mails/
, почему бы не придать контекста добавив, к примеру, для POST-запросаapi/mails/send
, а для GET-запросаapi/mails/get
?