我正在尝试从网站向邮局 Mail.ru 发送电子邮件,但出现以下错误:
(node:25258) UnhandledPromiseRejectionWarning: Error: Missing credentials for "PLAIN"
at SMTPConnection._formatError (/home/user/server/node_modules/nodemailer/lib/smtp-connection/index.js:784:19)
at SMTPConnection.login (/home/user/server/node_modules/nodemailer/lib/smtp-connection/index.js:448:38)
at /home/user/server/node_modules/nodemailer/lib/smtp-transport/index.js:271:32
at SMTPConnection.<anonymous> (/home/user/server/node_modules/nodemailer/lib/smtp-connection/index.js:215:17)
at Object.onceWrapper (events.js:421:28)
at SMTPConnection.emit (events.js:315:20)
at SMTPConnection._actionEHLO (/home/user/server/node_modules/nodemailer/lib/smtp-connection/index.js:1313:14)
at SMTPConnection._processResponse (/home/user/server/node_modules/nodemailer/lib/smtp-connection/index.js:942:20)
at SMTPConnection._onData (/home/user/server/node_modules/nodemailer/lib/smtp-connection/index.js:749:14)
at TLSSocket.SMTPConnection._onSocketData (/home/user/server/node_modules/nodemailer/lib/smtp-connection/index.js:195:44)
(node:25258) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:25258) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
这是后端代码本身:
const express = require('express');
const nodemailer = require('nodemailer');
const Parser = require('body-parser');
const sqlite3 = require('sqlite3').verbose();
const server = express();
let path_services = ( __dirname + '/public/static/img/services/' );
let path_html = ( __dirname + '/public/index.html' );
let path_font = ( __dirname + '/public/static/font/' );
let path_css = ( __dirname + '/public/static/css/' );
let path_img = ( __dirname + '/public/static/img/' );
let path_js = ( __dirname + '/public/static/js/' );
let path_db = ( __dirname + '/Main.db' );
const Body_Parser = Parser.urlencoded({extended: false});
server.get('/', Body_Parser , function(request, response) {
response.sendFile(path_html);
});
server.post('/', Body_Parser, function(request, response) {
let db = new sqlite3.Database(path_db, sqlite3.OPEN_READWRITE, (err) => {
if(err) {
console.error(err.message);
}
console.log('Connected to Database!');
});
db.run('INSERT INTO Client(firstname, lastname, email, phone, message) VALUES($firstname, $lastname, $email, $phone, $message)', {
$firstname: request.body.ghostName,
$lastname: request.body.ghostSurname,
$email: request.body.ghostEmail,
$phone: request.body.ghostPhone,
$message: request.body.ghostMessage
}, function(err) {
if(err) {
console.log(err.message);
}
console.log('Good!');
response.end('Ok!');
});
db.close();
let testEmailAccount = nodemailer.createTestAccount();
let transporter = nodemailer.createTransport({
service: 'email',
host: 'smtp.ethereal.email',
port: 587,
secure: false,
auth: {
type: "login", // default
user: testEmailAccount.user,
pass: testEmailAccount.pass
}
});
let result = transporter.sendMail({
from: '"Node js" <nodejs@example.com>',
to: "chrome_777111777@mail.ru",
subject: "Message from Node js",
text: "This message was sent from Node js server.",
html: "This <i>message</i> was sent from <strong>Node js</strong> server."
});
console.log(result);
});
server.use(express.static (path_services) );
server.use(express.static (path_font) );
server.use(express.static (path_css) );
server.use(express.static (path_img) );
server.use(express.static (path_js) );
server.listen(8000);
我向你寻求帮助,因为我已经访问了大量的网站(从官方文档开始,到很多不熟悉的论坛结束),但是无论我走到哪里,都说要向Gmail发送电子邮件,关于发送电子邮件到电子邮件仅在文档中和其他几个从文档中复制信息的站点上说。如果您提供帮助,我将不胜感激!
nodemailer.createTestAccount
是一个异步函数,这意味着,你只需要像这样把await关键字放在它的前面:
let testEmailAccount = await nodemailer.createTestAccount();
否则testEmailAccount
是一个承诺,testEmailAccount.user
和testEmailAccount
结果是undefined
。
在您的情况下,您还必须使 app.post 回调成为异步函数:
server.post('/', Body_Parser, async function(request, response) {
// ...
}