Nút AWS SES

Gửi email từ một ứng dụng Web là phổ biến để thông báo cho người dùng về các sự kiện liên quan đến tương tác của họ với hệ thống, chẳng hạn như xác nhận tài khoản, đặt lại mật khẩu, xác nhận đơn hàng, v.v.

Email được gửi qua giao thức SMTP, giao thức này yêu cầu một bên là máy chủ và một bên là máy khách gửi yêu cầu đến máy chủ. Máy chủ SMTP được xử lý bởi các công ty như Yahoo, Google, AWS, v.v.

Trong bài đăng này, chúng tôi sẽ sử dụng Amazon SES (Dịch vụ email đơn giản) để gửi email từ một Nút. ứng dụng js. Theo trường hợp sử dụng, chúng tôi sẽ tạo tài khoản thường yêu cầu xác nhận qua email

điều kiện tiên quyết

Bạn phải cài đặt những công cụ này trên máy tính của mình để làm theo hướng dẫn này

  • Nút. js 12+ - Liên kết tải xuống
  • NPM hoặc Sợi - Tôi sẽ sử dụng Sợi
  • Tài khoản AWS để sử dụng Amazon SES

Thiết lập dự án

Tôi đã tạo một bản soạn sẵn để nhanh chóng bắt đầu một Nút. js với Express Framework; . Hãy sao chép nó  và làm cho nó hoạt động cục bộ


git clone https://github.com/tericcabrel/node-ts-starter.git -b express node-email-ses

cd node-email-ses

cp .env.example .env

yarn install

yarn start

Điều hướng đến URL http. //máy chủ cục bộ. 4500 để xác minh nó hoạt động như mong đợi

Dự án này sử dụng gói dotenv để tải các biến môi trường từ tệp có tên .env. Kho lưu trữ chứa tệp mẫu có tên .env.example

Xây dựng mẫu email

Nội dung email là phần chứa nội dung. Nội dung có thể ở dạng văn bản thuần túy hoặc HTML. Với HTML, bạn có thể xây dựng nội dung email đẹp mắt, vậy phần đầu tiên là tạo mẫu email đó

Chúng tôi sẽ sử dụng một công cụ mẫu để tận dụng khả năng đưa các biến vào mẫu của chúng tôi. Công cụ mẫu phổ biến nhất trong Node. js là Tay lái. Hãy cài đặt nó


yarn add handlebars

Tạo một thư mục có tên là


yarn add handlebars

0, sau đó tạo một tệp

yarn add handlebars

1 và thêm mã bên dưới




    Registration confirmation
    
    


Confirm your account

Welcome {{name}} !

Your account has been created on our platform

Find your login information below:

Email address : {{email}}

To confirm the validity of your email address, please click on the link below

Confirm my account


Regards,
The AwesomeApp Team

Mã HTML này cung cấp bản xem trước bên dưới

Nút AWS SES
Mẫu email để xây dựng bằng HTML

Từ khóa


yarn add handlebars

2 và

yarn add handlebars

3 sẽ được thay thế bằng tên người dùng và email tương ứng. Tay lái cung cấp một phương thức

yarn add handlebars

4 để tạo nội dung HTML từ mẫu này

Định cấu hình AWS SES

Để gửi email bằng Amazon SES, trước tiên chúng ta phải thiết lập SES từ bảng điều khiển AWS. Chính xác, chúng tôi cần xác thực địa chỉ email của người gửi

Trước khi tiếp tục, hãy xem giá của Amazon SES

Giá dịch vụ email đơn giản của Amazon. Dịch vụ email đám mây. Dịch vụ web của Amazon

Amazon Simple Email Service (SES) là dịch vụ trả tiền khi sử dụng dựa trên khối lượng email được gửi và nhận. Không có đăng ký, không có đàm phán hợp đồng và không có phí tối thiểu

Nút AWS SES
Dịch vụ web Amazon, Inc

Nút AWS SES

Truy cập Bảng điều khiển AWS, xác thực, sau đó tìm dịch vụ SES. Bạn sẽ có trang bên dưới;

Nút AWS SES
Trang chủ Amazon SES

Có hai loại danh tính. Tên miền và địa chỉ Email; . Chúng tôi sẽ lấy loại nhận dạng thứ hai để đơn giản

Nút AWS SES
Tạo danh tính mới trên Amazon SES

Bạn sẽ được chuyển hướng đến một trang hiển thị biểu ngữ như trong hình bên dưới

Nút AWS SES
Biểu ngữ cho biết kiểm tra hộp thư đến email để xác thực email

Chuyển đến hộp thư đến địa chỉ email của bạn và nhấp vào liên kết được cung cấp. Bạn sẽ được chuyển hướng đến một trang xác thực thành công

Nút AWS SES
Danh tính đã được xác thực thành công

Bây giờ chúng tôi có thể gửi email từ danh tính này

Định cấu hình cài đặt SMTP

Danh tính đã được xác minh, nhưng để gửi email, chúng tôi cần thông tin đăng nhập SMTP bao gồm bốn phần thông tin

  • Máy chủ SMTP.
    
    yarn add handlebars
    
    
    5
  • Cổng SMTP.
    
    yarn add handlebars
    
    
    6
  • Tên người dùng. để tạo
  • Mật khẩu. để tạo

Hãy lấy hai mẩu thông tin còn lại

Nút AWS SES
Tạo thông tin đăng nhập SMTP

Bạn sẽ được chuyển hướng đến trang bên dưới;

Nút AWS SES
Tạo người dùng IAM để liên kết với thông tin đăng nhập SMTP

Trên trang tiếp theo, bạn sẽ thấy thông tin xác thực được tạo;

Tệp được tải xuống là tệp CSV chứa tên Người dùng IAM, tên người dùng SMTP và mật khẩu SMTP

Nút AWS SES
Tên người dùng và mật khẩu SMTP đã được tạo thành công

Chúng ta có thể chuyển sang bước tiếp theo

💡

Theo mặc định, AWS SES ở chế độ hộp cát. Điều này giúp bạn kiểm tra ứng dụng của mình mà không gặp rủi ro ảnh hưởng đến việc bị tính phí cho các email bạn gửi. Bạn có hạn ngạch 200 email mỗi ngày

Cài đặt ứng dụng khách SMTP

Để gửi email từ một Node. js, chúng tôi cần một máy khách STMP và sẽ sử dụng gói nút có tên là nodemailer

Chạy lệnh bên dưới để cài đặt gói


yarn add nodemailer
yarn add -D @types/nodemailer

Tạo một điểm cuối để kích hoạt việc gửi

Chúng tôi sẽ tạo một tuyến đường


yarn add handlebars

7 trong phương thức POST, nội dung yêu cầu phải có địa chỉ email và tên của người dùng. Chúng tôi sẽ không xử lý đăng ký trong cơ sở dữ liệu

Cập nhật tệp


yarn add handlebars

8  để thêm mã bên dưới

type ConfirmEmailPayload = {
  email: string;
  name: string;
  url: string;
};

app.post('/register', async (req, res) => {
  const { email, name } = req.body;

  // TODO Save user into the database

  const fromEmailAddress = process.env.FROM_EMAIL;
  const smtpHost = process.env.STMP_HOST ?? '';
  const smtpPort = parseInt(process.env.STMP_PORT ?? '587', 10);
  const smtpUser = process.env.STMP_USER ?? '';
  const smtpPassword = process.env.STMP_PASSWORD ?? '';

  const smtpTransport: Mail = nodemailer.createTransport({
    host: smtpHost,
    port: smtpPort,
    auth: {
      user: smtpUser,
      pass: smtpPassword,
    },
  });

  const confirmationUrl = 'generated_confirmation_url';
  const templateData: ConfirmEmailPayload = {
    email,
    name,
    url: confirmationUrl,
  };

  const templatePath = path.join(__dirname, './email-template/confirm-account.html');
  const source = fs.readFileSync(templatePath, { encoding: 'utf-8' });
  const template: HandlebarsTemplateDelegate = handlebars.compile(source);
  const html: string = template(templateData);

  try {
    const updatedData: Mail.Options = {
      to: email,
      html,
      from: `Awesome App <${fromEmailAddress}>`,
      subject: 'Confirm your account',
    };

    smtpTransport.sendMail(updatedData).then((result: nodemailer.SentMessageInfo): void => {
      console.info(result);
    });
  } catch (e) {
    console.error(e);
  }

  return res.send({ message: 'User created successfully.' });
});

Chúng ta có thể chia đoạn mã trên thành bốn phần

  • Phần một. đọc cài đặt SMTP từ các biến môi trường
  • Phần hai. tạo trình vận chuyển SMTP từ cài đặt SMTP bằng Nodemailer
  • Một phần ba. tạo phần thân HTML của email từ mẫu email bằng Tay lái
  • phần bốn. chuẩn bị các tùy chọn ứng dụng email và gửi email

Cập nhật tệp biến môi trường

Theo đoạn mã trên, chúng ta phải thêm năm biến vào tệp .env


STMP_HOST=
STMP_PORT=
STMP_USER=
STMP_PASSWORD=
FROM_EMAIL=


Thuộc tính




    Registration confirmation
    
    


Confirm your account

Welcome {{name}} !

Your account has been created on our platform

Find your login information below:

Email address : {{email}}

To confirm the validity of your email address, please click on the link below

Confirm my account


Regards,
The AwesomeApp Team

0 phải là email chúng tôi đã xác minh trước đó trong Amazon SES

Kiểm tra ứng dụng

Khởi động ứng dụng, mở Postman hoặc bất kỳ ứng dụng khách HTTP nào bạn có và gửi yêu cầu POST đến đường dẫn


yarn add handlebars

7

Nút AWS SES
Gửi yêu cầu tới route /register để kích hoạt việc gửi email

Kiểm tra hộp thư đến email của bạn hoặc email rác;

Nút AWS SES
Email đã được nhận trong hộp thư đến của tôi

Máy khách SMTP cung cấp một số chi tiết về kết quả gửi email. Bạn có thể xem email đã gửi đã được chấp nhận hay bị từ chối, kích thước email, ID thư, v.v.

Nút AWS SES
Nội dung kết quả gửi email từ SMTP client

Lỗi chế độ hộp cát

Ở chế độ Hộp cát, bạn chỉ có thể gửi email đến địa chỉ email đã xác minh. Trong trường hợp của chúng tôi, chúng tôi chỉ có thể gửi email đến địa chỉ mà chúng tôi đã xác minh trước đó hoặc chúng tôi có thể thêm địa chỉ mới

Nói cách khác. FROM_EMAIL và TO_EMAIL phải được xác minh. Nếu không, bạn sẽ gặp lỗi khi gửi email

Kích hoạt AWS SES để sản xuất

Bạn đã thử nghiệm ứng dụng của mình ở chế độ Hộp cát và sẵn sàng sử dụng nó trong sản xuất. Bạn cần chuyển sang chế độ sản xuất, gửi yêu cầu và chờ phê duyệt

Truy cập trang SES và nhấp vào menu thanh bên trái có tên




    Registration confirmation
    
    


Confirm your account

Welcome {{name}} !

Your account has been created on our platform

Find your login information below:

Email address : {{email}}

To confirm the validity of your email address, please click on the link below

Confirm my account


Regards,
The AwesomeApp Team

2;

Nút AWS SES
Yêu cầu chuyển từ chế độ Hộp cát sang chế độ sản xuất

Cung cấp thông tin về doanh nghiệp sẽ sử dụng danh tính SES và gửi

Thưởng. Xây dựng ứng dụng khách SMTP chung để gửi email

Mã để gửi email có hơn 60 dòng mã và nếu bạn cần gửi email ở nhiều nơi trong cơ sở mã của mình, hãy sao chép mã này để chỉ thay đổi một số chi tiết (dữ liệu mẫu, đường dẫn mẫu, chủ đề và

Chúng ta có thể trừu tượng hóa logic liên quan đến việc tạo HTML, thiết lập truyền tải SMTP và gửi email

Tạo một tệp




    Registration confirmation
    
    


Confirm your account

Welcome {{name}} !

Your account has been created on our platform

Find your login information below:

Email address : {{email}}

To confirm the validity of your email address, please click on the link below

Confirm my account


Regards,
The AwesomeApp Team

3 và thêm mã bên dưới


import * as nodemailer from 'nodemailer';
import * as fs from 'fs';
import handlebars from 'handlebars';
import Mail from 'nodemailer/lib/mailer';

type EmailClientArgs = {
  to: string;
  subject: string;
  templatePath: string;
  templateData: TemplateData;
};

const sendMail = async (data: EmailClientArgs) => {
  const fromEmailAddress = process.env.FROM_EMAIL;
  const smtpHost = process.env.STMP_HOST ?? '';
  const smtpPort = parseInt(process.env.STMP_PORT ?? '587', 10);
  const smtpUser = process.env.STMP_USER ?? '';
  const smtpPassword = process.env.STMP_PASSWORD ?? '';

  try {
    const smtpTransport: Mail = nodemailer.createTransport({
      host: smtpHost,
      port: smtpPort,
      auth: {
        user: smtpUser,
        pass: smtpPassword,
      },
    });

    const source = fs.readFileSync(data.templatePath, { encoding: 'utf-8' });
    const template: HandlebarsTemplateDelegate = handlebars.compile(source);
    const html: string = template(data.templateData);

    const updatedData: Mail.Options = {
      to: data.to,
      html,
      from: `Awesome App <${fromEmailAddress}>`,
      subject: data.subject,
    };

    smtpTransport.sendMail(updatedData).then((result: nodemailer.SentMessageInfo): void => {
      console.info(result);
    });
  } catch (e) {
    console.error(e);
  }
};

export { sendMail };

Bây giờ đoạn mã trước để gửi email trong tệp


yarn add handlebars

8 trông như thế này

type ConfirmEmailPayload = {
  email: string;
  name: string;
  url: string;
};

app.post('/register', async (req, res) => {
  const { email, name } = req.body;

  // TODO Save user into the database

  const templateData: ConfirmEmailPayload = {
    email,
    name,
    url: 'generated_confirmation_url',
  };

  sendMail({
    subject: 'Confirm your account',
    templateData,
    templatePath: path.join(__dirname, './email-template/confirm-account.html'),
    to: email,
  });

  return res.send({ message: 'User created successfully.' });
});


Bạn có thể sử dụng lại hàm




    Registration confirmation
    
    


Confirm your account

Welcome {{name}} !

Your account has been created on our platform

Find your login information below:

Email address : {{email}}

To confirm the validity of your email address, please click on the link below

Confirm my account


Regards,
The AwesomeApp Team

5 trong dự án của mình

Gói (lại

Amazon SES là một dịch vụ AWS tuyệt vời mà bạn có thể sử dụng để gửi email giao dịch hoặc tiếp thị từ ứng dụng của mình. Chúng tôi đã xem cách gửi email bằng giao thức SMTP nhưng lưu ý rằng chúng tôi cũng có thể sử dụng AWS SDK để gửi email

Bạn có thể tiến xa hơn bằng cách kết nối danh tính SES của mình với các chủ đề SNS để thực hiện một số hành động khi gửi email thành công, bị trả lại, v.v.

Xem tài liệu chính thức để tìm hiểu thêm về khả năng của AWS

Bạn có thể tìm mã nguồn trên kho lưu trữ GitHub

Theo dõi tôi trên Twitter hoặc đăng ký nhận bản tin của tôi để tránh bỏ lỡ các bài đăng sắp tới cũng như các mẹo và thủ thuật mà tôi thỉnh thoảng chia sẻ

Làm cách nào để gửi email bằng ses trong nodejs?

Tạo người dùng AWS IAM có quyền SES. .
Xác minh miền của bạn với AWS
Đăng ký tên miền MAIL FROM
Xác minh email người gửi
Xóa tài khoản AWS của bạn khỏi môi trường hộp cát SES
Tạo người dùng AWS IAM có quyền SES

AWS SES có bị phản đối không?

Để tăng cường bảo mật cho khách hàng Amazon SES, bắt đầu từ ngày 1 tháng 10 năm 2020, hỗ trợ Chữ ký phiên bản 3 sẽ bị tắt (không dùng nữa) trong Amazon SES, and only Signature Version 4 will be supported going forward.

AWS có hỗ trợ Nodejs không?

Nhà phát triển tạo ứng dụng serverless trong Lambda bằng Node. js 18 có thể tận dụng các tính năng mới, chẳng hạn như bản nâng cấp AWS SDK dành cho JavaScript đi kèm lên phiên bản v3 và hỗ trợ được cải thiện để triển khai Mô-đun ES bằng cách sử dụng các lớp Lambda. Bản phát hành này cũng cung cấp quyền truy cập vào Node.

AWS SES có sẵn ở Singapore không?

Amazon Simple Email Service (Amazon SES) hiện có sẵn ở 4 Khu vực AWS bổ sung bao gồm Miền Đông Hoa Kỳ (Ohio), Châu Á Thái Bình Dương (Singapore), Châu Á Thái Bình Dương (Tokyo) và Châu Á Thái Bình Dương (Seoul)