From 413c804a8772afdc383f08c764b40bbadd783a73 Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Mon, 8 Sep 2025 14:26:27 +0530 Subject: [PATCH] Adding the code to send email using brevo --- Marco.Pms.Model/Utilities/SmtpSettings.cs | 1 + .../Controllers/WeatherForecastController.cs | 155 ++++++++++++++++++ Marco.Pms.Services/Marco.Pms.Services.csproj | 1 + Marco.Pms.Services/Service/EmailSender.cs | 45 ++++- .../appsettings.Development.json | 1 + 5 files changed, 200 insertions(+), 3 deletions(-) diff --git a/Marco.Pms.Model/Utilities/SmtpSettings.cs b/Marco.Pms.Model/Utilities/SmtpSettings.cs index 28e16f5..cc7c051 100644 --- a/Marco.Pms.Model/Utilities/SmtpSettings.cs +++ b/Marco.Pms.Model/Utilities/SmtpSettings.cs @@ -3,6 +3,7 @@ public class SmtpSettings { public string? SmtpServer { get; set; } + public string? ApiKey { get; set; } public int Port { get; set; } public string? SenderName { get; set; } public string? SenderEmail { get; set; } diff --git a/Marco.Pms.Services/Controllers/WeatherForecastController.cs b/Marco.Pms.Services/Controllers/WeatherForecastController.cs index 2ffd222..c37b909 100644 --- a/Marco.Pms.Services/Controllers/WeatherForecastController.cs +++ b/Marco.Pms.Services/Controllers/WeatherForecastController.cs @@ -1,5 +1,10 @@ +using brevo_csharp.Api; +using brevo_csharp.Model; using Marco.Pms.Services.Service; using Microsoft.AspNetCore.Mvc; +using System.Globalization; +using System.Text; + namespace MarcoBMS.Services.Controllers { @@ -49,5 +54,155 @@ namespace MarcoBMS.Services.Controllers //} + [HttpPost("send")] + public async Task SendEmail() + { + var apiKey = "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"; + // Configure API key authorization + var config = new brevo_csharp.Client.Configuration(); + config.ApiKey.Add("api-key", apiKey); + var apiInstance = new TransactionalEmailsApi(config); + + var recipient = new List + { + new SendSmtpEmailTo("ashutosh.nehete@marcoaiot.com") + }; + var sender = new SendSmtpEmailSender + { + Name = "Kartik Sharma", + Email = "kartik.sharma@marcoaiot.com" + }; + + var team = new StringBuilder(); + team.Append(""); + team.AppendFormat( + "" + + "
" + + "
Admin
" + + "
1
" + + "
"); + team.AppendFormat( + "" + + "
" + + "
Helper
" + + "
5
" + + "
"); + team.AppendFormat( + "" + + "
" + + "
Welder
" + + "
8
" + + "
"); + + team.Append(""); + + var task = new StringBuilder(); + + task.AppendFormat("" + + "Activity
" + + "Building > Floor > WorkArea > WorkItem" + + "30 / 16" + + "14" + + "{0}" + + "", DateTime.UtcNow.ToString("dd-MMM-yyyy")); + + task.AppendFormat("Kartik Sharma (Welder)
"); + task.AppendFormat("Kartik Sharma (Helper)
"); + task.AppendFormat("Pramod Mahajan (Driver)
"); + + task.AppendFormat("This is the test"); + + + var attendance = new StringBuilder(); + + attendance.AppendFormat("" + + "Kartik Sharma" + + "Welder" + + "{0}" + + "{1}" + + "This is Test" + + "", + DateTime.UtcNow.ToString("dd-MMM-yyyy h:mm tt", CultureInfo.InvariantCulture), + DateTime.UtcNow.ToString("dd-MMM-yyyy h:mm tt", CultureInfo.InvariantCulture)); + + attendance.AppendFormat("" + + "Kartik Sharma" + + "Helper" + + "{0}" + + "{1}" + + "This is Test" + + "", + DateTime.UtcNow.ToString("dd-MMM-yyyy h:mm tt", CultureInfo.InvariantCulture), + DateTime.UtcNow.ToString("dd-MMM-yyyy h:mm tt", CultureInfo.InvariantCulture)); + + attendance.AppendFormat("" + + "Pramod Mahajan" + + "Driveer" + + "{0}" + + "{1}" + + "This is Test" + + "", + DateTime.UtcNow.ToString("dd-MMM-yyyy h:mm tt", CultureInfo.InvariantCulture), + DateTime.UtcNow.ToString("dd-MMM-yyyy h:mm tt", CultureInfo.InvariantCulture)); + + var date = DateTime.UtcNow.Date.ToString("dd-MMM-yyyy", CultureInfo.InvariantCulture); + var prams = new + { + date = date, + project_name = "MarcoAIoT", + timestamp = DateTime.UtcNow, + todays_attendances = 1, + total_Employees = 26, + todays_planned = 1230, + todays_completed = 1200, + regularization_pernding = 3, + checkout_pending = 25, + total_planned = 1000000, + total_completed = 24003, + project_status = 70.44, + todays_assigned = 2, + report_pending = 10, + team_on_site = team, + performed_task = task, + performed_attendance = attendance + }; + + var sendSmtpEmail = new SendSmtpEmail + { + Sender = sender, + To = recipient, + TemplateId = 1, // Your Brevo template ID here + Params = prams, + Headers = new Dictionary + { + { "X-Mailin-custom", "custom_header_1:custom_value_1" } + } + //Subject = "Hello from Brevo this is test", + //HtmlContent = "

This is a test email

Sent via .NET controller

" + }; + + try + { + var result = apiInstance.SendTransacEmail(sendSmtpEmail); + var client = new HttpClient(); + client.DefaultRequestHeaders.Add("api-key", apiKey); + var messageId = result.MessageId; + + var response = await client.GetAsync($"https://api.brevo.com/v3/smtp/emails/{messageId}"); + Console.WriteLine(response); + + if (response.IsSuccessStatusCode) + { + var content = await response.Content.ReadAsStringAsync(); + Console.WriteLine(content); // This includes status info + } + return Ok(Marco.Pms.Model.Utilities.ApiResponse.SuccessResponse(result.MessageId, "Email sent successfully!", 200)); + } + catch (Exception ex) + { + return StatusCode(500, Marco.Pms.Model.Utilities.ApiResponse.ErrorResponse(ex.Message, ex.StackTrace, 500)); + } + } + } } \ No newline at end of file diff --git a/Marco.Pms.Services/Marco.Pms.Services.csproj b/Marco.Pms.Services/Marco.Pms.Services.csproj index 5b30ba4..da538c2 100644 --- a/Marco.Pms.Services/Marco.Pms.Services.csproj +++ b/Marco.Pms.Services/Marco.Pms.Services.csproj @@ -13,6 +13,7 @@ + diff --git a/Marco.Pms.Services/Service/EmailSender.cs b/Marco.Pms.Services/Service/EmailSender.cs index 4d66a4f..f0393dc 100644 --- a/Marco.Pms.Services/Service/EmailSender.cs +++ b/Marco.Pms.Services/Service/EmailSender.cs @@ -1,10 +1,13 @@ -using System.Globalization; -using System.Text; +using brevo_csharp.Api; +using brevo_csharp.Model; using MailKit.Net.Smtp; using Marco.Pms.Model.Utilities; using Marco.Pms.Model.ViewModels.Report; using Microsoft.Extensions.Options; using MimeKit; +using System.Globalization; +using System.Text; +using Task = System.Threading.Tasks.Task; namespace MarcoBMS.Services.Service @@ -186,7 +189,7 @@ namespace MarcoBMS.Services.Service subject = CheckSubject(subject); await SendEmailAsync(toEmails, subject, emailBody); } - public async Task SendEmailAsync(List toEmails, string subject, string body) + public async Task SendEmailOldAsync(List toEmails, string subject, string body) { var email = new MimeMessage(); email.From.Add(new MailboxAddress(_smtpSettings.SenderName, _smtpSettings.SenderEmail)); @@ -205,6 +208,42 @@ namespace MarcoBMS.Services.Service await smtp.SendAsync(email); await smtp.DisconnectAsync(true); } + public async Task SendEmailAsync(List toEmails, string subject, string body) + { + var apiKey = _smtpSettings.ApiKey; + // Configure API key authorization + var config = new brevo_csharp.Client.Configuration(); + config.ApiKey.Add("api-key", apiKey); + var apiInstance = new TransactionalEmailsApi(config); + + var recipient = toEmails.Select(e => new SendSmtpEmailTo(e)).ToList(); + var sender = new SendSmtpEmailSender + { + Name = _smtpSettings.SenderName, + Email = _smtpSettings.SenderEmail + }; + var sendSmtpEmail = new SendSmtpEmail + { + Sender = sender, + To = recipient, + Subject = subject, + HtmlContent = body + }; + + var result = apiInstance.SendTransacEmail(sendSmtpEmail); + var client = new HttpClient(); + client.DefaultRequestHeaders.Add("api-key", apiKey); + var messageId = result.MessageId; + + var response = await client.GetAsync($"https://api.brevo.com/v3/smtp/emails/{messageId}"); + Console.WriteLine(response); + + if (response.IsSuccessStatusCode) + { + var content = await response.Content.ReadAsStringAsync(); + Console.WriteLine(content); // This includes status info + } + } private string CheckSubject(string subject) { diff --git a/Marco.Pms.Services/appsettings.Development.json b/Marco.Pms.Services/appsettings.Development.json index e7fdcee..2bf572f 100644 --- a/Marco.Pms.Services/appsettings.Development.json +++ b/Marco.Pms.Services/appsettings.Development.json @@ -12,6 +12,7 @@ "DefaultConnectionString": "Server=147.93.98.152;User ID=devuser;Password=AppUser@123$;Database=MarcoBMS1" }, "SmtpSettings": { + "ApiKey": "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", "SmtpServer": "smtp.gmail.com", "Port": 587, "SenderName": "MarcoAIOT",