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


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

برای استفاده از سرویس ایمیل در برنامه‌های NET. کافیست تا طبق مستندات SMTP، یک دسترسی SMTP و طبق مستندات افزودن نشانی، یک نشانی برای ایمیل‌سرور خود، ایجاد کنید. در نهایت نیز، بایستی اطلاعات مربوط به ایمیل‌سرور خود را به متغیرهای محیطی برنامه خود، اضافه کنید؛ به عنوان مثال:

کپی
MAIL_HOST=smtp.c1.liara.email
MAIL_PORT=587
MAIL_USER=hopeful_zhukovsky_9daqpv
MAIL_PASSWORD=fbef30d7-f852-428e-9573-bc73381c7d4d
MAIL_FROM_ADDRESS=info@example.com

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

در نهایت می‌توانید در پروژه‌ی خود مانند مثال زیر عمل کرده و با استفاده از دسترسی SMTP سرویس ایمیل لیارا، اقدام به ارسال ایمیل‌های تراکنشی کنید:

کپی
using System.Net;
using System.Net.Mail;
using dotenv.net;

DotEnv.Load(); // Load the environment variables from .env file

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/send-test-email", async context =>
{
    // Read SMTP settings from environment variables
    var smtpHost = Environment.GetEnvironmentVariable("MAIL_HOST");
    int smtpPort = int.Parse(Environment.GetEnvironmentVariable("MAIL_PORT") ?? "587");
    var smtpUser = Environment.GetEnvironmentVariable("MAIL_USER");
    var smtpPassword = Environment.GetEnvironmentVariable("MAIL_PASSWORD");
    var fromAddress = Environment.GetEnvironmentVariable("MAIL_FROM_ADDRESS") ?? "info@example.com";
    var toAddress = "recipient@example.com"; // Replace with recipient's email address

    // Create a new SmtpClient
    using (var smtpClient = new SmtpClient(smtpHost, smtpPort))
    {
        smtpClient.EnableSsl = true; // Use TLS encryption
        smtpClient.Credentials = new NetworkCredential(smtpUser, smtpPassword);

        // Create the email message
        var mailMessage = new MailMessage(fromAddress, toAddress)
        {
            Subject = "Test Email",
            Body = "<h2>This is a test email sent from a .NET Core application using SMTP<h2>",
            IsBodyHtml = true
        };

        // Add custom headers
        mailMessage.Headers.Add("x-liara-tag", "test-tag");

        // Send the email
        try
        {
            await smtpClient.SendMailAsync(mailMessage);
            await context.Response.WriteAsync("Test email sent successfully!");
        }
        catch (Exception ex)
        {
            await context.Response.WriteAsync($"Failed to send email: {ex.Message}");
        }
    }
});

app.Run();

با تنظیم EnableSsl = true، می‌توانید به‌صورت امن اقدام به ارسال ایمیل‌های تراکنشی کنید.

برای ارسال امن‌تر ایمیل‌ها، می‌توانید مقدار Port را بر روی 465 قرار دهید تا به جای STARTTLS، از TLS استفاده شود.

برای استفاده از ایمیل‌سرور در کنترلر، می‌توانید مشابه قطعه کد زیر، عمل کنید:

کپی
using MimeKit;
using MailKit.Net.Smtp;
using DotNetEnv; // for install this, run: dotnet install add package DotNetEnv

namespace your_project_name.Controllers; 

public class TestController : Controller
{
    [HttpPost]
    public IActionResult SendEmail(string email)
    {   
        // Email Information  
        Env.Load();
        string senderName  = Env.GetString("SENDER_NAME");
        string senderEmail = Env.GetString("SENDER_ADDRESS");
        string subject     = Env.GetString("EMAIL_SUBJECT");
        string body        = Env.GetString("EMAIL_BODY");

        // Email Instance
        var message = new MimeMessage();
        message.From.Add(new MailboxAddress(senderName, senderEmail));
        message.To.Add(new MailboxAddress("Recipient", email));
        message.Subject = subject;

        // Creating The Body 
        message.Body = new TextPart("plain")
        {
            Text = body
        };

        try
        {
            // Sending Email 
            using (var client = new SmtpClient())
            {
                client.Connect(Env.GetString("MAIL_HOST"), Env.GetInt("MAIL_PORT"), false);
                client.Authenticate(Env.GetString("MAIL_USERNAME"), Env.GetString("MAIL_PASSWORD"));
                client.Send(message);
                client.Disconnect(true);
            }

            ViewBag.Message = "Email Sent Successfully.";
        }
        catch (Exception ex)
        {
            ViewBag.Message = $"Error In Sending Email: {ex.Message}";
        }


        return RedirectToAction("Index");
    }

}