Files
litecharmsmessaging/LiteCharmsMessaging/Program.cs
T
hermes 25f848292f Added scalar api reference
Successful local run
2026-07-14 10:27:30 +02:00

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();