javascript - Nodemailing 使用变量发送带有 Javascript Discord 机器人的电子邮件

标签 javascript discord

我正在尝试使用 Nodemailer 使 Discord 机器人根据信息向某些人发送电子邮件。我正在使用变量来选择向谁发送电子邮件。每当我尝试使用它时,它都无法发送电子邮件并说变量未定义。这是我的代码:

const Discord = require('discord.js');
const client = new Discord.Client();
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'user',
        pass: 'pass'
    }
});
var mailOptions = {
  from: 'someemail@gmail.com',
  to: firstname + "." + lastname + "@gmail.com",
  subject: 'Sending Email using Node.js',
  text: 'That was easy!'
};    
var firstname = "";
var lastname = "";
var chat = 0;
var placeholder = "";
client.on("message", message => {
    var prefix = '!';
if (message.content.startsWith(prefix + "chat") && chat == 0) {
    chat = chat + 1;
    message.channel.send("Welcome! I am Sabrina, a friendly chatbot. By the way, what is your first name?");    
} else if (message.content.startsWith(prefix + "chat") && chat == 1) {
    chat = chat + 1;
    placeholder = message.content;
    firstname = placeholder.replace("!chat ", "");
    message.channel.send("Very intresting name, " + firstname + ". 
    What is your last name?");
    transporter.sendMail(mailOptions, function(error, info){
    if (error) {
        console.log(error);
    } else {
        console.log('Email sent: ' + info.response);
    }
}   
});
}
}); 
client.login("Token")

最佳答案

var mailOptions = {
  from: 'someemail@gmail.com',
  to: firstname + "." + lastname + "@gmail.com",
  subject: 'Sending Email using Node.js',
  text: 'That was easy!'
};  

这部分在它被解析时被评估——在其余代码运行之前,所以在 firstnamelastname 被填充之前(或者甚至被初始化为 "").它不会随着这些变量的变化而动态更新。

既然您想从根本上动态构造 mailOptions,为什么不创建一个函数来实现呢?

// Traditional syntax
function getMailOptions(first, last) {
  return {
    from: 'someemail@gmail.com',
    to: first + "." + last + "@gmail.com",
    subject: 'Sending Email using Node.js',
    text: 'That was easy!'
  }
}

// Or, since you're using arrow functions..
const getMailOptions = (first, last) => ({
  from: 'someemail@gmail.com',
  to: first + "." + last + "@gmail.com",
  subject: 'Sending Email using Node.js',
  text: 'That was easy!'
});

现在你可以使用它了:

transporter.sendMail(getMailOptions(firstname, lastname), function(error, info){
  /* ... */

关于javascript - Nodemailing 使用变量发送带有 Javascript Discord 机器人的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53654411/

相关文章:

javascript - 表情符号、带有原始文本的文本区域和带有替换图标的文本字段

python - 为什么多个 on_message 事件不起作用?

c# - Discord.net UserUpdated 事件不会触发

javascript - 当所有人都断开连接时,如何删除临时语音 channel ?

python - 我将如何编写一个机器人,每当目标用户更改其自定义状态时,它都会向其所有者发送直接消息?

javascript - 为什么 jQuery 验证插件规则内的函数不返回 false?

javascript - rails redirect_to 格式 html 在 js 中发送响应

javascript - Firebase js库从非空数据库检索空数据

javascript - 如何通过鼠标悬停和鼠标移出来更改窗口状态?

javascript - 从 "presenceUpdate"事件中排除移动更新吗?