اتصال به ایمیل‌سرور در برنامه‌های NET.


پروژه و کدهای مورد استفاده در ویدیوی فوق در اینجا قابل مشاهده و دسترسی هستند.

برای استفاده از سرویس ایمیل در برنامه‌های NET. کافیست تا طبق مستندات SMTP، یک دسترسی SMTP و طبق مستندات افزودن نشانی، یک نشانی برای ایمیل‌سرور خود، ایجاد کنید. در نهایت نیز، بایستی اطلاعات مربوط به ایمیل‌سرور خود را به متغیرهای محیطی برنامه خود، اضافه کنید؛ به عنوان مثال:
کپی
MAIL_HOST=smtp.c1.liara.email
MAIL_PORT=465
MAIL_USER=hopeful_zhukovsky_9daqpv
MAIL_PASSWORD=fbef30d7-f852-428e-9573-bc73381c7d4d
MAIL_FROM_ADDRESS=info@example.com

مقدار فیلد MAIL_FROM_ADDRESS باید یکی از نشانی‌های اضافه شده در سرویس ایمیل باشد.

در ادامه، بایستی با اجرای دستور زیر، ماژول موردنیاز ارسال ایمیل را در پروژه خود، دانلود و نصب کنید:
کپی
dotnet add package MailKit
در نهایت می‌توانید در پروژه‌ی خود مانند مثال زیر عمل کرده و با استفاده از دسترسی SMTP سرویس ایمیل لیارا، اقدام به ارسال ایمیل‌های تراکنشی کنید:
کپی
using MailKit.Net.Smtp;
using MimeKit;

var builder = WebApplication.CreateBuilder(args);

// Load environment variables
var smtpHost = Environment.GetEnvironmentVariable("MAIL_HOST") ?? "smtp.c1.liara.email";
var smtpPort = int.Parse(Environment.GetEnvironmentVariable("MAIL_PORT") ?? "465");
var smtpUser = Environment.GetEnvironmentVariable("MAIL_USER") ?? "";
var smtpPassword = Environment.GetEnvironmentVariable("MAIL_PASSWORD") ?? "";
var mailFromAddress = Environment.GetEnvironmentVariable("MAIL_FROM_ADDRESS") ?? "";

var app = builder.Build();

app.MapGet("/", async context =>
{
    var recipientEmail = "recipient@example.com"; // Replace with recipient email

    // Create the email
    var email = new MimeMessage();
    email.From.Add(MailboxAddress.Parse(mailFromAddress));
    email.To.Add(MailboxAddress.Parse(recipientEmail));
    email.Subject = "Test Email";
    email.Body = new TextPart("plain")
    {
        Text = "This is a test email sent using explicit TLS without STARTTLS."
    };

    // Add custom header
    email.Headers.Add("x-liara-tag", "test-tag");

    try
    {
        // Send the email
        using var client = new SmtpClient();
        await client.ConnectAsync(smtpHost, smtpPort, MailKit.Security.SecureSocketOptions.SslOnConnect);
        await client.AuthenticateAsync(smtpUser, smtpPassword);
        await client.SendAsync(email);
        await client.DisconnectAsync(true);

        // Respond to the client
        await context.Response.WriteAsync("Email sent successfully with custom header!");
    }
    catch (Exception ex)
    {
        // Handle errors and respond to the client
        await context.Response.WriteAsync($"Failed to send email: {ex.Message}");
    }
});

app.Run();
برای استفاده از ایمیل‌سرور در کنترلر، می‌توانید مشابه قطعه کد زیر، عمل کنید:
کپی
using MailKit.Net.Smtp;
using MimeKit;
using Microsoft.AspNetCore.Mvc;

namespace EmailSenderApp.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class EmailController : ControllerBase
    {
        // Load environment variables (or use default values)
        private readonly string smtpHost = Environment.GetEnvironmentVariable("MAIL_HOST") ?? "smtp.c1.liara.email";
        private readonly int smtpPort = int.Parse(Environment.GetEnvironmentVariable("MAIL_PORT") ?? "465");
        private readonly string smtpUser = Environment.GetEnvironmentVariable("MAIL_USER") ?? "";
        private readonly string smtpPassword = Environment.GetEnvironmentVariable("MAIL_PASSWORD") ?? "";
        private readonly string mailFromAddress = Environment.GetEnvironmentVariable("MAIL_FROM_ADDRESS") ?? "";

        [HttpGet("send-test-email")]
        public async Task<IActionResult> SendTestEmail()
        {
            var recipientEmail = "recipient@example.com"; // Replace with recipient email

            // Create the email
            var email = new MimeMessage();
            email.From.Add(MailboxAddress.Parse(mailFromAddress));
            email.To.Add(MailboxAddress.Parse(recipientEmail));
            email.Subject = "Test Email";
            email.Body = new TextPart("plain")
            {
                Text = "This is a test email sent using explicit TLS without STARTTLS."
            };

            // Add custom header
            email.Headers.Add("x-liara-tag", "test-tag");

            try
            {
                // Send the email
                using var client = new SmtpClient();
                await client.ConnectAsync(smtpHost, smtpPort, MailKit.Security.SecureSocketOptions.SslOnConnect);
                await client.AuthenticateAsync(smtpUser, smtpPassword);
                await client.SendAsync(email);
                await client.DisconnectAsync(true);

                // Return success response
                return Ok("Email sent successfully with custom header!");
            }
            catch (Exception ex)
            {
                // Handle errors and return error response
                return StatusCode(500, $"Failed to send email: {ex.Message}");
            }
        }
    }
}