Aws ses gửi email với tập tin đính kèm s3 python

Gần như tất cả các sản phẩm phần mềm đều dựa vào email để liên lạc với người dùng của họ. Trong nhiều trường hợp, đó là kênh chính để gửi thông báo giao dịch hoặc thông báo được kích hoạt tự động bởi hành vi của người dùng trong ứng dụng. Những email giao dịch này thường bao gồm các tệp đính kèm, chẳng hạn như hóa đơn, xác nhận đơn đặt hàng hoặc bảng sao kê khác

Là nhà phát triển, bạn có quyền tạo hoặc truy xuất tệp, sau đó đính kèm tệp vào email thích hợp bằng một trong nhiều API của nhà cung cấp dịch vụ email. Tùy thuộc vào nhà cung cấp dịch vụ email của bạn, đây có thể là một nhiệm vụ khó khăn – Amazon SES, mà chúng tôi sẽ sử dụng làm ví dụ trong hướng dẫn này, sẽ không dễ dàng nếu bạn dựa vào tích hợp trực tiếp – và đối với nhiều nhà cung cấp dịch vụ email

Hãy xem cách chúng tôi có thể thực hiện việc này bằng cách sử dụng một số dịch vụ phổ biến từ Amazon Web Services [AWS]. Chúng tôi sẽ truy xuất tệp từ bộ chứa Amazon S3, sau đó đính kèm tệp đó vào email được gửi bằng Dịch vụ email đơn giản của Amazon [SES], dịch vụ này chúng tôi sẽ tích hợp với Courier để quản lý và gửi mẫu

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

Để hoàn thành hướng dẫn này, bạn sẽ cần một số thứ

  • Đã tạo tài khoản AWS với bộ chứa S3
  • Miền SES đã được xác minh
  • Tài khoản Chuyển phát nhanh – đăng ký miễn phí và bao gồm 10.000 thông báo mỗi tháng

Chúng ta sẽ sử dụng Courier để tạo email và gửi qua AWS SES với tệp đính kèm được lưu trữ trong AWS S3. Sử dụng Chuyển phát nhanh cho phép chúng tôi quản lý mẫu email của mình bên ngoài mã nguồn và tận dụng các chức năng bổ sung như thử gửi lại không thành công và theo dõi quá trình gửi cũng như mức độ tương tác của người dùng

Bạn sẽ cần một nút. môi trường js v12+ để chạy mã

Định cấu hình Amazon SES làm nhà cung cấp email của bạn

Khi bạn đã tạo tài khoản Courier của mình, chúng tôi sẽ bắt đầu bằng cách định cấu hình Amazon SES làm nhà cung cấp dịch vụ email của chúng tôi. Điều này sẽ cho phép chúng tôi sử dụng API của Courier để gọi Amazon SES và gửi email mà chúng tôi sắp soạn, cùng với tệp đính kèm của chúng tôi

Đầu tiên, điều hướng đến Tích hợp và chọn AWS SES từ Danh mục tích hợp. Chúng tôi sẽ cần ID khóa truy cập và khóa truy cập bí mật từ người dùng IAM có quyền truy cập SES. Bạn có thể tìm hiểu thêm về cách tải chúng bằng Hướng dẫn dành cho nhà phát triển AWS

Tiếp theo, chúng tôi sẽ cần một “Địa chỉ Từ” cho email của chúng tôi. Đây có thể là bất kỳ địa chỉ email nào sử dụng tên miền bạn đã định cấu hình. Cuối cùng, chọn khu vực mà tài khoản SES của bạn được định cấu hình cho. Bây giờ bạn có thể nhấp vào Cài đặt và chúng tôi đã sẵn sàng tạo thông báo qua email của mình

Điều hướng đến Trình thiết kế thông báo và chọn Tạo thông báo. Nhấp vào “Thông báo không có tiêu đề” ở trên cùng bên trái để đặt tên mô tả cho thông báo của bạn – trong trường hợp này, tôi đã đặt tên cho mình là “Hóa đơn mới. ”

Bây giờ, hãy thêm email làm kênh thông báo bằng cách chọn Email và chọn AWS SES từ danh sách thả xuống. Giờ đây, chúng tôi có thể thêm Email bên dưới Kênh ở bên trái và bắt đầu thiết kế thông báo của mình

Chúng tôi sẽ thiết kế một thông báo email đơn giản. Trước tiên, hãy cập nhật dòng chủ đề thành “Hóa đơn mới“ bằng cách nhấp vào Chủ đề mới và cập nhật văn bản. Tiếp theo, chúng ta sẽ sử dụng một khối văn bản – nhấp vào chữ “T” trên thanh công cụ - để thêm một lời chào ngắn. Vui lòng sao chép-dán văn bản sau. “Xin chào {name}, hóa đơn của bạn được đính kèm bên dưới. “ Chúng tôi đang cá nhân hóa email bằng một biến “tên”, chúng tôi sẽ chuyển đến thông báo bên dưới trong đối tượng dữ liệu như một phần của việc gọi Courier API

Hiện tại như vậy là đủ, nhưng vui lòng thêm nhiều khối nội dung hơn và tiếp tục thiết kế email. Khi bạn hoàn tất, hãy nhấp vào Xuất bản thay đổi ở góc trên bên phải

Nếu muốn, bạn có thể xem trước email bằng tab Xem trước và đảm bảo các biến của bạn được tạo khuôn mẫu đúng cách. Bạn sẽ được nhắc Tạo một sự kiện thử nghiệm và sau đó bạn sẽ muốn thêm thuộc tính tên vào đối tượng JSON dữ liệu. Khi bạn lưu sự kiện thử nghiệm của mình, bạn sẽ thấy biến tên được điền trong tab Xem trước với bất kỳ giá trị nào bạn đã đặt

Điều cuối cùng chúng ta cần làm trước khi chuyển sang mã là truy xuất ID thông báo. Chúng tôi sẽ cần điều này để gửi đúng thông báo khi chúng tôi gọi Courier API sau này. Bên cạnh tên thông báo, hãy nhấp vào biểu tượng bánh răng để khởi chạy Cài đặt thông báo. Sao chép giá trị ID thông báo và lưu nó để sử dụng trong mã bên dưới

2. Viết mã gửi

Bây giờ chúng ta đã thiết lập thông báo trong Courier, chúng ta sẽ sử dụng Courier Node. js SDK để gửi nó. Chúng ta sẽ bắt đầu bằng cách tạo một dự án npm mới

> mkdir courier-send && cd courier-send

Bây giờ chúng ta có thể thêm một vài gói sẽ hỗ trợ chúng ta gọi Courier API. Chúng ta sẽ cài đặt Courier Node. js và vì chúng tôi sẽ sử dụng các biến môi trường, chúng tôi sẽ tiếp tục và cài đặt gói dotenv

> npm install @trycourier/courier dotenv

Để xử lý xác thực bằng Courier API, chúng tôi sẽ lưu trữ Mã thông báo xác thực Courier trong biến môi trường COURIER_AUTH_TOKEN bằng cách sử dụng. tập tin env. Đảm bảo không kiểm tra tệp này trong kiểm soát nguồn. Bạn có thể tìm thấy Mã thông báo xác thực chuyển phát nhanh của mình trong Cài đặt > Khóa API trong tài khoản Chuyển phát nhanh của bạn. Hãy tạo ra. env và điền nó bằng mã thông báo xác thực của bạn

> echo "COURIER_AUTH_TOKEN=YOUR_AUTH_TOKEN" > .env

Bây giờ chúng ta có thể tạo một tệp chỉ mục và mở nó trong trình chỉnh sửa yêu thích của mình. Tôi sẽ sử dụng Mã VS

Dán vào đoạn mã sau

require["dotenv"].config[];

const { CourierClient } = require["@trycourier/courier"];

const courier = CourierClient[];

Mã này sẽ tải các biến môi trường từ. env và tạo ứng dụng khách Chuyển phát nhanh bằng cách sử dụng mã thông báo xác thực của chúng tôi. Nó cũng thiết lập chức năng chính async để chúng ta có thể sử dụng async/wait. Bây giờ, hãy thêm cuộc gọi Gửi chuyển phát nhanh. Trong chức năng chính, thêm đoạn mã sau

const { messageId } = await courier.send[{

eventId: "YOUR_NOTIFICATION_ID",

recipientId: "YOUR_RECIPIENT_ID",

console.log["Sent notification: ", messageId];

Mã này sẽ gửi thông báo được chỉ định bởi eventId tới người nhận được chỉ định. Đảm bảo bạn thay thế giá trị Id sự kiện bằng Thông báo NẾU bạn đã sao chép trước đó. Bạn cũng sẽ muốn cập nhật người nhậnId thành một chuỗi duy nhất [Ví dụ: tôi sử dụng tên của mình và mã zip viết hoa toàn bộ không có dấu cách. AYDRIAN10036]. Bạn cũng sẽ muốn cập nhật email với địa chỉ email của mình. Bây giờ nếu bạn chạy cái này, bạn sẽ nhận được email mà không có tệp đính kèm. Hãy giải quyết vấn đề tiếp theo

Thêm tệp đính kèm email của bạn

Để thêm tệp đính kèm, trước tiên chúng tôi cần truy xuất tệp đó từ Bộ chứa S3 của mình và chuyển đổi nó thành chuỗi base64. Sau đó, chúng tôi sẽ có thể thêm nó vào cuộc gọi gửi ở trên bằng cách ghi đè nhà cung cấp. Mỗi nhà cung cấp có cấu hình ghi đè riêng và bạn có thể xem tất cả chúng trong Hướng dẫn tích hợp chuyển phát nhanh. Chúng tôi sẽ sử dụng tính năng ghi đè tệp đính kèm cho

Hãy bắt đầu bằng cách thêm AWS SES SDK

> npm install @aws-sdk/client-s3

Tiếp theo, chúng tôi sẽ định cấu hình các biến môi trường cần thiết để xác thực. Đối với điều này, bạn sẽ cần lấy thông tin đăng nhập AWS của mình. Chúng bao gồm ID khóa truy cập và khóa truy cập bí mật. Bạn có thể tìm hiểu thêm về cách tải chúng trên Hướng dẫn dành cho nhà phát triển AWS. Đảm bảo rằng người dùng IAM mà bạn đang sử dụng có ít nhất S3 Read Access

mở của bạn. env và thêm các dòng sau và thay thế các giá trị bằng thông tin đăng nhập của bạn

AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID

AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY

Bây giờ quay lại chỉ mục. js và thêm các dòng sau vào trên chức năng chính

const S3 = require["@aws-sdk/client-s3"];

const s3Client = new S3.S3Client[{

Mã này sẽ tạo Máy khách S3 bằng thông tin xác thực của bạn được lưu trữ trong. tập tin env. Nếu bạn không sử dụng us-east-1, bạn nên thay đổi nó thành khu vực của mình. Bây giờ chúng ta có thể tạo lệnh để lấy một đối tượng từ bộ chứa S3 của bạn và yêu cầu máy khách thực thi nó

Thêm đoạn mã sau vào đầu hàm main

________số 8_______

Cập nhật các giá trị của Bộ chứa và Khóa để khớp với id bộ chứa của bạn và khóa của tệp bạn muốn đính kèm. Dữ liệu chứa tất cả những gì chúng tôi cần để đính kèm tệp, nhưng chúng tôi sẽ phải chuyển đổi Nội dung từ luồng có thể đọc được thành bộ đệm để chúng tôi có thể lấy nó dưới dạng chuỗi base64. Chúng tôi sẽ sử dụng chức năng trợ giúp để chuyển đổi nó

Thêm chức năng sau vào trên chức năng chính

function streamToBuffer[stream] {

  return new Promise[[resolve, reject] => {

    stream.on["error", reject];

    stream.on["data", [data] => buffers.push[data]];

    stream.on["end", [] => resolve[Buffer.concat[buffers]]];

Bây giờ chúng ta có thể sử dụng nó ngay sau dữ liệu trong chức năng chính

> npm install @trycourier/courier dotenv

0

Và chúng ta sẽ sử dụng tất cả điều này để tạo một đối tượng đính kèm ngay bên dưới nó

> npm install @trycourier/courier dotenv

1

Bây giờ, hãy cập nhật cuộc gọi Gửi chuyển phát nhanh của chúng tôi để sử dụng quyền ghi đè

> npm install @trycourier/courier dotenv

2

Để tất cả chúng cùng nhau

Bây giờ nếu bạn chạy lại mã, nó sẽ lấy tệp được chỉ định từ S3, đính kèm tệp đó vào email của bạn và gửi cho bạn

Mã hoàn thành của bạn sẽ giống như sau

> npm install @trycourier/courier dotenv

3

tôi hy vọng nó sẽ có ích. Nếu không sử dụng AWS SES, bạn có thể dễ dàng định cấu hình Chuyển phát nhanh để gửi tệp đính kèm bằng nhà cung cấp email khác. Đối với các nhà cung cấp dịch vụ email khác, bạn có thể xem những thay đổi nào cần được thực hiện đối với quyền ghi đè để xử lý tệp đính kèm bằng cách truy cập tài liệu Tích hợp email của Courier. Hãy thử và cho tôi biết suy nghĩ của bạn

Gặp sự cố khi bắt đầu hoặc tò mò về cách thức hoạt động của tính năng này với một nhà cung cấp dịch vụ email khác?

SES có thể gửi email có tệp đính kèm không?

Bạn có thể gửi thư có tệp đính kèm thông qua Amazon SES bằng cách sử dụng tiêu chuẩn Tiện ích mở rộng thư Internet đa năng [MIME] . Amazon SES chấp nhận tất cả các loại tệp đính kèm ngoại trừ tệp đính kèm có phần mở rộng tệp trong danh sách sau.

Làm cách nào để kích hoạt thông báo email có tệp đính kèm trên các sự kiện S3 thông qua chức năng Lambda?

SES - Boto3 Tài liệu 1. 14. .
Chuyển đến nhóm S3
Chuyển đến Thuộc tính
Cuộn xuống Cài đặt nâng cao và nhấp vào Sự kiện
Nhấp vào Thêm thông báo
Đặt cho nó một cái tên
Chọn Sự kiện mà bạn muốn kích hoạt lambda
Sử dụng Tiền tố nếu bạn muốn nó cho một thư mục cụ thể bên trong nhóm

Làm cách nào để gửi email có tệp đính kèm bằng Python bằng AWS Boto?

Làm cách nào để gửi email có tệp đính kèm bằng Python bằng AWS Boto? .
nhập boto3
từ botocore. nhập ngoại lệ ClientError
từ email. kịch câm. nhập nhiều phần MIMEMultipart
từ email. kịch câm. nhập văn bản MIMEText
từ email. kịch câm. nhập ứng dụng MIMEApplication
nhập urllib
nhập hệ điều hành. con đường

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 [ngừng sử dụng] trong Amazon SES, and only Signature Version 4 will be supported going forward.

Chủ Đề