Mẫu code đọc nội dung email với cloudflare worker email trigger và chuyển tiếp đến api, email

How to get message raw string in cloudflare worker email trigger and send it to REST api and another email

export default {
 async email(message, env, ctx) {
     const messageRawText = await new Response(message.raw).text();
     // Chuỗi trả về dạng "1+1=3D2" là còn mã hóa Quoted-printable
     // Khi api nhận được bạn hãy dùng thư viện quotedPrintable bất kỳ để decode
     // Ví dụ nodejs (cần thư viện quoted-printable):
     // received_ message = require('quoted-printable').decode(received_ message)
     const apires = await fetch("https://target.web/api", {
       method: 'POST',
       headers: {
         'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
       },
       body: "message="+encodeURIComponent(messageRawText)
     });
     console.log('Call api result: ' + await apires.text())
   await message.forward("[email protected]"); //<= Change me, pls
 }
}

Mấy câu này dùng chatGPT đi :slight_smile:

The provided code seems to be a Cloudflare Worker email trigger that reads an email message and sends its raw string to a REST API endpoint while forwarding the same email message to another email address.

The message.raw.getReader().read() method returns a ReadableStreamDefaultReader that allows you to read the contents of the email message as a stream of bytes. Then, new TextDecoder().decode(messageRaw) method converts the stream of bytes into a string.

The fetch method sends a POST request to the specified REST API endpoint with the messageRawText as the body parameter. The response from the API endpoint is logged to the console using console.log('Call api result: ' + await apires.text()) .

Finally, the message.forward() method forwards the original email message to the specified email address.

To summarize, if you want to get the raw string of an email message in a Cloudflare Worker email trigger, you can use the provided code with the following changes:

  1. Replace "https://target.web/api" with the URL of your REST API endpoint.
  2. Replace "[email protected]" with the email address you want to forward the original email message to.

Once you make the above changes, you can deploy the Cloudflare Worker and test it by sending an email to the email address associated with the worker.

5 Likes

Sau khi mình hỏi chatGPT: trả lời bằng tiếng việt đi bro

thì nó trả lời thế này đây


Code mà bạn cung cấp là một Cloudflare Worker email trigger, nó đọc nội dung email và gửi chuỗi raw của email đó đến một REST API endpoint cũng như chuyển tiếp email đó đến một địa chỉ email khác.

Phương thức message.raw.getReader().read() trả về một ReadableStreamDefaultReader cho phép bạn đọc nội dung của email như một chuỗi byte. Sau đó, new TextDecoder().decode(messageRaw) chuyển đổi chuỗi byte thành chuỗi ký tự.

Phương thức fetch gửi một yêu cầu POST đến REST API endpoint với messageRawText làm tham số body. Phản hồi từ REST API endpoint được ghi vào console bằng console.log('Call api result: ' + await apires.text()) .

Cuối cùng, phương thức message.forward() chuyển tiếp email ban đầu đến địa chỉ email được chỉ định.

Để tóm lại, nếu bạn muốn lấy chuỗi raw của một email trong một Cloudflare Worker email trigger, bạn có thể sử dụng mã nguồn trên với các thay đổi sau:

  1. Thay thế "https://target.web/api" với URL của REST API endpoint của bạn.
  2. Thay thế "[email protected]" với địa chỉ email mà bạn muốn chuyển tiếp email ban đầu đến.

Sau khi bạn thực hiện các thay đổi trên, bạn có thể triển khai Cloudflare Worker và kiểm tra bằng cách gửi một email đến địa chỉ email được liên kết với worker.

5 Likes

Đỉnh quá sếp. Không ngờ đến cách sếp dùng GPT luôn á.
Đoạn code này tìm không ra nên mình mới viết (và sử dụng thành công) nên share với mọi người.
Với email worker chúng ta có thể làm email doanh nghiệp miễn phí và mạnh mẽ. Không giống như Mailgun - vừa chậm, lại vừa lỗi

1 Like

Mình thấy bạn so sánh không liên quan, mailgun là mail client dùng để gửi mail mà bạn, shopee cũng dùng API của mailgun để gửi mail. Còn email worker thì đang beta, mà mail worker để filter, forward email chứ có tự gửi được email như mailgun đâu.

Cảm ơn bạn đã góp ý. Mình chưa hiểu hết về dịch vụ của Mailgun. Mình chỉ dùng Mailgun như một trình chuyển tiếp mail doanh nghiệp để cắt giảm chi phí mail server. Thành ra mình so sánh tính năng này.

Đúng như bạn góp ý. Cloudflare chưa giải quyết được vấn đề gửi thư (hoặc ít ra là mình chưa biết cách). Hiện mình nhận thư qua email trigger của cloudflare và gửi thư thông qua smtp của mailgun.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?