diff --git a/config/templates/newsletter.html b/config/templates/newsletter.html
index 161aa0919e8..fd197dce8e1 100644
--- a/config/templates/newsletter.html
+++ b/config/templates/newsletter.html
@@ -356,7 +356,7 @@
>
- {{ unsub1 }}. {{ unsub2 }}
+ {{ unsub1 }}
{{ unsub2 }}
diff --git a/scripts/newsletter-lib.mjs b/scripts/newsletter-lib.mjs
index 0619cf8962c..01eb2004fd5 100644
--- a/scripts/newsletter-lib.mjs
+++ b/scripts/newsletter-lib.mjs
@@ -7,12 +7,13 @@ import remarkRehype from 'remark-rehype'
import rehypeFormat from 'rehype-format'
import rehypeStringify from 'rehype-stringify'
import remarkGfm from 'remark-gfm'
+import remarkSmartypants from 'remark-smartypants'
+import remarkFrontmatter from 'remark-frontmatter'
import mustache from 'mustache'
import { testers } from '../config/newsletter-testers.mjs'
import { fileURLToPath } from 'url'
import { SESv2Client, SendEmailCommand } from '@aws-sdk/client-sesv2'
-console.log({ edition: process.env.NL_EDITION })
// Current working directory
const cwd = path.dirname(fileURLToPath(import.meta.url))
@@ -43,13 +44,13 @@ const i18n = {
unsub1: 'Sie können sich jederzeit wieder abmelden',
unsub2: 'Oder antworten Sie uns und sagen Sie uns, dass Sie nicht mehr wollen',
},
- de: {
+ es: {
title: 'FBoletín FreeSewing',
support: 'Apoya FreeSewing: Hazte mecenas',
unsub1: 'Puedes darte de baja en cualquier momento',
unsub2: 'O contesta y dinos que quieres darte de baja',
},
- de: {
+ uk: {
title: 'Інформаційний бюлетень FreeSewing',
support: 'Підтримайте FreeSewing: Стати меценатом',
unsub1: 'Ви можете відписатися в будь-який час',
@@ -61,6 +62,8 @@ const asHtml = async (text) => {
const content = await unified()
.use(remarkParse)
.use(remarkGfm)
+ .use(remarkSmartypants)
+ .use(remarkFrontmatter, ['yaml'])
.use(remarkRehype)
.use(rehypeFormat)
.use(rehypeStringify)
@@ -71,13 +74,13 @@ const asHtml = async (text) => {
const getSubscribers = async (test = true) => {
if (test) return testers
- let res = await axios.get(`${backend}admin/subscribers`, {
+ let res = await axios.get(`${backend}admin/subscribers/key`, {
auth: {
username: process.env.NL_API_KEY,
password: process.env.NL_API_SECRET,
},
})
- if (res.data) return res.data
+ if (res.data && res.data.subscribers) return res.data.subscribers
else return false
}
@@ -90,8 +93,8 @@ const send = async (test = true) => {
const client = new SESv2Client({ region: 'us-east-1' })
let i = 1
- let l = 1
for (const lang in subscribers) {
+ let l = 1
let edition
try {
edition = await axios.get(
@@ -102,25 +105,20 @@ const send = async (test = true) => {
console.log(err)
process.exit()
}
- console.log(edition.data)
- const text = edition.data[0].body
+ const text = edition.data
const content = await asHtml(text)
- console.log(content)
-
- process.exit()
-
subscribers[lang].sort()
let subs = subscribers[lang].length
+
for (let sub of subscribers[lang]) {
- if (i > 0) {
- let unsub = `${backend}newsletter/unsubscribe/${sub.ehash}`
- inject.unsubscribe = unsub
- let body = mustache.render(template, {
+ if (l > 0) {
+ const body = mustache.render(template, {
...i18n[lang],
+ unsubscribe: `${backend}newsletter/unsubscribe/${sub.ehash}`,
content,
})
- console.log(`[${lang}] ${i}/${subs} Sending to ${sub.email}`)
+ console.log(`[${lang}] ${l}/${subs} (${i}) Sending to ${sub.email}`)
// Via API
const command = new SendEmailCommand({
@@ -139,7 +137,7 @@ const send = async (test = true) => {
},
Subject: {
Charset: 'utf-8',
- Data: 'FreeSewing newsletter: Autumn 2023',
+ Data: i18n[lang].title,
},
},
},
@@ -151,14 +149,15 @@ const send = async (test = true) => {
//FromEmailAddressIdentityArn: "arn:aws:ses:us-east-1:550348293871:identity/freesewing.org",
//ReplyToAddresses: us,
})
- //try {
- // await client.send(command)
- //} catch (err) {
- // console.log(err)
- // return false
- //}
+ try {
+ await client.send(command)
+ } catch (err) {
+ console.log(err)
+ return false
+ }
}
i++
+ l++
}
}
}