Adding the code to send email using brevo
This commit is contained in:
parent
0ef9f0e62d
commit
413c804a87
@ -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; }
|
||||||
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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" />
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user