misterpoppins
misterpoppins
CDCloudflare Developers
Created by misterpoppins on 2/22/2025 in #workers-help
Email worker always triggered 3 times
I have an email worker that takes a screenshot of an email and saves it in R2. The worker is executed 3 times meaning my screenshots are created 3 times. The email activity table shows me 3 emails resulted in Delivery Failed. My code is simple and not secret, would be grateful if someone could tell me what I am doing wrong
import { Browser, BrowserWorker, launch } from "@cloudflare/puppeteer";
import {
ExecutionContext,
ForwardableEmailMessage,
R2Bucket,
} from "@cloudflare/workers-types";
import PostalMime from "postal-mime";

export interface Env {
EMAIL_BINDING: any;
SCREENSHOTS: R2Bucket;
BROWSER: BrowserWorker;
}

export default {
async email(
message: ForwardableEmailMessage,
env: Env,
ctx: ExecutionContext,
) {
if (!message.from.includes("[email protected]")) {
throw new Error("Invalid sender");
}

const email = await PostalMime.parse(message.raw as any);

const browser = await launch(env.BROWSER);
const page = await browser.newPage();

await page.setViewport({
width: 1200,
height: 800,
deviceScaleFactor: 1,
});

await page.setContent(email.html, {
waitUntil: "networkidle0",
timeout: 10000,
});

const screenshot = await page.screenshot({
fullPage: true,
type: "png",
});

const key = `screenshot-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
await env.SCREENSHOTS.put(key, screenshot, {
httpMetadata: {
contentType: "image/png",
},
customMetadata: {
emailFrom: message.from,
emailSubject: email.subject || "",
emailDate: new Date().toISOString(),
},
});
await browser.close();

console.log(
`Screenshot saved with key: ${key} for email from: ${message.from} with subject: ${email.subject}`,
);

return;
},
};
import { Browser, BrowserWorker, launch } from "@cloudflare/puppeteer";
import {
ExecutionContext,
ForwardableEmailMessage,
R2Bucket,
} from "@cloudflare/workers-types";
import PostalMime from "postal-mime";

export interface Env {
EMAIL_BINDING: any;
SCREENSHOTS: R2Bucket;
BROWSER: BrowserWorker;
}

export default {
async email(
message: ForwardableEmailMessage,
env: Env,
ctx: ExecutionContext,
) {
if (!message.from.includes("[email protected]")) {
throw new Error("Invalid sender");
}

const email = await PostalMime.parse(message.raw as any);

const browser = await launch(env.BROWSER);
const page = await browser.newPage();

await page.setViewport({
width: 1200,
height: 800,
deviceScaleFactor: 1,
});

await page.setContent(email.html, {
waitUntil: "networkidle0",
timeout: 10000,
});

const screenshot = await page.screenshot({
fullPage: true,
type: "png",
});

const key = `screenshot-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
await env.SCREENSHOTS.put(key, screenshot, {
httpMetadata: {
contentType: "image/png",
},
customMetadata: {
emailFrom: message.from,
emailSubject: email.subject || "",
emailDate: new Date().toISOString(),
},
});
await browser.close();

console.log(
`Screenshot saved with key: ${key} for email from: ${message.from} with subject: ${email.subject}`,
);

return;
},
};
2 replies
CDCloudflare Developers
Created by misterpoppins on 1/8/2025 in #general-help
Email routing not available
I just registered through a new domain through Cloudflare with the intent of setting up email routing. I followed the documentation: https://developers.cloudflare.com/email-routing/get-started/enable-email-routing/ I see no “Email” navigation item, either in any of the domain pages, the sidebar nav, or anywhere for that matter. How do I enable email routing?
4 replies
CDCloudflare Developers
Created by misterpoppins on 5/10/2024 in #pages-help
Wrangler deploy shows success but actually fails
No description
9 replies
CDCloudflare Developers
Created by misterpoppins on 4/29/2024 in #pages-help
ERROR: Could not resolve "crypto"
I'm using HonoJS with the library Hono Sessions. When I use wrangler to preview wrangler pages dev dist I get an error complaining about not being able to resolve crypto:
✘ [ERROR] 1 error(s) and 0 warning(s) when compiling Worker.


▲ [WARNING] Failed to bundle _worker.js. Error: Build failed with 1 error:

_worker.js:1:580: ERROR: Could not resolve "crypto"
at failureErrorWithLog (/Users/anthony/dev/breeze/node_modules/esbuild/lib/main.js:1636:15)
at /Users/anthony/dev/breeze/node_modules/esbuild/lib/main.js:1048:25
at /Users/anthony/dev/breeze/node_modules/esbuild/lib/main.js:1512:9
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
errors: [
{
detail: undefined,
id: '',
location: [Object],
notes: [Array],
pluginName: '',
text: 'Could not resolve "crypto"'
}
],
warnings: []
}
✘ [ERROR] 1 error(s) and 0 warning(s) when compiling Worker.


▲ [WARNING] Failed to bundle _worker.js. Error: Build failed with 1 error:

_worker.js:1:580: ERROR: Could not resolve "crypto"
at failureErrorWithLog (/Users/anthony/dev/breeze/node_modules/esbuild/lib/main.js:1636:15)
at /Users/anthony/dev/breeze/node_modules/esbuild/lib/main.js:1048:25
at /Users/anthony/dev/breeze/node_modules/esbuild/lib/main.js:1512:9
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
errors: [
{
detail: undefined,
id: '',
location: [Object],
notes: [Array],
pluginName: '',
text: 'Could not resolve "crypto"'
}
],
warnings: []
}
For context, I've ensured I have node compatibility enabled:
// wrangler.toml
compatibility_flags = [ "nodejs_compat" ]
// wrangler.toml
compatibility_flags = [ "nodejs_compat" ]
If I remove any imports of the Hono Sessions library my worker builds...the issue is if I go to that project and run their Cloudflare test, it works totally fine! The only thing I can think of is they are testing against Cloudflare Workers, not Pages. Is there a difference in the node APIs offered between Workers and Pages? If not, any thoughts on why this might be happening? If it matters I'm using Vite to build my project. https://github.com/jcs224/hono_sessions
4 replies