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 //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
body {
font-family: calibri, 'DejaVu Sans', Arial, Helvetica, sans-serif;
background-color: #cbd5e1;
}
.container {
margin: 0 auto;
width: 600px;
padding: 10px 30px 30px 30px;
box-shadow: 0 0 4px #ddd;
background-color: #f3f4f6;
border-radius: 5px;
}
a.link {
border: solid 1px #0ea5e9;
background-color: #0ea5e9;
text-decoration: none;
color: #fff;
font-weight: bold;
display: block;
width: 400px;
text-align: center;
padding: 10px 0;
margin-top: 50px;
border-radius: 5px;
}
.text-blue {
color: #0ea5e9;
}
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
Confirm my account
Regards,
The AwesomeApp Team
0 phải là email chúng tôi đã xác minh trước đó trong Amazon SESKiể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
7Confirm my account
Regards,
The AwesomeApp Team
2; 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 `,
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àytype 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
body {
font-family: calibri, 'DejaVu Sans', Arial, Helvetica, sans-serif;
background-color: #cbd5e1;
}
.container {
margin: 0 auto;
width: 600px;
padding: 10px 30px 30px 30px;
box-shadow: 0 0 4px #ddd;
background-color: #f3f4f6;
border-radius: 5px;
}
a.link {
border: solid 1px #0ea5e9;
background-color: #0ea5e9;
text-decoration: none;
color: #fff;
font-weight: bold;
display: block;
width: 400px;
text-align: center;
padding: 10px 0;
margin-top: 50px;
border-radius: 5px;
}
.text-blue {
color: #0ea5e9;
}
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ìnhGó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]