Javascript 节点发送器-动态传送装置

Javascript 节点发送器-动态传送装置,javascript,node.js,nodemailer,Javascript,Node.js,Nodemailer,我正在我的应用程序上创建一个NodeEmailer,我想从用户将填充的输入字段动态发送电子邮件。例如,如果用户在表单上写入输入电子邮件值:'test@test.com'我想从发送此电子邮件'test@test.com“所以以后我可以回答这个人,并拥有所有电子邮件的历史记录 编辑 第1步: 在网站上填写您的个人资料。例如,我想向公司发送电子邮件(姓名:josh,姓氏:murp,电子邮件:josh22@domain.com) 第二步: 使用fetch将此json对象发送到'/contactus/',

我正在我的应用程序上创建一个NodeEmailer,我想从用户将填充的输入字段动态发送电子邮件。例如,如果用户在表单上写入输入电子邮件值:'test@test.com'我想从发送此电子邮件'test@test.com“所以以后我可以回答这个人,并拥有所有电子邮件的历史记录

编辑

第1步:

在网站上填写您的个人资料。例如,我想向公司发送电子邮件(姓名:josh,姓氏:murp,电子邮件:josh22@domain.com)

第二步:

使用fetch将此json对象发送到
'/contactus/'
,并使用
req.body
我收到了这个obj:
{姓名:'josh',姓氏:'murp',电子邮件:'josh22@domain.com“}

第三步:

我想以这种方式设置NodeEmailer:

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
      };

我整天都在网上寻找这个答案,但没有结果。

所以你可以简单地将
输入字段值分配给
全局对象

例如,
global.email=req.body.email

并且可以在您的NodeEmailer配置中使用

let transporter = nodeMailer.createTransport({
 host: "smtp.gmail.com",
 port: 465,
 secure: true,
 auth: {
   user: global.email || "myadress@gmail.com",
   pass: "mypassword"
 }
});

你想知道如何发送电子邮件吗

您将无法使用他们的电子邮件地址创建
传送者
,因为您将无法以他们的身份登录

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)
})
let transporter=nodeEmailer.createTransport({
主机:“smtp.gmail.com”,
港口:465,
安全:是的,
认证:{
用户:“myadress@gmail.com",
通行证:“我的密码”
}
});
让邮件选项={
发件人:`${req.body.firstName}${req.body.names}`,//发件人地址
至:mymail@gmail.com“,//接收者列表
主题:“嗨”//主题行
text:“Hello world”,//纯文本正文
html:“NodeJS电子邮件教程”//html正文
};
transporter.sendMail(邮件选项,函数(错误,信息){
如果(错误){
失误
}
控制台日志(信息)
})

回答您关于

如何在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
    }
  });
对于在您的平台上注册的用户来说,即使您已将其密码传递到
req.body.password
,也可能很难从自己那里获得电子邮件,因为他/她必须打开gmail帐户,我甚至不知道其他电子邮件服务是如何做到的

但我会建议你设置一封电子邮件,让注册用户从你或管理员(电子邮件所有者)那里获得电子邮件,然后你可以设置帐户并在你的帐户中提供登录凭据(电子邮件和密码)

auth: {
        user: 'mymail@gmail.com',
        pass: 'password_you_created'
    }
之后,你必须打开你的
,否则你的电子邮件将无法通过

您可以尝试以下示例:

{
    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'});
}
{
让transporter=nodeEmailer.createTransport({
服务:“gmail”,
认证:{
用户:'mymail@gmail.com',
通过:“您创建的密码”
}
});
让邮件选项={
发件人:'mymail@gmail.com',
发送至:req.body.email,
主题:“嗨”//主题行
text:“Hello world”,//纯文本正文
html:“NodeJS电子邮件教程”//html正文
};
transporter.sendMail(邮件选项,(错误,信息)=>{
如果(错误){
console.log(错误);
}否则{
console.log(“已发送电子邮件”);
}
}); 
res.json({success:'您计划编写的任何消息'});
}

我希望这足够有帮助。

通过阅读您的问题和所有回复,我了解到,您希望通过询问用户的电子邮件地址向您的帐户发送电子邮件,仅询问其用户名,而不希望使用nodeEmailer询问其密码,从用户帐户发送电子邮件的目的是,您希望通过您的网站发送对话的第一封电子邮件

因此,@Freestyle09,除非您提供了该电子邮件帐户的
用户名
密码
,否则您不能使用nodemailer从任何电子邮件帐户发送电子邮件,并且您不会拥有用户的
密码
,正如您所说的,您不想询问用户密码

所以,我推荐的另一种解决方案就是用这种方式解决问题

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'
};
var mailData={
来自:另一个,你的。email@company.com',
致:'mymail@gmail.com',
抄送:`${req.body.firstName}${req.body.lasname}`//josh22@domain.com
主题:'消息标题',
text:'此请求是代表josh生成的……所有其他
此处为“,
html:“邮件的html版本”
};
一旦您在
cc
列表中添加了用户名,您将在对话中包含该用户,否则无法使用nodeEmailer从电子邮件地址发送电子邮件。你需要寻找一些替代方案

提示:(问题作者)


有一个提示,我已经用gmail提供商测试过了,但是当我有两个不同的提供商(发件人:我的电子邮件,抄送:其他电子邮件)时,回复信息会转到我的电子邮件,但是当我有发件人和抄送确实是同一个提供商时,它就工作了!我也收到了消息,客户也收到了消息,我可以回复客户并拥有所有对话历史记录。

那么您已经从输入字段中提取了邮件?是的,我有所有信息,但不知道如何将此req.body.email传递到“from”valueSo,您希望通过仅询问用户的用户名,从用户的电子邮件地址向您的帐户发送电子邮件,而不希望使用NodeEmailer询问用户的密码。这就是你要问的吗?但我需要这封电子邮件的密码。。。您认为它是正确的??您可以将其分配给
密码
键,
global.password=req.body.password
您想从发送电子邮件给我'abhishek@domain.com'我想在我的电子邮件提供商中收到这封电子邮件,并从您的电子邮件中收到这封电子邮件,而不是从Global收到,但当您想通过那里时,req.body.password用户必须为我输入密码,但我不想要:)我只是想