Ich versuche, nodemailer zu verwenden, um ein Kontaktformular mit NodeJS zu implementieren, aber es funktioniert nur auf lokaler Ebene, es funktioniert nicht auf einem Remote-Server ...
Meine Fehlermeldung:
[website.fr-11 (out) 2013-11-09T15:40:26] { [AuthError: Invalid login - 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbvlX
[website.fr-11 (out) 2013-11-09T15:40:26] 534-5.7.14 V-dFQLgb7aRCYApxlOBuha5ESrQEbRXK0iVtOgBoYeARpm3cLZuUS_86kK7yPis7in3dGC
[website.fr-11 (out) 2013-11-09T15:40:26] 534-5.7.14 N1sqhr3D2IYxHAN3m7QLJGukwPSZVGyhz4nHUXv_ldo9QfqRydPhSvFp9lnev3YQryM5TX
[website.fr-11 (out) 2013-11-09T15:40:26] 534-5.7.14 XL1LZuJL7zCT5dywMVQyWqqg9_TCwbLonJnpezfBLvZwUyersknTP7L-VAAL6rhddMmp_r
[website.fr-11 (out) 2013-11-09T15:40:26] 534-5.7.14 A_5pRpA> Please log in via your web browser and then try again.
[website.fr-11 (out) 2013-11-09T15:40:26] 534-5.7.14 Learn more at https://support.google.com/mail/bin/answer.py?answer=787
[website.fr-11 (out) 2013-11-09T15:40:26] 534 5.7.14 54 fr4sm15630311wib.0 - gsmtp]
[website.fr-11 (out) 2013-11-09T15:40:26] name: 'AuthError',
[website.fr-11 (out) 2013-11-09T15:40:26] data: '534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbvlX\r\n534-5.7.14 V-dFQLgb7aRCYApxlOBuha5ESrQEbRXK0iVtOgBoYeARpm3cLZuUS_86kK7yPis7in3dGC\r\n534-5.7.14 N1sqhr3D2IYxHAN3m7QLJGukwPSZVGyhz4nHUXv_ldo9QfqRydPhSvFp9lnev3YQryM5TX\r\n534-5.7.14 XL1LZuJL7zCT5dywMVQyWqqg9_TCwbLonJnpezfBLvZwUyersknTP7L-VAAL6rhddMmp_r\r\n534-5.7.14 A_5pRpA> Please log in via your web browser and then try again.\r\n534-5.7.14 Learn more at https://support.google.com/mail/bin/answer.py?answer=787\r\n534 5.7.14 54 fr4sm15630311wib.0 - gsmtp',
[website.fr-11 (out) 2013-11-09T15:40:26] stage: 'auth' }
Mein Controller:
exports.contact = function(req, res){
var name = req.body.name;
var from = req.body.from;
var message = req.body.message;
var to = '*******@gmail.com';
var smtpTransport = nodemailer.createTransport("SMTP",{
service: "Gmail",
auth: {
user: "******@gmail.com",
pass: "*****"
}
});
var mailOptions = {
from: from,
to: to,
subject: name+' | new message !',
text: message
}
smtpTransport.sendMail(mailOptions, function(error, response){
if(error){
console.log(error);
}else{
res.redirect('/');
}
});
}
javascript
node.js
nodemailer
tonymx227
quelle
quelle
Antworten:
Ich habe dieses Problem gelöst, indem ich zur folgenden URL gegangen bin (während ich mit dem Konto, von dem ich E-Mails senden möchte, mit Google verbunden bin):
https://www.google.com/settings/security/lesssecureapps
Dort habe ich weniger sichere Apps aktiviert.
Getan
quelle
Siehe den offiziellen Leitfaden von nodemailer zum Verbinden von Google Mail:
https://community.nodemailer.com/using-gmail/
- -
Danach funktioniert es für mich:
quelle
Einfache Lösung:
Schritt 1:
Gehen Sie hier https://myaccount.google.com/lesssecureapps und aktivieren Sie weniger sichere Apps. Wenn dies nicht funktioniert, dann
Schritt 2
Gehen Sie hier https://accounts.google.com/DisplayUnlockCaptcha und aktivieren / fahren Sie fort und versuchen Sie es dann.
Für mich hat Schritt 1 alleine nicht funktioniert, also musste ich zu Schritt 2 gehen.
Ich habe auch versucht, das Nodemailer-SMTP-Transport-Paket zu entfernen, und zu meiner Überraschung funktioniert es. Aber als ich mein System neu startete, gab es den gleichen Fehler, also musste ich die weniger sichere App einschalten (ich habe sie nach meiner Arbeit deaktiviert).
dann habe ich es zum spaß einfach mit off (weniger sichere app) ausprobiert und vola es hat wieder funktioniert!
quelle
Sie sollten ein XOAuth2-Token verwenden , um eine Verbindung zu Google Mail herzustellen . Keine Sorge, Nodemailer weiß das schon:
Sie müssen zur Google Cloud Console gehen , um Ihre App zu registrieren. Anschließend müssen Sie Zugriffstoken für die Konten abrufen, die Sie verwenden möchten. Sie können dafür passportjs verwenden .
So sieht es in meinem Code aus:
quelle
passport.authorize
ähnelt dem Beispiel,passport.authenticate
dass nicht versucht wird, die aktuelle Sitzung zu aktualisieren. Sie müssen bestehen,callbackURL
da Google nach dem OAuth-Handshake wissen muss, wo der Nutzer umgeleitet werden muss, damit der Handshake abgeschlossen wird.Ich hatte das gleiche Problem. Das Zulassen von "weniger sicheren Apps" in meinen Google-Sicherheitseinstellungen hat funktioniert!
quelle
Hat gut funktioniert:
1- Nodemailer installieren , Paket falls nicht installiert ( cmd eingeben ):
npm install nodemailer
2- Gehen Sie zu https://myaccount.google.com/lesssecureapps und aktivieren Sie Weniger sichere Apps zulassen .
3- Code schreiben:
4- viel Spaß!
quelle
Das gleiche Problem ist mir auch passiert. Ich habe mein System auf localhost getestet und dann auf dem Server (der sich in einem anderen Land befindet) bereitgestellt. Als ich das System auf einem Produktionsserver ausprobierte, sah ich diesen Fehler. Ich habe versucht, dies zu beheben:
quelle
Ich arbeite auf diese Weise mit Port und Sicherheit (ich hatte Probleme beim Senden von E-Mails aus Google Mail mit PHP ohne Sicherheitseinstellungen).
Ich hoffe, jemand wird helfen.
Alle Konfigurationen sind hier aufgelistet (einschließlich Beispiele).
quelle
Keine der oben genannten Lösungen hat bei mir funktioniert. Ich habe den Code verwendet, der in der Dokumentation von NodeMailer vorhanden ist . Es sieht aus wie das:
quelle
Deaktivieren Sie Captchas in Ihrem Google Mail-Konto. wird wahrscheinlich basierend auf der IP-Adresse des Anforderers ausgelöst. Siehe: So verwenden Sie GMail als kostenlosen SMTP-Server und überwinden Captcha
quelle
Ich fand, dass die einfachste Methode, die in diesem Artikel in Greg Ts Antwort beschrieben wird , darin bestand, ein App-Passwort zu erstellen, das nach dem Aktivieren von 2FA für das Konto verfügbar ist.
myaccount.google.com> Anmelden & Sicherheit> Anmelden bei Google> App-Passwörter
Dadurch erhalten Sie ein alternatives Kennwort für das Konto. Anschließend konfigurieren Sie nodemailer einfach als normalen SMTP-Dienst.
Obwohl Google Oauth2 als beste Option empfiehlt, ist diese Methode einfach und wurde in dieser Frage noch nicht erwähnt.
Zusätzlicher Tipp: Ich habe auch festgestellt, dass Sie Ihren App-Namen zur "Von" -Adresse hinzufügen können und GMail ihn nicht nur durch die Konto-E-Mail ersetzt, wie dies der Fall ist, wenn Sie versuchen, eine andere Adresse zu verwenden. dh.
quelle
Es wird mithilfe des
nodemailer-smtp-transport
Moduls in createTransport behoben.quelle
Wenn Sie Express verwenden,
express-mailer
verpackt es sichnodemailer
sehr gut und ist sehr einfach zu bedienen:quelle
Ihr gesamter Code ist in Ordnung, nur die verbleibenden Dinge gehen Sie einfach zum Link https://myaccount.google.com/security
Wenn Sie weiter nach unten scrollen, werden Sie feststellen, dass weniger sichere Apps zulässig sind: EIN und weiter EIN, Sie werden keinen Fehler finden.
quelle
Fügen Sie einfach "Host" hinzu, es wird funktionieren.
Aktivieren Sie dann "lesssecureapps", indem Sie auf den folgenden Link klicken
https://myaccount.google.com/lesssecureapps
quelle
Aus irgendeinem Grund funktionierte es nicht einmal für mich, selbst eine weniger sichere App-Konfiguration zuzulassen. Ich musste einen weiteren Schritt ausführen, der die IMAP-Konfiguration aktiviert:
Auf der Google-Hilfeseite: https://support.google.com/mail/answer/7126229?p=WebLoginRequired&visit_id=1-636691283281086184-1917832285&rd=3#cantsignin
quelle
Sie müssen den SecureConnection-Typ in Ihren Code einfügen.
quelle
Ich habe eine alte Version von nodemailer 0.4.1 verwendet und hatte dieses Problem. Ich habe auf 0.5.15 aktualisiert und jetzt funktioniert alles einwandfrei.
Package package.json, um Änderungen dann widerzuspiegeln
quelle
Nehmen Sie einfach an diesen teil: 1- Die Google Mail-Authentifizierung für das Zulassen von E-Mails auf niedriger Ebene wird nicht akzeptiert, bevor Sie Ihren Client-Browser neu starten. 2- Wenn Sie E-Mails mit nodemailer senden möchten und dort kein xouath2-Protokoll verwenden möchten, sollten Sie als sichere Verbindung schreiben: false wie unten
quelle
Installieren Sie zuerst den Nodemailer
in js Datei importieren
in meiner Bewerbung arbeiten
quelle