我正在开发一种向用户发送电子邮件的功能,我已经具有发送邮件功能,并且可以将其发送给单个用户。我正在尝试发送给数组中的多个用户。
我正在用Typescript写作,并且使用mailgun作为我的电子邮件服务提供商
这是一个示例发送邮件功能:
const data = {
from: 'example@from.com',
to: 'example@reciever.com',
subject: 'Sample subject',
html: await email(), // I am getting the email template here
}
await mailgun.messages().send(data)
使用上面的代码,我正在向单个用户发送电子邮件。下面的json显示了我如何接收电子邮件列表:
[
{
"name": "User 1",
"email": "user1@gmail.com"
},
{
"name": "user 2",
"email": "user2@gmail.com"
}
]
我希望能够发送给多个用户,并且我想以一种聪明的方式做到这一点。如果可能的话,请使用代码提出最佳解决方案。
谢谢。
答案 0 :(得分:1)
我假设您使用的是mailgun-js,您似乎可以使用mailing list这个东西。如果不是,那么我建议,不要简单地遍历用户列表并一次发送一封电子邮件(与await同步),而是触发所有电子邮件异步发送,然后使用Promise.all知道何时发送了所有电子邮件。下面的示例未经测试(因为我从未使用过mailgun),但它应该为您提供实现方法的想法。
const users = [
{
"name": "User 1",
"email": "user1@gmail.com"
},
{
"name": "user 2",
"email": "user2@gmail.com"
}
];
const sendEmailToUser = async (user) => {
const data = {
from: 'example@from.com',
to: 'example@reciever.com',
subject: 'Sample subject',
html: 'await email()'
};
await mailgun.messages().send(data);
};
(async () => {
const sendEmailPromises = [];
for(const user of users) {
// Start sending all emails
sendEmailPromises.push(sendEmailToUser(user));
}
// Wait for all emails to be sent
await Promise.all(sendEmailPromises);
// Do something
})()
答案 1 :(得分:0)
假设send
函数为async
并返回一个promise:
async function sendMail(){
const myRecipients = [
{
"name": "User 1",
"email": "user1@gmail.com"
},
{
"name": "user 2",
"email": "user2@gmail.com"
}
]
const fromAddress = "my@email.address"
// map our recipient array to the message format expected by `send`
const myMessages = myRecipients.map(r => ({
from: fromAddress,
to: r.email,
subject: "somesubject",
html: "some html"
}))
// map our messages to a bunch of "in-flight" promises
const promises = myMessages.map(m => mailgun.messages().send(m))
// wait for all the promises to complete
await Promise.all(promises)
}
答案 2 :(得分:-1)
您仍然必须迭代数据结构。
var users = [
{
"name": "User 1",
"email": "user1@gmail.com"
},
{
"name": "user 2",
"email": "user2@gmail.com"
}
];
users.forEach(function(user){
name = user.name;
email = user.email;
var data = {
from: 'example@from.com',
to: email,
subject: 'Sample subject',
html: await email(),
}
await mailgun.messages().send(data);
});
答案 3 :(得分:-2)
使用数组映射
我不知道打字稿。
您可以获得所有类似的元素
对于ES6
select p.product_id, c.category_id, p.name, c.description
from category_product cp join
product p
on p.product_id = cp.product_id join
category c
on c.category_id = cp.category_id;