Nodemailer - 动态传输器
Nodemailer - dynamic transporter
我正在我的应用程序上创建一个 nodemailer,我想从用户将填写的输入字段动态发送电子邮件。例如。如果用户在表单输入电子邮件值上写:'test@test.com' 我想从 'test@test.com' 发送这封电子邮件,以便稍后我可以回复这个人并拥有所有历史记录电子邮件。
编辑
第 1 步:
使用您的个人数据填写网站上的表格。例如。我想给公司发邮件(姓名:josh,姓氏:murp,邮箱:josh22@domain.com)
第 2 步:
使用 fetch 将此 json 对象发送到 '/contactus/'
并使用 req.body
在控制台中记录
我得到这个对象:{ name: 'josh', surname: 'murp', email: 'josh22@domain.com' }
第 3 步:
我想以这种方式设置 Nodemailer:
let mailOptions = {
from: `${req.body.firstName} ${req.body.surname} <${req.body.email}>`, // sender address
to: "mymail@gmail.com", // list of receivers
subject: "hi", // Subject line
text: "Hello world", // plain text body
html: "<b>NodeJS Email Tutorial</b>" // html body
};
意思是。我想从 req.body.email
获取电子邮件,在现实生活中我想从 josh22@domain.com
获取电子邮件,但 Nodemailer 使用 TRANSPORTER 发送电子邮件。这意味着我正在从 在 transporter 中配置的电子邮件接收电子邮件
但我想从 JOSH
获取电子邮件
这个结果给我带来了一个问题。
当我从我的帐户(运输者)收到电子邮件时我无法回复这封邮件我需要找到谁在给我写信 会话历史记录 我没有通过我的网站发送的此会话的第一 电子邮件。
这里有个大问题:
如何设置动态转运器? 或者如何在 Node/express
中实现
let transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true, // true for 465, false for other ports
auth: {
user: keys.username, // generated ethereal user
pass: keys.password // generated ethereal password
}
});
我整天都在网上寻找这个答案,但没有结果。
因此您可以简单地将 input field value
分配给 global
对象。
例如,global.email = req.body.email
,
并且可以在您的 nodemailer 配置中使用。
let transporter = nodeMailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
user: global.email || "myadress@gmail.com",
pass: "mypassword"
}
});
您想知道如何发送电子邮件吗?
您将无法使用他们的电子邮件地址创建 transporter
,因为您将无法以他们的身份登录。
let transporter = nodeMailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
user: "myadress@gmail.com",
pass: "mypassword"
}
});
let mailOptions = {
from: `${req.body.firstName} ${req.body.surname} <${req.body.email}>`, // sender address
to: "mymail@gmail.com", // list of receivers
subject: "hi", // Subject line
text: "Hello world", // plain text body
html: "<b>NodeJS Email Tutorial</b>" // html body
};
transporter.sendMail(mailOptions, function (err, info) {
if (err) {
throw err
}
console.log(info)
})
回答你关于
的问题
how to implement this in Node/express
即使您将他的密码传递给 req.body.password
,在您的平台上注册的用户也可能很难收到他自己的电子邮件,因为 he/she 必须转 在 Less secure app access 这是一个 gmail 帐户,我什至不知道其他电子邮件服务是如何做的。
但我会建议您设置一个电子邮件,您希望注册用户从您或任何管理员(创建的电子邮件的所有者)那里收到电子邮件,然后您可以设置帐户并提供登录凭据(电子邮件和密码)在你的
auth: {
user: 'mymail@gmail.com',
pass: 'password_you_created'
}
之后您必须 开启 您的 Less secure app access,否则您的电子邮件将无法通过。
您可以试试下面的例子:
{
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'mymail@gmail.com',
pass: 'password_you_created'
}
});
let mailOptions = {
from: 'mymail@gmail.com',
to: req.body.email,
subject: "hi", // Subject line
text: "Hello world", // plain text body
html: "<b>NodeJS Email Tutorial</b>" // html body
};
transporter.sendMail(mailOptions, (error, info)=>{
if (error) {
console.log(error);
} else {
console.log('Email sent');
}
});
res.json({success: 'whatever message you plan on writing'});
}
希望对您有所帮助。
通过阅读你的问题和所有回复我了解到,你想从用户的电子邮件地址向你的帐户发送一封电子邮件,方法是仅询问用户,他的用户名,你不想询问 his/her 密码,使用 nodemailer,从用户帐户发送电子邮件的目的是,您希望收到通过您的网站发送的对话的第一封电子邮件。
所以,@Freestyle09,你不能使用 nodemailer 从任何电子邮件帐户发送电子邮件,除非你提供了该电子邮件帐户的 username
和 password
,并且你不会有用户的 password
正如你所说,你不想询问用户的密码。
所以,我建议您的替代解决方案是用这种方式解决您的问题
var mailData = {
from: 'another.your.email@company.com',
to: 'mymail@gmail.com',
cc:`${req.body.firstName} ${req.body.surname} <${req.body.email}>`//josh22@domain.com
subject: 'Message title',
text: 'This request has been generated on behalf of josh ...... all other
text here',
html: 'HTML version of the message'
};
在 cc
列表中添加用户名后,您将在对话中包含该用户,否则无法使用 nodemailer 从具有密码的电子邮件地址发送电子邮件。你需要寻找一些替代解决方案
提示:(问题作者)
一个提示,我已经用 gmail 提供商测试了这个,但是当我有两个不同的提供商(来自:我的电子邮件,抄送:其他电子邮件)时,回复消息会转到我的电子邮件,但是当我有来自和抄送完全相同的提供者 它有效!我收到消息,客户也收到消息,我可以回复客户并拥有所有对话历史记录。
我正在我的应用程序上创建一个 nodemailer,我想从用户将填写的输入字段动态发送电子邮件。例如。如果用户在表单输入电子邮件值上写:'test@test.com' 我想从 'test@test.com' 发送这封电子邮件,以便稍后我可以回复这个人并拥有所有历史记录电子邮件。
编辑
第 1 步:
使用您的个人数据填写网站上的表格。例如。我想给公司发邮件(姓名:josh,姓氏:murp,邮箱:josh22@domain.com)
第 2 步:
使用 fetch 将此 json 对象发送到 '/contactus/'
并使用 req.body
在控制台中记录
我得到这个对象:{ name: 'josh', surname: 'murp', email: 'josh22@domain.com' }
第 3 步:
我想以这种方式设置 Nodemailer:
let mailOptions = {
from: `${req.body.firstName} ${req.body.surname} <${req.body.email}>`, // sender address
to: "mymail@gmail.com", // list of receivers
subject: "hi", // Subject line
text: "Hello world", // plain text body
html: "<b>NodeJS Email Tutorial</b>" // html body
};
意思是。我想从 req.body.email
获取电子邮件,在现实生活中我想从 josh22@domain.com
获取电子邮件,但 Nodemailer 使用 TRANSPORTER 发送电子邮件。这意味着我正在从 在 transporter 中配置的电子邮件接收电子邮件
但我想从 JOSH
这个结果给我带来了一个问题。
当我从我的帐户(运输者)收到电子邮件时我无法回复这封邮件我需要找到谁在给我写信 会话历史记录 我没有通过我的网站发送的此会话的第一 电子邮件。
这里有个大问题:
如何设置动态转运器? 或者如何在 Node/express
中实现let transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true, // true for 465, false for other ports
auth: {
user: keys.username, // generated ethereal user
pass: keys.password // generated ethereal password
}
});
我整天都在网上寻找这个答案,但没有结果。
因此您可以简单地将 input field value
分配给 global
对象。
例如,global.email = req.body.email
,
并且可以在您的 nodemailer 配置中使用。
let transporter = nodeMailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
user: global.email || "myadress@gmail.com",
pass: "mypassword"
}
});
您想知道如何发送电子邮件吗?
您将无法使用他们的电子邮件地址创建 transporter
,因为您将无法以他们的身份登录。
let transporter = nodeMailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
user: "myadress@gmail.com",
pass: "mypassword"
}
});
let mailOptions = {
from: `${req.body.firstName} ${req.body.surname} <${req.body.email}>`, // sender address
to: "mymail@gmail.com", // list of receivers
subject: "hi", // Subject line
text: "Hello world", // plain text body
html: "<b>NodeJS Email Tutorial</b>" // html body
};
transporter.sendMail(mailOptions, function (err, info) {
if (err) {
throw err
}
console.log(info)
})
回答你关于
的问题how to implement this in Node/express
即使您将他的密码传递给 req.body.password
,在您的平台上注册的用户也可能很难收到他自己的电子邮件,因为 he/she 必须转 在 Less secure app access 这是一个 gmail 帐户,我什至不知道其他电子邮件服务是如何做的。
但我会建议您设置一个电子邮件,您希望注册用户从您或任何管理员(创建的电子邮件的所有者)那里收到电子邮件,然后您可以设置帐户并提供登录凭据(电子邮件和密码)在你的
auth: {
user: 'mymail@gmail.com',
pass: 'password_you_created'
}
之后您必须 开启 您的 Less secure app access,否则您的电子邮件将无法通过。
您可以试试下面的例子:
{
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'mymail@gmail.com',
pass: 'password_you_created'
}
});
let mailOptions = {
from: 'mymail@gmail.com',
to: req.body.email,
subject: "hi", // Subject line
text: "Hello world", // plain text body
html: "<b>NodeJS Email Tutorial</b>" // html body
};
transporter.sendMail(mailOptions, (error, info)=>{
if (error) {
console.log(error);
} else {
console.log('Email sent');
}
});
res.json({success: 'whatever message you plan on writing'});
}
希望对您有所帮助。
通过阅读你的问题和所有回复我了解到,你想从用户的电子邮件地址向你的帐户发送一封电子邮件,方法是仅询问用户,他的用户名,你不想询问 his/her 密码,使用 nodemailer,从用户帐户发送电子邮件的目的是,您希望收到通过您的网站发送的对话的第一封电子邮件。
所以,@Freestyle09,你不能使用 nodemailer 从任何电子邮件帐户发送电子邮件,除非你提供了该电子邮件帐户的 username
和 password
,并且你不会有用户的 password
正如你所说,你不想询问用户的密码。
所以,我建议您的替代解决方案是用这种方式解决您的问题
var mailData = {
from: 'another.your.email@company.com',
to: 'mymail@gmail.com',
cc:`${req.body.firstName} ${req.body.surname} <${req.body.email}>`//josh22@domain.com
subject: 'Message title',
text: 'This request has been generated on behalf of josh ...... all other
text here',
html: 'HTML version of the message'
};
在 cc
列表中添加用户名后,您将在对话中包含该用户,否则无法使用 nodemailer 从具有密码的电子邮件地址发送电子邮件。你需要寻找一些替代解决方案
提示:(问题作者)
一个提示,我已经用 gmail 提供商测试了这个,但是当我有两个不同的提供商(来自:我的电子邮件,抄送:其他电子邮件)时,回复消息会转到我的电子邮件,但是当我有来自和抄送完全相同的提供者 它有效!我收到消息,客户也收到消息,我可以回复客户并拥有所有对话历史记录。