Adding the code to send email using brevo

This commit is contained in:
ashutosh.nehete 2025-09-08 14:26:27 +05:30
parent 0ef9f0e62d
commit 413c804a87
5 changed files with 200 additions and 3 deletions

View File

@ -3,6 +3,7 @@
public class SmtpSettings public class SmtpSettings
{ {
public string? SmtpServer { get; set; } public string? SmtpServer { get; set; }
public string? ApiKey { get; set; }
public int Port { get; set; } public int Port { get; set; }
public string? SenderName { get; set; } public string? SenderName { get; set; }
public string? SenderEmail { get; set; } public string? SenderEmail { get; set; }

View File

@ -1,5 +1,10 @@
using brevo_csharp.Api;
using brevo_csharp.Model;
using Marco.Pms.Services.Service; using Marco.Pms.Services.Service;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System.Globalization;
using System.Text;
namespace MarcoBMS.Services.Controllers namespace MarcoBMS.Services.Controllers
{ {
@ -49,5 +54,155 @@ namespace MarcoBMS.Services.Controllers
//} //}
[HttpPost("send")]
public async Task<IActionResult> 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<SendSmtpEmailTo>
{
new SendSmtpEmailTo("ashutosh.nehete@marcoaiot.com")
};
var sender = new SendSmtpEmailSender
{
Name = "Kartik Sharma",
Email = "kartik.sharma@marcoaiot.com"
};
var team = new StringBuilder();
team.Append("<tr style=\"vertical-align:middle\">");
team.AppendFormat(
"<td class=\"team\" style=\"text-align:center\">" +
"<div style=\"border: 1px solid #d5d5d5; border-radius: 10px; margin: 10px; padding: 10px;\">" +
"<div style=\"font-size: 15px; color: #525b75\">Admin</div>" +
"<div style=\"font-size: 20px; color: #003cc7; margin: 20px !important; font-weight: bold;\">1</div>" +
"</div></td>");
team.AppendFormat(
"<td class=\"team\" style=\"text-align:center\">" +
"<div style=\"border: 1px solid #d5d5d5; border-radius: 10px; margin: 10px; padding: 10px;\">" +
"<div style=\"font-size: 15px; color: #525b75\">Helper</div>" +
"<div style=\"font-size: 20px; color: #003cc7; margin: 20px !important; font-weight: bold;\">5</div>" +
"</div></td>");
team.AppendFormat(
"<td class=\"team\" style=\"text-align:center\">" +
"<div style=\"border: 1px solid #d5d5d5; border-radius: 10px; margin: 10px; padding: 10px;\">" +
"<div style=\"font-size: 15px; color: #525b75\">Welder</div>" +
"<div style=\"font-size: 20px; color: #003cc7; margin: 20px !important; font-weight: bold;\">8</div>" +
"</div></td>");
team.Append("</tr>");
var task = new StringBuilder();
task.AppendFormat("<tr>" +
"<td style=\"text-align:left;\"><span style=\"padding-left: 10px;\">Activity</span><br />" +
"<span style=\"color: gray; font-size: small; padding-left: 10px;\">Building > Floor > WorkArea > WorkItem</span></td>" +
"<td style=\"text-align:center\">30 / 16</td>" +
"<td style=\"text-align:center\">14</td>" +
"<td style=\"text-align:center\">{0}</td>" +
"<td style=\"padding-left: 10px; text-align: left;\">", DateTime.UtcNow.ToString("dd-MMM-yyyy"));
task.AppendFormat("Kartik Sharma <span style=\"color: gray; font-size: small; padding-left: 10px;\">(Welder)</span><br />");
task.AppendFormat("Kartik Sharma <span style=\"color: gray; font-size: small; padding-left: 10px;\">(Helper)</span><br />");
task.AppendFormat("Pramod Mahajan <span style=\"color: gray; font-size: small; padding-left: 10px;\">(Driver)</span><br />");
task.AppendFormat("</td><td style=\"padding-left: 10px; max-width: 150px; text-align: left;\">This is the test</td></tr>");
var attendance = new StringBuilder();
attendance.AppendFormat("<tr>" +
"<td style=\"text-align:left\"><span style=\"padding-left:10px;\">Kartik Sharma</span></td>" +
"<td style=\"text-align:center\">Welder</td>" +
"<td style=\"text-align:center\">{0}</td>" +
"<td style=\"text-align:center\">{1}</td>" +
"<td style=\"padding-left:10px; max-width:150px\">This is Test</td>" +
"</tr>",
DateTime.UtcNow.ToString("dd-MMM-yyyy h:mm tt", CultureInfo.InvariantCulture),
DateTime.UtcNow.ToString("dd-MMM-yyyy h:mm tt", CultureInfo.InvariantCulture));
attendance.AppendFormat("<tr>" +
"<td style=\"text-align:left\"><span style=\"padding-left:10px;\">Kartik Sharma</span></td>" +
"<td style=\"text-align:center\">Helper</td>" +
"<td style=\"text-align:center\">{0}</td>" +
"<td style=\"text-align:center\">{1}</td>" +
"<td style=\"padding-left:10px; max-width:150px\">This is Test</td>" +
"</tr>",
DateTime.UtcNow.ToString("dd-MMM-yyyy h:mm tt", CultureInfo.InvariantCulture),
DateTime.UtcNow.ToString("dd-MMM-yyyy h:mm tt", CultureInfo.InvariantCulture));
attendance.AppendFormat("<tr>" +
"<td style=\"text-align:left\"><span style=\"padding-left:10px;\">Pramod Mahajan</span></td>" +
"<td style=\"text-align:center\">Driveer</td>" +
"<td style=\"text-align:center\">{0}</td>" +
"<td style=\"text-align:center\">{1}</td>" +
"<td style=\"padding-left:10px; max-width:150px\">This is Test</td>" +
"</tr>",
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<string, string>
{
{ "X-Mailin-custom", "custom_header_1:custom_value_1" }
}
//Subject = "Hello from Brevo this is test",
//HtmlContent = "<h1>This is a test email</h1><p>Sent via .NET controller</p>"
};
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<object>.SuccessResponse(result.MessageId, "Email sent successfully!", 200));
}
catch (Exception ex)
{
return StatusCode(500, Marco.Pms.Model.Utilities.ApiResponse<object>.ErrorResponse(ex.Message, ex.StackTrace, 500));
}
}
} }
} }

View File

@ -13,6 +13,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="AutoMapper" Version="13.0.1" /> <PackageReference Include="AutoMapper" Version="13.0.1" />
<PackageReference Include="AWSSDK.S3" Version="3.7.416.13" /> <PackageReference Include="AWSSDK.S3" Version="3.7.416.13" />
<PackageReference Include="brevo_csharp" Version="1.1.1" />
<PackageReference Include="MailKit" Version="4.9.0" /> <PackageReference Include="MailKit" Version="4.9.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.20" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.20" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.12" /> <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.12" />

View File

@ -1,10 +1,13 @@
using System.Globalization; using brevo_csharp.Api;
using System.Text; using brevo_csharp.Model;
using MailKit.Net.Smtp; using MailKit.Net.Smtp;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels.Report; using Marco.Pms.Model.ViewModels.Report;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using MimeKit; using MimeKit;
using System.Globalization;
using System.Text;
using Task = System.Threading.Tasks.Task;
namespace MarcoBMS.Services.Service namespace MarcoBMS.Services.Service
@ -186,7 +189,7 @@ namespace MarcoBMS.Services.Service
subject = CheckSubject(subject); subject = CheckSubject(subject);
await SendEmailAsync(toEmails, subject, emailBody); await SendEmailAsync(toEmails, subject, emailBody);
} }
public async Task SendEmailAsync(List<string> toEmails, string subject, string body) public async Task SendEmailOldAsync(List<string> toEmails, string subject, string body)
{ {
var email = new MimeMessage(); var email = new MimeMessage();
email.From.Add(new MailboxAddress(_smtpSettings.SenderName, _smtpSettings.SenderEmail)); email.From.Add(new MailboxAddress(_smtpSettings.SenderName, _smtpSettings.SenderEmail));
@ -205,6 +208,42 @@ namespace MarcoBMS.Services.Service
await smtp.SendAsync(email); await smtp.SendAsync(email);
await smtp.DisconnectAsync(true); await smtp.DisconnectAsync(true);
} }
public async Task SendEmailAsync(List<string> 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) private string CheckSubject(string subject)
{ {

View File

@ -12,6 +12,7 @@
"DefaultConnectionString": "Server=147.93.98.152;User ID=devuser;Password=AppUser@123$;Database=MarcoBMS1" "DefaultConnectionString": "Server=147.93.98.152;User ID=devuser;Password=AppUser@123$;Database=MarcoBMS1"
}, },
"SmtpSettings": { "SmtpSettings": {
"ApiKey": "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",
"SmtpServer": "smtp.gmail.com", "SmtpServer": "smtp.gmail.com",
"Port": 587, "Port": 587,
"SenderName": "MarcoAIOT", "SenderName": "MarcoAIOT",