Chuyển đến nội dung chính

Sử dụng MailGun để gửi email miễn phí

Trong bài viết này, mình sẽ hướng dẫn các bạn sử dụng MailGun để gửi email bằng cả 2 cách: SMTP và API

MailGun là gì?

Mailgun Technologies, Inc. là một dịch vụ gửi email để gửi, nhận và theo dõi email.

 

Các dịch vụ tương tự khác: SendGrid, Sendinblue, MailerSend, ...

MailGun hỗ trợ 2 hình thức gởi email: smtp và Mail API

SMTP

SMTP (Simple Mail Transfer Protocol) là giao thức chuẩn TCP/IP được dùng để truyền tải thư điện tử (e-mail) trên mạng internet.
SMTP là giao thức tiêu chuẩn để gửi email. Nó thiết lập kênh kết nối giữa mail client và mail server, và thiết lập kênh liên lạc giữa mail server gửi và mail server nhận. Email sẽ được đẩy từ mail client lên mail server và từ mail server nó sẽ được server này gửi đi đến mail server nhận.

Các cổng kết nối:

  • 25: Port 25 được dùng từ năm 1982, đây là port lâu đời nhất và thường bị chặn vì lý do spam email
  • 587: cổng mặc định để gửi SMTP trên web hiện nay
  • 465: cổng 465 hiện là cổng được khuyến nghị để gửi qua TLS.
  • 2525: Cổng 2525 không phải là cổng SMTP chính thức (được IETF hoặc IANA công nhận). Tuy nhiên, nó vẫn được sử dụng phổ biến như một sự thay thế cho cổng 587 để gửi SMTP và hầu hết các ISP và nhà cung cấp dịch vụ lưu trữ đám mây đều hỗ trợ cổng 2525 cho SMTP.
    Nếu cổng 587 bị chặn, cổng 2525 là một giải pháp thay thế khác.

Để gửi email bằng SMTP, bạn có thể sử dụng 1 email provider như Gmail, Yahoo, Outlook hoặc 1 email service. Hiện tại mình thấy chỉ có Outlook cho phép kết nối từ WebServer và cho phép gởi SMTP. Các provider khác cần yêu cầu xác thực 2 bước. Mình sử dụng MailGun để demo.

Đầu tiên, bạn cần đăng nhập vào MailGun, nhấp vào Sending -> Overview

Sau đó bạn chọn SMTP. Bên dưới là thông tin SMTP, bao gồm: hostname, port, username, password. Bạn sẽ sử dụng các thông tin này để đăng nhập và gởi email.

Xác thực SMTP

Xác thực SMTP (SMTP Authentication hoặc SMTP AUTH), là một phần mở rộng của SMTP. Theo đó, các client (có thể hiểu là những phần mềm sử dụng email hoặc là chương trình mà bạn tự viết) có thể đăng nhập bằng cơ chế xác thực được SMTP server hỗ trợ

SmtpClient SmtpServer = new SmtpClient("<SMTP hostname>");//smtp.mailgun.org, smtp.gmail.com, smtp-mail.outlook.com
SmtpServer.Port = 587;//465,25
SmtpServer.Credentials = new System.Net.NetworkCredential("<your-email>", "<your-password>");
Dưới đây là đoạn code sử dụng thư viện System.Net.Mail
public class MailGunSmtp
{
	private static readonly string _from = "<your-email";
	private static readonly string _pass = "<your-password>";

	public static string Send(string sendto, string subject, string content)
	{
		try
		{
			var mail = new MailMessage();
			var SmtpServer = new SmtpClient("<SMTP hostname>");

			mail.From = new MailAddress(_from);
			mail.To.Add(sendto);
			mail.Subject = subject;
			mail.IsBodyHtml = true;
			mail.Body = content;

			mail.Priority = MailPriority.High;

			SmtpServer.Port = 587;
			SmtpServer.Credentials = new System.Net.NetworkCredential(_from, _pass);
			SmtpServer.EnableSsl = true;

			SmtpServer.Send(mail);
			return "OK";
		}
		catch (Exception ex)
		{
			return ex.ToString();
		}

	}
}

MailKit

Để project có thể chạy được trên môi trường .NET (hỗ trợ Windows, Linux, Mac), bạn nên sử dụng thư viện khác. Trong trường hợp này, mình sử dụng thư viện MailKit

Github: https://github.com/jstedfast/MailKit

Install nuget package:

Install-Package MailKit
Khai báo static class để lưu giữ thông tin đăng nhập server
/// Using a static class to store sensitive credentials
/// for simplicity. Ideally these should be stored in
/// configuration files
public static class Constants
{
	public static string SenderName => "Nhatkyhoctap";
	public static string SenderEmail => "<your-email";
	public static string EmailPassword => "<your-password>";
	public static string SmtpHost => "smtp.mailgun.org";
	public static int SmtpPort => 587;
}
Setup IEmailSender
public interface IEmailSender
{
	Task SendEmailAsync(string recipientEmail, string subject, string message)
}
Implement interface IMailService
public class MailKitService : IEmailSender
{
	public Task SendEmailAsync(string recipientEmail, string subject, string message)
	{
		var mimeMessage = new MimeMessage();
		mimeMessage.From.Add(new MailboxAddress(Constants.SenderName, Constants.SenderEmail));
		mimeMessage.To.Add(new MailboxAddress("", recipientEmail));
		mimeMessage.Subject = subject;

		mimeMessage.Body = new TextPart(TextFormat.Html)
		{
			Text = message,
		};

		using (var client = new SmtpClient())
		{

			client.ServerCertificateValidationCallback = (s, c, h, e) => true;

			client.Connect(Constants.SmtpHost, Constants.SmtpPort, false);

			client.AuthenticationMechanisms.Remove("XOAUTH2");

			// Note: only needed if the SMTP server requires authentication
			client.Authenticate(Constants.SenderEmail, Constants.EmailPassword);

			client.Send(mimeMessage);

			client.Disconnect(true);
			return Task.FromResult(0);
		}
	}
}

Mail API

 Gửi email bằng C # qua API Mailgun nhanh hơn khoảng 3 lần so với thông qua SMTP.

Cài đặt nuget package:

RestSharp.Authenticators 

Trên trang web Overview của MailGun, chọn API mà bạn cần phải thêm email vào list để đảm bảo email sẽ được gửi đi.

Copy code C#. Lần lượt thay thế thông tin tương ứng từ (3) sang (4)

static IRestResponse SendSimpleMessage()
{
	RestClient client = new RestClient();
	client.BaseUrl = new Uri("https://api.mailgun.net/v3");
	client.Authenticator = new HttpBasicAuthenticator("api","https://api.mailgun.net/v3",
			"<API Key>");
	RestRequest request = new RestRequest();
	request.AddParameter("domain", "<Domain name>", ParameterType.UrlSegment);
	request.Resource = "{domain}/messages";
	request.AddParameter("from", "<your-email-from");
	request.AddParameter("to", "<your-email-to");
	request.AddParameter("subject", "MailGun test api");
	request.AddParameter("text", "Testing some Mailgun awesomness!");
	request.Method = Method.POST;
	return client.Execute(request);
}
Hi vọng với bài viết nhỏ này, các bạn sẽ có thể gửi được email dễ dàng

Nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.