我正在尝试在 Node.js 应用程序中使用 Nodemailer 通过 Gmail 发送电子邮件。但是,我遇到了身份验证问题,错误消息为“缺少‘PLAIN’的凭据”。我已经检查了我的代码和环境变量,一切似乎都是正确的。
// Import nodemailer module
import nodemailer from 'nodemailer';
// Create a transporter using Gmail SMTP
const transporter = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
user: process.env.ADDRESS,
pass: process.env.MAILING_SERVICE_APP_PASSWORD,
},
tls: {
rejectUnauthorized: false,
},
});
// Function to send an email
async function sendEmail(to: string, subject: string, text: string) {
// Email options
const mailOptions = {
from: process.env.ADDRESS,
to: to,
subject: subject,
text: text,
};
// Send email
return transporter.sendMail(mailOptions);
}
// Export the sendEmail function
export default sendEmail;
我已经仔细检查了我的环境变量,并且我已经为此 gmail 帐户设置了应用程序密码。但是,我仍然遇到同样的错误。有人可以帮助我确定 Nodemailer 设置的问题吗?
这是完整的错误消息:
[0] 2:49:04 PM - Found 0 errors. Watching for file changes.
[1] POST /register 200 149.764 ms - 475
[1] Error sending email: Error: Missing credentials for "PLAIN"
[1] at SMTPConnection._formatError (C:\Users\zsomb\OneDrive\Desktop\University\Projects\DataProcessing-BackEnd\node_modules\nodemailer\lib\smtp-connection\index.js:790:19)
[1] at SMTPConnection.login (C:\Users\zsomb\OneDrive\Desktop\University\Projects\DataProcessing-BackEnd\node_modules\nodemailer\lib\smtp-connection\index.js:444:38)
[1] at C:\Users\zsomb\OneDrive\Desktop\University\Projects\DataProcessing-BackEnd\node_modules\nodemailer\lib\smtp-transport\index.js:272:32
[1] at SMTPConnection.<anonymous> (C:\Users\zsomb\OneDrive\Desktop\University\Projects\DataProcessing-BackEnd\node_modules\nodemailer\lib\smtp-connection\index.js:213:17)
[1] at Object.onceWrapper (node:events:628:28)
[1] at SMTPConnection.emit (node:events:514:28)
[1] at SMTPConnection._actionEHLO (C:\Users\zsomb\OneDrive\Desktop\University\Projects\DataProcessing-BackEnd\node_modules\nodemailer\lib\smtp-connection\index.js:1347:14)
[1] at SMTPConnection._processResponse (C:\Users\zsomb\OneDrive\Desktop\University\Projects\DataProcessing-BackEnd\node_modules\nodemailer\lib\smtp-connection\index.js:969:20)
[1] at SMTPConnection._onData (C:\Users\zsomb\OneDrive\Desktop\University\Projects\DataProcessing-BackEnd\node_modules\nodemailer\lib\smtp-connection\index.js:755:14)
[1] at SMTPConnection._onSocketData (C:\Users\zsomb\OneDrive\Desktop\University\Projects\DataProcessing-BackEnd\node_modules\nodemailer\lib\smtp-connection\index.js:193:44) {
[1] code: 'EAUTH',
[1] command: 'API'
[1] }
这就是我正在使用的,唯一的区别是我认为的端口
const nodemailer = require("nodemailer");
// async..await is not allowed in global scope, must use a wrapper
async function main() {
// Generate test SMTP service account from ethereal.email
// Only needed if you don't have a real mail account for testing
let testAccount = await nodemailer.createTestAccount();
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: '[REDACTED]',
pass: '[Apps password redacted]',
},
});
// send mail with defined transport object
let info = await transporter.sendMail({
from: '"Linda Lawton " <[REDACTED]>', // sender address
to: "[REDACTED]", // list of receivers
subject: "Hello ✔", // Subject line
text: "Hello world?", // plain text body
html: "<b>Hello world?</b>", // html body
});
console.log("Message sent: %s", info.messageId);
// Preview only available when sending through an Ethereal account
console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
}
main().catch(console.error);