using multiple recipients is break of privacy since user will be able to see each other's emails.
46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
import { requireAuth } from 'src/lib/auth'
|
|
import { sendMail } from 'src/lib/sendmail'
|
|
import type { SendMailArgs } from 'src/lib/sendmail'
|
|
import { users } from 'src/services/users/users'
|
|
|
|
export const sendAllUsersEmail = async ({ input: { body, subject } }) => {
|
|
requireAuth({ role: 'admin' })
|
|
const from = {
|
|
address: 'news@mail.cadhub.xyz',
|
|
name: 'CadHub',
|
|
}
|
|
const emails: SendMailArgs[] = (await users()).map(({ email }) => ({
|
|
to: email,
|
|
from,
|
|
subject,
|
|
text: body,
|
|
}))
|
|
const emailPromises = emails.map((email) => sendMail(email))
|
|
const accepted = []
|
|
const rejected = []
|
|
const result = await Promise.allSettled(emailPromises)
|
|
result.forEach((result) => {
|
|
if (result.status === 'fulfilled') {
|
|
accepted.push(result.value.accepted[0])
|
|
} else {
|
|
rejected.push(result.reason)
|
|
}
|
|
})
|
|
await sendMail({
|
|
to: 'k.hutten@protonmail.ch',
|
|
from,
|
|
subject: `All users email report`,
|
|
text: JSON.stringify(
|
|
{
|
|
accepted,
|
|
rejected,
|
|
originalEmailList: emails,
|
|
},
|
|
null,
|
|
2
|
|
),
|
|
})
|
|
|
|
return { accepted, rejected }
|
|
}
|