diff --git a/packages/mailers/README.md b/packages/mailers/README.md index aef5e5fc8..a50e917fd 100644 --- a/packages/mailers/README.md +++ b/packages/mailers/README.md @@ -40,4 +40,6 @@ async function sendEmail() { text: 'Hello, World!' }); } -``` \ No newline at end of file +``` + +If you're using the `cloudflare` provider, please also read the instructions of the package [Vercel Email](https://github.com/Sh4yy/vercel-email) to setup your Workers. \ No newline at end of file diff --git a/packages/mailers/package.json b/packages/mailers/package.json index 81245a992..d39f70976 100644 --- a/packages/mailers/package.json +++ b/packages/mailers/package.json @@ -13,7 +13,8 @@ ".": "./src/index.ts" }, "dependencies": { - "nodemailer": "^6.9.13" + "nodemailer": "^6.9.13", + "vercel-email": "0.0.6" }, "devDependencies": { "@kit/eslint-config": "workspace:*", diff --git a/packages/mailers/src/impl/cloudflare/index.ts b/packages/mailers/src/impl/cloudflare/index.ts index dc044050b..040816c3a 100644 --- a/packages/mailers/src/impl/cloudflare/index.ts +++ b/packages/mailers/src/impl/cloudflare/index.ts @@ -1,5 +1,5 @@ import 'server-only'; - +import Email from 'vercel-email'; import { z } from 'zod'; import { Mailer } from '../../mailer'; @@ -8,15 +8,23 @@ import { MailerSchema } from '../../schema/mailer.schema'; type Config = z.infer; /** - * A class representing a mailer using Cloudflare's Workers. + * A class representing a mailer using Cloudflare's Workers thanks to the 'vercel-email' package. * @implements {Mailer} */ export class CloudflareMailer implements Mailer { async sendEmail(config: Config) { - // make lint happy for now - await Promise.resolve(); + const schema = { + to: config.to, + from: config.from, + subject: config.subject, + }; - console.log('Sending email with Cloudflare Workers', config); - throw new Error('Not implemented'); + const content = + 'text' in config ? { text: config.text } : { html: config.html }; + + return Email.send({ + ...schema, + ...content, + }); } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4d156debc..b89f819af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -712,6 +712,9 @@ importers: nodemailer: specifier: ^6.9.13 version: 6.9.13 + vercel-email: + specifier: 0.0.6 + version: 0.0.6 devDependencies: '@kit/eslint-config': specifier: workspace:* @@ -967,8 +970,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 lucide-react: - specifier: ^0.366.0 - version: 0.366.0(react@18.2.0) + specifier: ^0.363.0 + version: 0.363.0(react@18.2.0) prettier: specifier: ^3.2.5 version: 3.2.5 @@ -9721,14 +9724,6 @@ packages: dependencies: react: 18.2.0 - /lucide-react@0.366.0(react@18.2.0): - resolution: {integrity: sha512-iUOsp/35wOkrgEzigZlZI/OhVxQZ8CmxjebdIjfSDzNBmrNYjQfKSpeKderaEFfGt3OycF1BE+wLlaqWRuoh4w==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - dev: true - /magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} @@ -13165,6 +13160,10 @@ packages: engines: {node: '>= 0.8'} dev: false + /vercel-email@0.0.6: + resolution: {integrity: sha512-lpELZ8/B6qyLMUOzmvZiU5evo1Hv5jfSpI/rrzny5UYfOAUKFYycraXNT+fT/cC6ewUKQVJDg8/v3LwyX3cCzA==} + dev: false + /vfile-location@4.1.0: resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} dependencies: