69 lines
2.2 KiB
C#
69 lines
2.2 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using MimeKit;
|
|
using Scalar.AspNetCore;
|
|
using SmtpClient = MailKit.Net.Smtp.SmtpClient;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
var allowedOrigins = builder.Configuration.GetSection("CorsSettings:AllowedOrigins").Get<string[]>() ?? Array.Empty<string>();
|
|
|
|
builder.Services.AddOpenApi();
|
|
builder.Services.AddCors(options =>
|
|
{
|
|
options.AddPolicy("AllowStrictOrigins", policy =>
|
|
{
|
|
policy.WithOrigins(allowedOrigins)
|
|
.AllowAnyHeader()
|
|
.AllowAnyMethod();
|
|
});
|
|
});
|
|
|
|
var app = builder.Build();
|
|
|
|
app.UseCors("AllowStrictOrigins");
|
|
|
|
app.MapPost("/api/send-email", async ([FromBody] EmailRequest request, IConfiguration config) =>
|
|
{
|
|
try
|
|
{
|
|
var message = new MimeMessage();
|
|
|
|
var defaultFrom = config["SmtpSettings:DefaultFrom"];
|
|
var defaultTo = config["SmtpSettings:DefaultTo"];
|
|
|
|
var fromAddress = string.IsNullOrWhiteSpace(request.From) ? defaultFrom : request.From;
|
|
var toAddress = string.IsNullOrWhiteSpace(request.To) ? defaultTo : request.To;
|
|
|
|
message.From.Add(MailboxAddress.Parse(fromAddress!));
|
|
message.To.Add(MailboxAddress.Parse(toAddress!));
|
|
message.Subject = string.IsNullOrWhiteSpace(request.Subject) ? "New message from LiteCharms" : request.Subject;
|
|
|
|
var bodyBuilder = new BodyBuilder { HtmlBody = request.HtmlBody };
|
|
message.Body = bodyBuilder.ToMessageBody();
|
|
|
|
using var client = new SmtpClient();
|
|
|
|
var host = config["SmtpSettings:Host"];
|
|
var port = config.GetValue<int>("SmtpSettings:Port");
|
|
var useSsl = config.GetValue<bool>("SmtpSettings:UseSsl");
|
|
var username = config["SmtpSettings:Username"];
|
|
var password = config["SmtpSettings:Password"];
|
|
|
|
await client.ConnectAsync(host!, port, useSsl);
|
|
await client.AuthenticateAsync(username!, password!);
|
|
await client.SendAsync(message);
|
|
await client.DisconnectAsync(true);
|
|
|
|
return Results.Ok(new { success = true, message = "Email dispatched successfully." });
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Results.Problem(detail: ex.Message, statusCode: 500);
|
|
}
|
|
});
|
|
|
|
app.MapOpenApi();
|
|
app.MapScalarApiReference();
|
|
|
|
app.Run();
|