Próbuję użyć Nodemailer do zaimplementowania formularza kontaktowego za pomocą NodeJS, ale działa tylko na lokalnym, nie działa na zdalnym serwerze ...
Mój komunikat o błędzie:
[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' }
Mój kontroler:
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
źródło
źródło
Odpowiedzi:
Rozwiązałem to, przechodząc do następującego adresu URL (podczas połączenia z Google z kontem, z którego chcę wysyłać pocztę):
https://www.google.com/settings/security/lesssecureapps
Tam włączyłem mniej bezpieczne aplikacje.
Gotowe
źródło
Zobacz oficjalny przewodnik firmy Nodemailer dotyczący łączenia się z Gmailem:
https://community.nodemailer.com/using-gmail/
-
Działa dla mnie po zrobieniu tego:
źródło
Łatwe rozwiązanie:
Krok 1:
przejdź tutaj https://myaccount.google.com/lesssecureapps i włącz dla mniej bezpiecznych aplikacji. Jeśli to nie zadziała, to
Krok 2
przejdź tutaj https://accounts.google.com/DisplayUnlockCaptcha i włącz / kontynuuj, a następnie spróbuj.
dla mnie sam krok 1 nie zadziałał, więc musiałem przejść do kroku 2.
próbowałem również usunąć pakiet nodemailer-smtp-transport i ku mojemu zaskoczeniu działa. ale kiedy ponownie uruchomiłem system, dostałem ten sam błąd, więc musiałem iść i włączyć mniej bezpieczną aplikację (wyłączyłem ją po pracy).
potem dla zabawy po prostu wypróbowałem to z wyłączoną (mniej bezpieczną aplikacją) i vola znowu zadziałało!
źródło
Należy użyć XOAuth2 żeton do łączenia się z Gmailem. Bez obaw, Nodemailer już o tym wie:
Aby zarejestrować swoją aplikację, musisz przejść do Google Cloud Console . Następnie musisz odzyskać tokeny dostępu dla kont, których chcesz używać. Możesz do tego użyć paszportjs .
Oto jak to wygląda w moim kodzie:
źródło
passport.authorize
jest podobny dopassport.authenticate
tego, że nie próbuje zaktualizować bieżącej sesji. Musisz przejść,callbackURL
ponieważ po uzgodnieniu OAuth Google musi wiedzieć, gdzie przekierować użytkownika, aby uzgadnianie zostało zakończone.Miałem ten sam problem. Zezwolenie na „mniej bezpieczne aplikacje” w moich ustawieniach zabezpieczeń Google sprawiło, że zadziałało!
źródło
Działa dobrze:
1- zainstaluj nodemailer , pakiet, jeśli nie jest zainstalowany (wpisz cmd):
npm install nodemailer
2- Wejdź na https://myaccount.google.com/lesssecureapps i włącz Zezwalaj na mniej bezpieczne aplikacje .
3- wpisz kod:
4- Baw się dobrze!
źródło
Mnie też przydarzył się ten sam problem. Przetestowałem swój system na hoście lokalnym, a następnie wdrożyłem go na serwer (który znajduje się w innym kraju), a następnie, gdy próbowałem system na serwerze produkcyjnym, zobaczyłem ten błąd. Próbowałem to naprawić:
źródło
U mnie działa w ten sposób, używając portu i zabezpieczeń (miałem problemy z wysyłaniem e-maili z Gmaila przy użyciu PHP bez ustawień zabezpieczeń)
Mam nadzieję, że komuś pomogę.
wszystkie konfiguracje są tutaj wymienione (w tym przykłady)
źródło
Żadne z powyższych rozwiązań nie zadziałało. Użyłem kodu, który istnieje w dokumentacji NodeMailer . To wygląda tak:
źródło
Spróbuj wyłączyć captcha na swoim koncie Gmail; prawdopodobnie jest uruchamiany na podstawie adresu IP żądającego. Zobacz: Jak używać Gmaila jako darmowego serwera SMTP i przezwyciężyć captcha
źródło
Odkryłem, że najprostszą metodą, opisaną w tym artykule wymienionym w odpowiedzi Grega T. , było utworzenie hasła do aplikacji, które jest dostępne po włączeniu 2FA dla konta.
myaccount.google.com> Logowanie i bezpieczeństwo> Logowanie do Google> Hasła do aplikacji
To daje alternatywne hasło do konta, a następnie konfigurujesz nodemailer jako normalną usługę SMTP.
Chociaż Google zaleca Oauth2 jako najlepszą opcję, ta metoda jest łatwa i nie została jeszcze wspomniana w tym pytaniu.
Dodatkowa wskazówka: odkryłem również, że możesz dodać nazwę swojej aplikacji do adresu „nadawcy”, a Gmail nie zastępuje go tylko adresem e-mail konta, jak ma to miejsce w przypadku próby użycia innego adresu. to znaczy.
źródło
Rozwiązuje się go za pomocą
nodemailer-smtp-transport
modułu wewnątrz createTransport.źródło
Jeśli używasz Expressu, bardzo ładnie się
express-mailer
owijanodemailer
i jest bardzo łatwy w użyciu:źródło
cały kod jest w porządku, tylko to, co zostało, to po prostu przejdź do linku https://myaccount.google.com/security
i przewijaj w dół, a znajdziesz Zezwalaj na mniej bezpieczne aplikacje: WŁĄCZ i pozostaw WŁĄCZ, nie znajdziesz żadnego błędu.
źródło
Po prostu dodaj „hosta”, to zadziała.
Następnie włącz „lesssecureapps”, klikając poniższy link
https://myaccount.google.com/lesssecureapps
źródło
Z jakiegoś powodu samo zezwolenie na mniej bezpieczną konfigurację aplikacji nie działało dla mnie, nawet w przypadku captcha. Musiałem zrobić kolejny krok, który włącza konfigurację IMAP:
Ze strony pomocy Google: https://support.google.com/mail/answer/7126229?p=WebLoginRequired&visit_id=1-636691283281086184-1917832285&rd=3#cantsignin
źródło
Musisz dodać typ secureConnection w swoim kodzie.
źródło
Używałem starej wersji Nodemailer 0.4.1 i miałem ten problem. Zaktualizowałem do wersji 0.5.15 i teraz wszystko działa dobrze.
Edytowano plik package.json, aby odzwierciedlić zmiany
źródło
Po prostu weź udział w tych: 1- Uwierzytelnianie Gmaila dla zezwalania na e-maile niskiego poziomu nie jest akceptowane przed ponownym uruchomieniem przeglądarki klienta 2- Jeśli chcesz wysyłać e-maile za pomocą nodemailer i nie chcesz tam używać protokołu xouath2, napisz jako bezpieczne połączenie: false jak poniżej
źródło
najpierw zainstaluj nodemailer
zaimportować do pliku js
pracuje w mojej aplikacji
źródło