1 | type Mailgun = { |
2 | api_key: string; |
3 | }; |
4 |
|
5 | export async function main( |
6 | resource: Mailgun, |
7 | domain: string, |
8 | data: { |
9 | from: string; |
10 | to: string; |
11 | subject: string; |
12 | html: string; |
13 | recipient_variables?: string; |
14 | template?: string; |
15 | cc?: string; |
16 | bcc?: string; |
17 | text?: string; |
18 | amp_html?: string; |
19 | attachment?: string; |
20 | inline?: string; |
21 | "o:tracking-opens"?: string; |
22 | "t:version"?: string; |
23 | "t:text"?: string; |
24 | "t:variables"?: string; |
25 | "o:tag"?: string; |
26 | "o:dkim"?: string; |
27 | "o:deliverytime"?: string; |
28 | "o:deliverytime-optimize-period"?: string; |
29 | "o:time-zone-localize"?: string; |
30 | "o:testmode"?: string; |
31 | "o:tracking"?: string; |
32 | "o:tracking-clicks"?: string; |
33 | "o:require-tls"?: string; |
34 | "o:skip-verification"?: string; |
35 | others?: Record<string, string>; |
36 | } |
37 | ) { |
38 | const form = new FormData(); |
39 | form.append("from", data.from); |
40 | form.append("to", data.to); |
41 | form.append("subject", data.subject); |
42 | form.append("html", data.html); |
43 | data.recipient_variables && |
44 | form.append("recipient-variables", data.recipient_variables); |
45 | data.template && form.append("template", data.template); |
46 | data.cc && form.append("cc", data.cc); |
47 | data.bcc && form.append("bcc", data.bcc); |
48 | data.text && form.append("text", data.text); |
49 | data.amp_html && form.append("amp-html", data.amp_html); |
50 | data.attachment && form.append("attachment", data.attachment); |
51 | data.inline && form.append("inline", data.inline); |
52 | data["o:tracking-opens"] && |
53 | form.append("o:tracking-opens", data["o:tracking-opens"]); |
54 | data["t:version"] && form.append("t:version", data["t:version"]); |
55 | data["t:text"] && form.append("t:text", data["t:text"]); |
56 | data["t:variables"] && form.append("t:variables", data["t:variables"]); |
57 | data["o:tag"] && form.append("o:tag", data["o:tag"]); |
58 | data["o:dkim"] && form.append("o:dkim", data["o:dkim"]); |
59 | data["o:deliverytime"] && |
60 | form.append("o:deliverytime", data["o:deliverytime"]); |
61 | data["o:deliverytime-optimize-period"] && |
62 | form.append( |
63 | "o:deliverytime-optimize-period", |
64 | data["o:deliverytime-optimize-period"] |
65 | ); |
66 | data["o:time-zone-localize"] && |
67 | form.append("o:time-zone-localize", data["o:time-zone-localize"]); |
68 | data["o:testmode"] && form.append("o:testmode", data["o:testmode"]); |
69 | data["o:tracking"] && form.append("o:tracking", data["o:tracking"]); |
70 | data["o:tracking-clicks"] && |
71 | form.append("o:tracking-clicks", data["o:tracking-clicks"]); |
72 | data["o:require-tls"] && form.append("o:require-tls", data["o:require-tls"]); |
73 | data["o:skip-verification"] && |
74 | form.append("o:skip-verification", data["o:skip-verification"]); |
75 | Object.entries(data.others || {}).forEach(([key, value]) => |
76 | form.append(key, value) |
77 | ); |
78 |
|
79 | return ( |
80 | await fetch(`https://api.mailgun.net/v3/${domain}/messages`, { |
81 | method: "POST", |
82 | headers: { |
83 | Authorization: |
84 | "Basic " + Buffer.from(`api:${resource.api_key}`).toString("base64"), |
85 | }, |
86 | body: form, |
87 | }) |
88 | ).json(); |
89 | } |
90 |
|