🔥Được vừa ra mắt khóa học Node.js Super đấy, xem thử đi nào

Hướng dẫn gửi Email với Amazon SES và Node.js

🎉 Nếu anh em thấy Front-End cạnh tranh quá thì chúng ta học thêm Back-End thôi.

Mình đang có khóa học🏆 Node.js Super, với các kiến thức như: Express.js, TypeScript, MongoDB, Socket.io, Docker, AWS, Swagger, ...

Vậy nên anh em có thể mua ngay từ bây giờ để tăng khả năng pass phỏng vấn nhé 😉

Amazon SES là gì? Cách đăng ký và sử dụng như thế nào?

Trong bài viết này mình sẽ hướng dẫn các bạn từ A-Z về Amazon SES và cách gửi email bằng Node.js + Amazon SES.

Công dụng của email thì không phải nói rồi nhỉ?

Nó là một phần không thể thiếu trong cuộc sống của chúng ta. Ví dụ như khi chúng ta đăng ký tài khoản, quên mật khẩu, xác nhận tài khoản, thông báo, ... thì đều cần đến email.

Muốn gửi email thì phải có một SMTP server. Việc tự tạo một SMTP server để gửi email rất là khó khăn và đòi hỏi nhiều kinh nghiệm kỹ thuật về quản lý máy chủ, bảo mật và phát triển phần mềm. Chưa kể tạo xong thì còn phải lo lắng về việc IP của mình có bị đưa vào blacklist hay không, email có bị gửi vào spam hay không, vô vàn lý do ...

Đó là lý do tại sao nhiều người sử dụng các dịch vụ như Amazon SES để gửi email thay vì tự tạo một SMTP server. Nó giúp tiết kiệm chi phí, thời gian và công sức hơn nhiều.

Cho bạn nào chưa biết thì SMTP (Simple Mail Transfer Protocol) là giao thức được sử dụng để truyền tải email giữa các máy chủ email

Vậy Amazon SES là gì? Cách đăng ký như thế nào?


🥇Amazon SES là gì?

Amazon SES (Amazon Simple Email Service) là một dịch vụ gửi email được cung cấp bởi Amazon. Nó cho phép bạn gửi email một cách đáng tin cậy và giảm thiểu chi phí.

Amazon này là cái sàn thương mại điện tử đúng không nhỉ 😂?

À cũng đúng nhưng chưa đủ, SES thuộc Amazon Web Services (AWS) - một nhánh của cty Amazon cung cấp các dịch vụ điện toán đám mây 😂.

Alibaba của Trung Quốc cũng có một nhánh tương tự như vậy là Alibaba Cloud.


🥇Amazon SES khác gì với Gmail ?

Amazon SES (Simple Email Service) được thiết kế cho máy chủ dùng để gửi email đại trà số lượng lớn.

Trong khi đó, Gmail là dịch vụ email miễn phí dành cho người dùng cá nhân. Nó không được thiết kế để gửi email số lượng lớn (limit 500 tin gửi và nhận trong 24h)


🥇Amazon SES khác gì với SendGrid, Mailgun, ...?

Amazon SES là một dịch vụ gửi email của Amazon, muốn dùng thì phải biết về kỹ thuật lập trình các kiểu, rồi tự tạo server để gửi email với Amazon SES.

Trong khi đó, SendGrid, Mailgun, ... là các công ty khác cung cấp dịch vụ gửi email. Bạn chỉ cần đăng ký tài khoản, cấu hình và sử dụng thôi.

Mình sẽ nêu ra một số sự khác biệt giữa chúng như sau:

  1. Độ dễ dùng: SendGrid, Mailgun đơn giản hơn nhiều lần khi so với AWS SES
  2. Chức năng: SendGrid, Mailgun cung cấp nhiều chức năng có sẵn, rất dễ sử dụng và trực quan, phù hợp cho những người không biết nhiều về lập trình hoặc các bạn marketer. Trong khi đó, bên AWS SES thì bạn phải nhúng tay vào code rất nhiều mới mô phỏng được mấy chức năng của tụi kia.
  3. Giá cả: Vì thô sơ hơn, nên Amazon SES có giá rất rẻ, chỉ 0.1$/1000 email. Trong khi đó, SendGrid, Mailgun thì đắt hơn rất nhiều, khoảng 0.4$/1000 email.

Tóm lại thì Amazon SES phù hợp cho server hơn để gửi mấy email thông báo này nọ với chi phí rẻ.

Còn SendGrid, Mailgun thì phù hợp cho bạn nào hoặc công ty nào muốn ăn sẵn, đơn giản và dễ dùng thì cũng có thể tích hợp được (mặc dù giá cao hơn nhưng tiết kiệm được nhiều thời gian hơn 😂)

Vậy anh em đã hiểu về Amazon SES nó là gì rồi nhỉ? Bây giờ thì chúng ta đi đến công đoạn đăng ký và sử dụng nó nhé.


🥇Hướng dẫn đăng ký tài khoản Amazon SES

Yêu cầu trước là các bạn phải có thẻ Visa hoặc Master Card để đăng ký tài khoản AWS nhé. Ai chưa có thì ra ngân hàng làm 1 cái, nếu lười thì dùng app Cake của ngân hàng VPBank để tạo thẻ Master Card ảo cũng được.

🥈Bước 1: Đăng ký tài khoản AWS

Amazon SES là một dịch vụ của Amazon Web Services (AWS). Vậy nên trước tiên các bạn phải đăng ký tài khoản AWS trước.

Các bước đăng ký như sau:

Hướng dẫn đăng ký tài khoản Amazon Web Service
Hướng dẫn đăng ký tài khoản Amazon Web Service
  • Điền thông tin vào form đăng ký bao gồm email và tên của bạn (tên bình thường chứ không cần phải nhập username đâu)
Form đăng ký AWS
Form đăng ký AWS
  • Các bước tiếp theo làm như hướng dẫn của AWS là được nhé: xác mình email, điền thêm thông tin cá nhân, nhập thẻ tín dụng hoặc thẻ ghi nợ vào (ban đầu mình nói các bạn chuẩn bị đó),...

Sau khi trải qua tầm 5 bước của họ thì chúc mừng bạn có một tài khoản AWS để vọc vạch rồi.

🥈Bước 2: Đăng ký dùng dịch vụ Amazon SES

  • Gõ tìm kiếm từ khóa SES để tìm dịch vụ Amazon SES
Tìm kiếm dịch vụ Amazon SES
Tìm kiếm dịch vụ Amazon SES
  • Mấy dịch vụ của AWS nó đều có Region (khu vực) riêng, nên các bạn chọn khu vực mà các bạn muốn dùng nhé (khu vực khác nhau sẽ có độ trễ khác nhau). Ví dụ mình chọn khu vực Singapore, do web mình chủ yếu cho người Việt dùng, Email gửi từ máy chủ Singapore đến Việt Nam sẽ nhanh hơn các vùng khác.

  • Lưu ý là nếu các bạn config các kiểu xong rồi, giờ muốn đổi Region thì chỉ có cách làm mới lại từ đầu hoặc dùng một số thủ thuật đặc biệt để đổi (cái này mình không rõ lắm, anh em nào biết thì comment bên dưới góp ý giúp mình với nhé)

Chọn khu vực dịch vụ Amazon SES
Chọn khu vực dịch vụ Amazon SES
  • Sau khi region xong thì bạn sẽ thấy url sẽ thay đổi. Ví dụ mình chọn Singapore thì url sẽ là: https://ap-southeast-1.console.aws.amazon.com/ses/home?region=ap-southeast-1#/homepage. Để ý cái ap-southeast-1 chính là mã ký hiệu region đó

  • Tiếp theo thì chúng ta đi đến bước xác thực danh tính email. Ở màn hình trang chủ của Amazon SES, các bạn nhấn vào nút Create Identity để bắt đầu xác thực nhé

Bắt đầu xác thực danh tính email
Bắt đầu xác thực danh tính email
  • Hoặc có thể click theo đường này cũng được nha
Chọn Verified Identities trong menu
Chọn Verified Identities trong menu
Chọn Create Identity
Chọn Create Identity
  • Tiếp theo chúng ta chọn loại xác thực, có 2 loại là Email Address (xác thực một địa chỉ email) và Domain (xác thực một tên miền). Nếu các bạn có tên miền rồi và muốn gửi email có dạng no-reply@example.com thì bạn chọn Domain. Còn nếu bạn chưa có tên miền và muốn dùng địa chỉ email của gmail như duthanhduoc@gmail.com thì chọn Email Address nhé.

  • Ở đây mình chọn Email Address để test, sau này các bạn có tên miền rồi thì có thể thêm vào sau.

Chọn loại email muốn xác thực
Chọn loại email muốn xác thực
  • Các bạn cứ nhập địa chỉ email vào, riêng cái dòng Assign a default configuration set thì có thể bỏ qua, chưa cần quan tâm. Phần Tags nữa, kệ nó đi, không cần quan tâm. Sau này có thể update sau. Cuối cùng nhấn Create Identity nhé.

  • Tiếp theo thì AWS sẽ gửi một email đến địa chỉ email bạn vừa nhập, vào email đó và nhấn vào link xác thực để được verify nhé.

Sau khi verify thành công sẽ như thế này
Sau khi verify thành công sẽ như thế này

Lưu ý quan trọng: Mới tạo AWS thì chúng ta sẽ ở trong môi trường Sandbox. Môi trường này có một số hạn chế như chỉ gửi được email đến những địa chỉ email đã xác thực, giới hạn số lượng email được gửi trong ngày,...

Vì thế chúng ta cần phải bước ra khỏi Sandbox, AWS có bài viết hướng dẫn tại đây, hoặc các bạn xem hướng dẫn bên dưới của mình.

Trong lúc đợi bước ra khỏi Sandbox thì các bạn thực hiện thêm Create Identity 1 cái email nữa (là có 2 cái tổng cộng) để có mà test gửi qua gửi lại chứ 😂

🥈Bước 3: Cấu hình IAM để cấp quyền truy cập vào AWS SES

IAM là viết tắt của Identity and Access Management. Đây là một dịch vụ của AWS giúp chúng ta quản lý các tài khoản, quyền truy cập của các tài khoản đó vào các dịch vụ khác của AWS.

Để cấp quyền các bạn làm như sau:

  • Vào ô tìm kiếm của AWS gõ từ khóa IAM để tìm dịch vụ IAM
  • Chọn Access Management bên sidebar bên phải -> Users -> Add users
  • Điền tên cho user và nhấn Next để qua step 2
Điền tên cho user
Điền tên cho user
  • Chọn Attach policies directly -> tìm và chọn AmazonSESFullAccess -> nhấn Next để qua step 3
Tìm và chọn AmazonSESFullAccess
Tìm và chọn AmazonSESFullAccess
  • Review lại và nhấn Create user để tạo user

  • Tiếp tục click vào user vừa tạo, chọn tab là Security credentials, scroll xuống dưới phần Access keys, chọn Create access key để tạo access key

Chọn Security credentials
Chọn Security credentials
Click vào Create access key
Click vào Create access key
  • Ở Step 1 thì anh em chọn option là Application running outside AWS và nhấn Next
Chọn Application running outside AWS
Chọn Application running outside AWS
  • Ở Step 2 thì anh em có thể điền mô tả cho cái key này hoặc không, optional mà. Nhấn Next

  • Ở Step 3 lưu ý là anh em nên download cái file CSV chứa access key và secret key này về máy để dùng sau này nhé. Nhấn Download .csv fileDone để hoàn thành.

Download file .csv chứa 2 key về máy tính để mà dùng nhé
Download file .csv chứa 2 key về máy tính để mà dùng nhé
  • Key của chúng ta sẽ gồm 2 phần là Access keySecret access key. Cái này chúng ta dùng ở server cho an toàn.

🥇Gửi email với Amazon SES

Mình sẽ test với Node.Js nhá, chi tiết về gửi mail với AWS SES thì AWS họ có viết bài hướng dẫn tại đây, các bạn có thể xem thêm

Có một số lưu ý trước khi gửi:

  • Chuẩn bị Node.js phiên bản 13.x hoặc cao hơn

  • Chuẩn bị Access keySecret access key

  • Bạn chỉ có thể gửi và nhận mail với những địa chỉ email đã được xác thực trước đó (nãy mình xác thực 2 cái email đó, nhớ không 🤪)

  • Bước 1 thì mình sẽ thêm một số thông tin vào file .env như sau:

env
AWS_ACCESS_KEY_ID='AKPPPPLSKDJFLKASDFJLK'
AWS_SECRET_ACCESS_KEY='UUQMLtlghDpf4jJLIFJAOSDFJOLYNOAqweyhu'
AWS_REGION='ap-southeast-1'
SES_FROM_ADDRESS='duthanhduoc@gmail.com'
  • Bước 2 thì mình sẽ cài bộ SDK của AWS, package này có tên là @aws-sdk/client-ses
  • Bước 3 mình sẽ tạo một file send-email.js với nội dung như sau:
js
const { SendEmailCommand, SESClient } = require('@aws-sdk/client-ses')
const { config } = require('dotenv')
config()
// Create SES service object.
const sesClient = new SESClient({
region: process.env.AWS_REGION,
credentials: {
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
accessKeyId: process.env.AWS_ACCESS_KEY_ID
}
})
const createSendEmailCommand = ({
fromAddress,
toAddresses,
ccAddresses = [],
body,
subject,
replyToAddresses = []
}) => {
return new SendEmailCommand({
Destination: {
/* required */
CcAddresses: ccAddresses instanceof Array ? ccAddresses : [ccAddresses],
ToAddresses: toAddresses instanceof Array ? toAddresses : [toAddresses]
},
Message: {
/* required */
Body: {
/* required */
Html: {
Charset: 'UTF-8',
Data: body
}
},
Subject: {
Charset: 'UTF-8',
Data: subject
}
},
Source: fromAddress,
ReplyToAddresses: replyToAddresses instanceof Array ? replyToAddresses : [replyToAddresses]
})
}
const sendVerifyEmail = async (toAddress, subject, body) => {
const sendEmailCommand = createSendEmailCommand({
fromAddress: process.env.SES_FROM_ADDRESS,
toAddresses: toAddress,
body,
subject
})
try {
return await sesClient.send(sendEmailCommand)
} catch (e) {
console.error('Failed to send email.')
return e
}
}
sendVerifyEmail('duthanhduoc01@gmail.com', 'Tiêu đề email', '<h1>Nội dung email</h1>')
  • Bước 4, Chạy file send-email.js bằng lệnh node send-email.js để gửi mail nhé

🥇Hướng dẫn thoái khỏi môi trường Sandbox AWS SES

Trong môi trường Sandbox của AWS SES thì bạn sẽ bị giới hạn rất nhiều thứ như số lượng mail gửi trong ngày, địa chỉ nhận mail,...

Để thoát khỏi Sandbox thì bạn bạn nhấn vào button Request Production AccessAccount Dashboard như hình dưới đây

Yêu cầu chuyển sang chế độ production
Yêu cầu chuyển sang chế độ production

Ở bước Request details các bạn điền thông tin về cách bạn triển khai dịch vụ gửi email như thế nào. Các bạn có thể tham khảo cách mình điền nhé

  • Mail type: Mình chọn là Transactional
  • Website URL: Mình điền là https://duthanhduoc.com, các bạn nên có website riêng của các bạn để dễ được duyệt nhé
  • Use case description: Mình ghi là
text
I use Amazon SES to send emails to customers when they successfully register for an account, as well as to notify them of any issues related to their account. Amazon SES is a highly reliable email service that allows me to send transactional emails at scale. It provides a simple and cost-effective way to send bulk emails, while ensuring that they are delivered to customers' inboxes and not marked as spam. With Amazon SES, I can also track the delivery status of my emails, monitor email metrics, and set up email notifications for specific events. This allows me to stay on top of any issues related to my email communications and ensure that my customers receive timely and relevant information.
  • Additional contacts: Ghi email của bạn vào để họ liên hệ về cái request thoát khỏi sandbox này, mình ghi là duthanhduoc@gmail.com
  • Preferred contact language: Chọn English
  • Acknowledgement: Chọn I agree...

Cuối cùng nhấn Submit request là được

Sau khi Submit xong, có thể họ sẽ gửi bạn 1 cái email thông báo nói rằng họ muốn biết thêm chi tiết về cái cách mà bạn quản lý hệ thống email như thế nào, họ yêu cầu bạn Nhấn vào cái link ticket để gửi thông tin, nhớ là nhấn vào link trong email chứ không phải là rep cái email nhé.

Khi gửi thông tin ticket lại thì mình gửi nội dung như thế này và được duyệt sau 24h

text
As a programmer, I use AWS SES to send emails for my social network website. I use AWS SES to send notifications about user account changes. The emails are sent from a 'no-reply' address.
When a user registers for an account, I send them an email with a verification link. If they need to reset their password, I will send them a link to reset their password. Once they click on the link, I will allow them to reset their password.
Additionally, I also send a customer care email and notify users of any new events. These are all simple notification emails and are not spam. I have also set up an unsubscribe button in every email, allowing users to unsubscribe at any time.

Nếu fail thì cứ làm lại, viết chi tiết vào nhé, rồi sẽ được thôi 😂


🥇Tổng kết

Trên đây là hướng dẫn cách sử dụng AWS SES để gửi email, tất nhiên là nó không thể nào nói hết được tất cả những thứ liên quan đến AWS SES, nhưng mình đã cố gắng đơn giản hết sức cho mọi người có thể đọc xong là làm được ngay luôn, còn mấy thức khác thì có thời gian chúng ta sẽ học sau. Đúng không nào 😂


🥇Tham khảo thêm


Khóa học ReactJs giúp bạn chinh phục mức lương 25 - 30 triệu/tháng

Phew! Cuối cùng bạn cũng đã đọc xong. Bài viết này có hơi dài một tí vì mình muốn nó đầy đủ nhất có thể 😅

Chúng ta đều hiểu rằng Javascript và React không hề dễ, chúng có quá nhiều concept cần phải học. Mình cũng cảm thấy nó khó! Nay lại có thể Typescript nữa 🥲, thật sự khó nuốt.

Nhưng đừng lo: Bạn có thể nắm vững các kiến thức trên chỉ trong một khóa học ReactJs Super - Shopee Clone Typescript

Mình đã bắt đầu code React vào năm 2019, và nó đã trở thành thư viện ưa thích của mình để xây dựng UI và web app. Mình cũng đã làm việc với nhiều framework khác như Angular, Vue nhưng thực sự chỉ có React là đem lại cho mình cảm xúc và sự hiệu quả. 💓

Nếu bạn đang gặp khó khăn với React, mình ở đây để giúp bạn!

Mình đã dành hơn 6 tháng để phát triển khóa học ReactJs Super - Shopee Clone Typescript. Trong khóa này bạn sẽ được học mọi thứ về thư viện ReactJs, các kiến thức từ cơ bản cho đến nâng cao nhất, mục đích của mình là giúp bạn chinh phục mức lương 25 - 30 triêu/tháng

Nếu bạn cảm thấy bài viết này của mình hữu ích, mình nghĩ bạn sẽ thích hợp với phong cách dạy của mình. Không như bài viết này, khóa học là sự kết hợp giữa các bài viết, video, quizz, bài tập nhỏ và dự án lớn có thể xin việc được ngay. Học xong mình đảm bảo bạn sẽ lên tay ngay. 💪🏻

Avatar Dư Thanh Được
Dư Thanh Được
Một developer thích nghiên cứu và chia sẻ kiến thức về lập trình, blockchain, marketing. Chuyên code và dạy lập trình website