J'essaie d'obtenir nodemail et nodemail-mailgun pour envoyer un e-mail. (Finalement, les résultats de la soumission des formulaires).
J'ai essayé de rechercher sur SO ainsi que sur Google en général et je n'arrive pas à trouver quelqu'un avec le même problème.
La configuration:
router.post('/contact', function(req, res, next) {
console.log('Send Mail...');
nodemailerMailgun.sendMail({
from: "no-reply@airsafetynw.com",
to: 'john.s@airsafetynw.com', // An array if you have multiple recipients.
cc:'adam.f.wilkinson@gmail.com',
subject: 'Air Safety NW contact form',
//You can use "html:" to send HTML email content. It's magic!
html: '<b>From:</b></br>',
//You can use "text:" to send plain-text content. It's oldschool!
text: ""
}, (err, info) => {
if (err) {
console.log(`Error: ${err}`);
}
else {
res.send('Successful!')
}
});
});
La Route:
const nodemailer = require('nodemailer');
const mg = require('nodemailer-mailgun-transport'),
bodyParser = require('body-parser');
const auth = {
auth: {
api_key: 'REMOVED FOR SECURITY',
domain: 'REMOVED FOR SECURITY'
}
}
const nodemailerMailgun = nodemailer.createTransport(mg(auth));
L'erreur:
asnw> Erreur: TypeError: Impossible de lire la propriété 'id' non définie
POST / contact - - ms - -
J'ai supprimé TOUTES les variables js de mon modèle dans l'espoir que l'une d'elles était peut-être incorrecte, mais si je res.send ou console.log la req.body.variable au-dessus du .sendmail, elles fonctionnent très bien. Si quelqu'un sait où je peux chercher le 'id' pour que je puisse comprendre ce qui n'est pas défini, je pourrais peut-être aller de l'avant.
3 Réponses :
Vous n'avez pas besoin de nodemailer-mailgun-transport, nodemailer est capable d'envoyer le courrier tout seul.
voici le code que j'utilise pour envoyer des e-mails uniquement en utilisant nodemailer et cela fonctionne très bien pour moi.
const nodemailer = require('nodemailer')
const transferEmail_details = nodemailer.createTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true, // use TLS
auth: {
user: authAdmin@gmail.com,
pass: admin123
},
tls: {
// do not fail on invalid certs
rejectUnauthorized: false
}
})
var nodemailer_Option =
{
from: 'customer@gmail.com',
to: 'authAdmin@gmail.com',
subject: 'Complain',
text: 'abc' ,
html : '<h1>Hello</h1>'
}
transferEmail_details.sendMail(nodemailer_Option, function (err, info) {
if (err) {
console.log(err);
} else {
console.log(info , 'Message sent: ' );
}
});
Merci Saad mais j'essaye d'utiliser l'API et SMTP.
Saad, j'ai remarqué que j'avais une faute de frappe plus tôt. Je ne veux pas utiliser le SMTP via le service mailgun car je ne veux pas passer par toute la configuration du domaine. L'adresse e-mail cc dans l'itinéraire est strictement à mes fins de test. Je voulais juste utiliser l'API car je n'aurais pas à me soucier de toute la configuration supplémentaire qui va avec. Cependant, cela pourrait faire partie de mon problème. Pour l'instant, je vais utiliser google SMTP pendant que j'essaie de comprendre le reste.
Votre domaine d'authentification mailgun doit être de la forme sandboxbXXX.mailgun.org et non https://app.mailgun.com/app/sending/domains/sandboxbXXX.mailgun.org
La structure de votre variable DOMAIN pourrait être le problème.
Au lieu de définir la variable DOMAIN sur https://api.mailgun.net/v3/DOMAIN a>, définissez-le simplement sur DOMAIN
Par exemple, définissez-le sur < retourmg.website.org et non sur https://api.mailgun.net/v3/mg.website.org
Voir Impossible d'envoyer des e-mails via Mailgun via l'API ou smtp