J'essaie d'envoyer les données du formulaire que j'ai créé à mon compte Gmail. Lorsque je clique sur le bouton SOMMEbit, je reçois toujours la même erreur ... J'ai trouvé de nombreux problèmes concernant nodemailer, mais aucun ne semble identique. problème que je vis.
Bien sûr, j'ai déclaré mon clientId mais simplement supprimé pour ce poste.
TypeError: Cannot create property 'mailer' on string 'SMTP'
at Mail (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\nodemailer\lib\mailer\index.js:45:33)
at Object.module.exports.createTransport (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\nodemailer\lib\nodemailer.js:46:14)
at C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\src\app.js:39:26
at Layer.handle [as handle_request] (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\route.js:131:13)
at Route.dispatch (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:277:22
at Function.process_params (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:330:12)
at next (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:271:10)
at serveStatic (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\node_modules\serve-static\index.js:75:16)
at Layer.handle [as handle_request] (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:312:13)
at C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:280:7
at Function.process_params (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:330:12)
at next (C:\Users\snowr\Documents\dev\zorgkaartnl\zorgkaartnl\node_modules\express\lib\router\index.js:271:10)
c'est mon app.js:
// require modules
const express = require('express');
const app = express();
const pug = require('pug');
const fs = require('fs')
const bodyParser = require('body-parser');
const pg = require('pg');
const nodemailer = require('nodemailer');
const xoauth2 = require('xoauth2');
//set view engine and views
app.set('views', 'src/views');
app.set('view engine', 'pug');
app.use(bodyParser.urlencoded({extended: false}));
app.use(express.static('./resources/'));
//display index page
app.get('/', function ( req, res ){
console.log('Index is displayed on localhost');
res.render('index');
});
app.post('/zorginstelling/ziekenhuis-olvg-locatie-west-voorheen-sint-lucas-andreas-ziekenhuis-amsterdam-109428/waardeer', function (req, res) {
var mailOpts, smtpTrans;
console.log('form Word gepost')
//Setup Nodemailer transport, I chose gmail.
smtpTrans = nodemailer.createTransport('SMTP', {
service: 'Gmail',
auth: {
xoauth2: xoauth2.createXOAuth2Generator({
user: '[email protected]',
clientId: '-' ,
clientSecret: '-' ,
refreshToken: '-'
})
}
});
//Mail options
mailOpts = {
from: req.body.rating[name] + ' <' + req.body.rating[email][first] + '>',
to: '[email protected]',
subject: 'Test',
text: req.body.rating[comment] + req.body.rating[questions][behandeling] + req.body.rating[name]
};
smtpTrans.sendMail(mailOpts, function (error, response) {
//Email not sent
if (error) {
console.log('There was a problem')
}
//Yay!! Email sent
else {
console.log('Email sent!')
}
});
});
var server = app.listen(4000, function () {
console.log('Example app listening on port: ' + server.address().port);
});
Le nodemailer a été retravaillé, donc l'ancienne structure de code pourrait renvoyer une telle erreur . Essayez d'utiliser la structure suivante:
var xoauth2 = require('xoauth2');
smtpTrans = nodemailer.createTransport({
service: 'Gmail',
auth: {
xoauth2: xoauth2.createXOAuth2Generator({
user: '[email protected]',
//and other stuff
S'il vous plaît, vérifiez la ressource officielle pour plus de détails:
Le problème actuel Aujourd’hui, l’aide est le changement d’information plus rapidement, et Alexander était bon quand il a dit "nodemailer is retworked";
j'utilise cette ligne facile pour définir le transporteur:
var smtpTransport = nodemailer.createTransport("smtps://youruser%40gmail.com:"+encodeURIComponent('yourpass#123') + "@smtp.gmail.com:465");
je l'ai eu d'ici https://community.nodemailer.com/
J'ai eu le même problème. Le module 'nodemailer-smtp-transport' l'a résolu
var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');
var transport = nodemailer.createTransport(smtpTransport({
service: 'Gmail',
auth:{
xoauth2: xoauth2.createXOAuth2Generator({
user: '[email protected]',
//and other stuff
installer nodemailer-smtp-transport avec 'npm installer nodemailer-smtp-transport'
Cela fonctionne pour moi-
sendEmail: function(account, params) {
// create reusable transporter object using the default SMTP transport
var smtpTransport = nodemailer.createTransport({
service: 'Gmail', // sets automatically Host, port and connection security settings
auth: {
user: account.user,
pass: account.password
}
});
var toEmail = params.to[0];
for (var i = 1; i < params.to.length; i++) {
toEmail += ', ' + params.to[i];
}
// setup email data with unicode symbols
var mailOptions = {
from: params.from, // sender address
to: toEmail, // list of receivers
subject: params.subject, // Subject line
text: params.text, // plain text body
html: params.html, // html body
attachments: params.attachments
};
// send mail with defined transport object
smtpTransport.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log('Error while sending mail: ' + error);
} else {
console.log('Message sent: %s', info.messageId);
}
smtpTransport.close(); // shut down the connection pool, no more messages.
});
}
Notez que vous devrez activer les applications moins sécurisées de Google. Consultez la page https://myaccount.google.com/lesssecureapps . Une fois activé, actualisez la page uniquement pour vous assurer qu'elle est réellement activée (je l'ai activée en 4 tentatives).