ارسال ایمیل با Gmail با استفاده از MailKit در .NET Web API: راهنمای کامل

مقدمه:
ارسال ایمیل به صورت برنامه ای یک نیاز متداول برای بسیاری از برنامه های وب است. در این پست وبلاگ ، ما شما را از طریق نحوه ارسال ایمیل با استفاده از سرور SMTP Gmail در یک برنامه کاربردی API .NET Core Web استفاده خواهیم کرد پست، یک کتابخانه ایمیل مدرن و سبک برای .NET.
در پایان این راهنما ، شما می آموزید که چگونه یک API وب را تنظیم کنید ، MailKit را برای ارسال ایمیل ادغام کنید و از تنظیمات پیکربندی ذخیره شده در آن استفاده کنید appsettings.json
بشر
پیش نیازها:
قبل از شروع ، اطمینان حاصل کنید که موارد زیر را دارید:
- .NET 6 یا بالاتر نصب شده است.
- یک حساب Gmail با تأیید 2 مرحله ای فعال و رمز ورود تولید شده (از آنجا که Gmail برنامه های امنیتی کمتری را مسدود می کند).
- دانش اساسی در ایجاد پروژه های API وب در .NET.
مرحله 1: پروژه API دات نت خود را تنظیم کنید
-
Visual Studio (یا IDE مورد نظر خود را باز کنید) و ایجاد کنید پروژه جدید API وببشر
-
نصب کردن پست از طریق nuget:
dotnet add package MailKit
MailKit یک کتابخانه مشتری کاملاً برجسته است که به شما امکان می دهد با استفاده از SMTP ، POP3 و IMAP ایمیل ارسال و دریافت کنید.
مرحله 2: پیکربندی ایمیل را در آن اضافه کنید appsettings.json
در پروژه خود ، باز را باز کنید appsettings.json
پرونده را برای تنظیمات ایمیل خود اضافه کنید ، مانند این:
{
"EmailSettings": {
"Username": "your-mail@gmail.com",
"Password": "gmail-generated-app-password",
"SmtpServer": "smtp.gmail.com",
"Port": 587
}
}
- نام کاربری: آدرس ایمیل Gmail شما.
- رمز: رمز ورود در حساب Gmail خود تولید شده است. (می توانید آن را از حساب Google خود تحت امنیت> رمزهای عبور برنامه ایجاد کنید).
-
Smtpserver: سرور SMTP برای Gmail (
smtp.gmail.com
). -
بندر: درگاه SMTP Gmail ، که است
587
برای رمزگذاری TLS.
مرحله 3: سرویس ایمیل را ایجاد کنید
ما یک کلاس خدماتی به نام ایجاد خواهیم کرد EmailService
این ارسال ایمیل را انجام می دهد.
1. رابط کاربری ایجاد کنید برای سرویس:
در IRepository
پوشه (یا هر کجا که ترجیح می دهید) ، یک فایل جدید به نام ایجاد کنید IEmailService.cs
:
namespace EmailApp.IRepository
{
public interface IEmailService
{
Task<string> SendEmail(string toEmail, string subject, string body);
}
}
2. سرویس ایمیل را ایجاد کنید کلاس که پیاده سازی می کند IEmailService
رابط
در Repository
پوشه ، یک فایل جدید به نام ایجاد کنید EmailService.cs
:
using EmailApp.IRepository;
using MailKit.Net.Smtp;
using MailKit.Security;
using Microsoft.Extensions.Configuration;
using MimeKit;
namespace EmailApp.Repository
{
public class EmailService : IEmailService
{
private readonly IConfiguration _configuration;
public EmailService(IConfiguration configuration)
{
_configuration = configuration;
}
public async Task<string> SendEmail(string toEmail, string mailSubject, string mailBody)
{
try
{
var smtpServer = _configuration["EmailSettings:SmtpServer"];
var port = int.Parse(_configuration["EmailSettings:Port"]);
var fromMail = _configuration["EmailSettings:Username"];
var password = _configuration["EmailSettings:Password"];
var email = new MimeMessage();
email.From.Add(new MailboxAddress("Your Name", fromMail));
email.To.Add(new MailboxAddress("To Name", toEmail));
email.Subject = mailSubject;
email.Body = new TextPart("html") { Text = mailBody };
using var smtp = new SmtpClient();
await smtp.ConnectAsync(smtpServer, port, SecureSocketOptions.StartTls);
await smtp.AuthenticateAsync(fromMail, password);
await smtp.SendAsync(email);
await smtp.DisconnectAsync(true);
return "Email sent successfully!";
}
catch (Exception ex)
{
// Log the exception (not done here for simplicity)
return $"Email sending failed. Error: {ex.Message}";
}
}
}
}
توضیح مختصر در مورد کد:
1. مقادیر پیکربندی واکشی
var smtpServer = _configuration["EmailSettings:SmtpServer"];
var port = int.Parse(_configuration["EmailSettings:Port"]);
var fromMail = _configuration["EmailSettings:Username"];
var password = _configuration["EmailSettings:Password"];
- بازیابی جزئیات سرور SMTP (آدرس سرور ، پورت ، نام کاربری و رمز عبور) از
appsettings.json
بشر
2 ایجاد پیام ایمیل
var email = new MimeMessage();
email.From.Add(new MailboxAddress("Your Name", fromMail));
email.To.Add(new MailboxAddress("To Name", toEmail));
email.Subject = mailSubject;
email.Body = new TextPart("html") { Text = mailBody };
- تقلید برای ایجاد ایمیل استفاده می شود.
-
از و به آدرس ها: فرستنده را تنظیم می کند (
fromMail
) و گیرنده (toEmail
). - موضوع و بدن: موضوع و بدن را با فرمت HTML تنظیم می کند.
3 ارسال ایمیل
using var smtp = new SmtpClient();
await smtp.ConnectAsync(smtpServer, port, SecureSocketOptions.StartTls);
await smtp.AuthenticateAsync(fromMail, password);
await smtp.SendAsync(email);
await smtp.DisconnectAsync(true);
-
مشتری SMTP ایجاد می کند (
SmtpClient
). - به سرور SMTP متصل می شود با استفاده از آدرس سرور و درگاه داده شده.
- احراز هویت را فعال می کند با اعتبار Gmail.
- ایمیل را ارسال می کندبشر
- پاکسازی را قطع می کند بعد از ارسال
مرحله 4: سرویس را ثبت کنید Program.cs
اکنون ، ثبت نام کنید EmailService
در Program.cs
به گونه ای که می توان آن را به کنترلر تزریق کرد.
در شما Program.cs
(یا Startup.cs
برای نسخه های قدیمی تر) موارد زیر را اضافه کنید:
builder.Services.AddScoped<IEmailService, EmailService>();
این ثبت می کند EmailService
برای تزریق وابستگی در کنترل کننده های خود در دسترس باشید.
مرحله 5: کنترلر ایمیل را ایجاد کنید
در مرحله بعد ، بیایید یک کنترلر API ایجاد کنیم که درخواست های HTTP برای ارسال ایمیل را کنترل کند.
در Controllers
پوشه ، یک فایل جدید به نام ایجاد کنید EmailController.cs
:
using EmailApp.IRepository;
using Microsoft.AspNetCore.Mvc;
namespace EmailApp.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class EmailController : ControllerBase
{
private readonly IEmailService _emailService;
public EmailController(IEmailService emailService)
{
_emailService = emailService;
}
[HttpPost]
[Route("SendEmail")]
public async Task<IActionResult> SendEmail(string toEmail, string mailSubject, string mailBody)
{
var result = await _emailService.SendEmail(toEmail, mailSubject, mailBody);
return Ok(new { message = result });
}
}
}
این کنترلر یک نقطه پایانی پست را در معرض نمایش قرار می دهد api/Email/SendEmail
که پارامترهایی مانند آن را می پذیرد toEmail
با mailSubject
وت mailBody
، و با استفاده از ایمیل ، ایمیل را ارسال کنید EmailService
بشر
مرحله ششم: API را آزمایش کنید
اکنون می توانید API را با ارسال درخواست پست با استفاده از Postman یا Swagger (در صورت پیکربندی) آزمایش کنید.
درخواست مثال:
-
نقطه پایانی:
POST api/Email/SendEmail
- بدنه (JSON):
{
"toEmail": "recipient-email@gmail.com",
"mailSubject": "Test Email",
"mailBody": "This is a test email sent from the .NET Web API using MailKit."
}
اگر همه چیز به درستی تنظیم شده است ، باید پاسخی مانند:
{
"message": "Email sent successfully!"
}
نتیجه گیری:
در این وبلاگ ، شما یاد گرفتید که چگونه ایمیل را با استفاده از سرور SMTP Gmail در یک برنامه API .NET WEB با برنامه ارسال کنید پست کتابخانه شما همچنین دیدید که چگونه راه حل را با الگوی مخزن، و نحوه مدیریت تنظیمات پیکربندی ایمیل به طور ایمن در appsettings.json
بشر
با دنبال کردن این مراحل ، می توانید به راحتی عملکرد ایمیل را در برنامه های کاربردی .NET Core خود ادغام کرده و ایمیل را از طریق Gmail (یا هر سرویس SMTP دیگر) به صورت برنامه ای ارسال کنید.
مراحل بعدی:
- سرویس ایمیل را با قابلیت های اضافی مانند پیوست ها یا قالب بندی محتوای HTML تقویت کنید.
- ساخت رابط برای ایجاد ایمیل از یک برنامه جلوی.
برنامه نویسی مبارک!
مرا در LinkedIn پیدا کنید