web-dev-qa-db-fra.com

Nodemailer envoie un email sans transport smtp

J'essaie d'envoyer des emails via nodemailer sans transport SMTP. Alors j'ai fait ça:

var mail = require("nodemailer").mail;

mail({
    from: "Fred Foo ✔ <[email protected]>", // sender address
    to: "******@gmail.com", // list of receivers
    subject: "Hello ✔", // Subject line
    text: "Hello world ✔", // plaintext body
    html: "<b>Hello world ✔</b>" // html body
});

Mais quand je cours, je comprends ça:

> node sendmail.js
Queued message #1 from [email protected], to [email protected]
Retrieved message #1 from the queue, reolving gmail.com
gmail.com resolved to gmail-smtp-in.l.google.com for #1
Connecting to gmail-smtp-in.l.google.com:25 for message #1
Failed processing message #1
Message #1 requeued for 15 minutes
Closing connection to the server

Error: read ECONNRESET
    at errnoException (net.js:901:11)
    at TCP.onread (net.js:556:19)

Je suis sur Windows 7 32.

MODIFIER Cela semble être un bogue lié à Windows car cela a fonctionné sur linux

EDIT # 2

Sur le shell git, si je saisis telnet smtp.gmail 587, il est bloqué ici:

220 mx.google.com ESMTP f7...y.24 -gsmtp
16
Vinz243

D'après votre exemple de sortie, il semble que le mauvais port 25 se connecte, les ports smtp gmail ouverts sont 465 pour SSL et les 587 autres TLS. 

Nodemailer détecte la configuration correcte en fonction du domaine de messagerie. Dans votre exemple, vous n'avez pas défini l'objet de transport afin qu'il utilise le port 25 configuré par défaut. Pour changer le port, spécifiez dans les options le type.

Voici le petit exemple qui devrait fonctionner avec gmail:

var nodemailer = require('nodemailer');

// Create a SMTP transport object
var transport = nodemailer.createTransport("SMTP", {
        service: 'Gmail',
        auth: {
            user: "[email protected]",
            pass: "Nodemailer123"
        }
    });

console.log('SMTP Configured');

// Message object
var message = {

    // sender info
    from: 'Sender Name <[email protected]>',

    // Comma separated list of recipients
    to: '"Receiver Name" <[email protected]>',

    // Subject of the message
    subject: 'Nodemailer is unicode friendly ✔', 

    // plaintext body
    text: 'Hello to myself!',

    // HTML body
    html:'<p><b>Hello</b> to myself <img src="cid:note@node"/></p>'+
         '<p>Here\'s a nyan cat for you as an embedded attachment:<br/></p>'
};

console.log('Sending Mail');
transport.sendMail(message, function(error){
  if(error){
      console.log('Error occured');
      console.log(error.message);
      return;
  }
  console.log('Message sent successfully!');

  // if you don't want to use this transport object anymore, uncomment following line
  //transport.close(); // close the connection pool
});
12
Risto Novik

utilisez nodemailer 0.7.1.
si vous avez déjà installé nodemailer puis supprimez-le en

npm remove nodemailer

maintenant installez-le en

npm install [email protected]

le code suivant envoie un courrier sans connexion, mais cela ne fonctionnera qu'en environnement de production, cela ne fonctionnera pas localement

var mail = require("nodemailer").mail;

mail({
    from: "Fred Foo ✔ <[email protected]>", // sender address
    to: "[email protected], [email protected]", // list of receivers
    subject: "Hello ✔", // Subject line
    text: "Hello world ✔", // plaintext body
    html: "<b>Hello world ✔</b>" // html body
});
8
Rahul Soni

On dirait que la nodemailer actuelle n’a plus la possibilité d’envoyer du courrier sans smtp. Je recommanderais de jeter un coup d'oeil à la bibliothèque sendmail qui N'EST PAS besoin de smtp/auth pour envoyer un email. Cela vous donne une expérience similaire à l'utilisation de sendmail sous linux.

const sendmail = require('sendmail')();

sendmail({
  from: '[email protected]',
  to: '[email protected]',
  subject: 'Hello World',
  html: 'Hooray NodeJS!!!'
}, function (err, reply) {
  console.log(err && err.stack)
  console.dir(reply)
})

Vous pouvez également activer la variable silent pour la rendre moins explicite: const sendmail = require('sendmail')({silent: true});. Une chose à noter est que l'expéditeur ne peut pas être ces domaines qui ont DMARCpolicy like [email protected]

5
Leon li

il est probable que le pare-feu ou l'antivirus Windows empêche l'accès sortant . essayez d'activer les messages de débogage de nodemailer.

Activer le débogage

var nodemailer = require("nodemailer"),
  transport = nodemailer.createTransport('direct', {
    debug: true, //this!!!
  });

transport.sendMail({
    from: "Fred Foo ✔ <[email protected]>", // sender address
    to: "******@gmail.com", // list of receivers
    subject: "Hello ✔", // Subject line
    text: "Hello world ✔", // plaintext body
    html: "<b>Hello world ✔</b>" // html body
}, console.error);
4
vodolaz095

Cela semble être possible dans nodemailer. Pas sûr que ce ne soit pas là quand les autres réponses ont été fournies. Comme documenté ici: https://nodemailer.com/transports/sendmail/ .__, vous pouvez utiliser le sendmail intégré, s'il est disponible, pour l'envoi. J'ai testé cela pour mon propre usage et fonctionne bien. Il est évident que SMTP présente des avantages, mais il est faux de dire que ce n’est pas possible.

0
Brian F Leighty

quand vous le voulez, cela permet d'envoyer des mails . https://www.google.com/settings/security/lesssecureapps Celui-ci a fonctionné pour moi

0
pitu

Vous devez avoir un serveur SMTP, un serveur de messagerie qui transfère les courriels en votre nom. Donc, soit vous configurez votre propre serveur SMTP comme Haraka, soit vous fournissez des informations d’identification à Nodemailer pour vous connecter à un, par exemple. Gmail, MSN, Yahoo. Même si j’ai commencé à apprendre NodeJs et que j’essayais d’inclure une fonctionnalité d’e-mailing dans mon projet, c’était le même problème que je rencontrais.

0
dv3