Wysyłasz wiadomości e-mail w Node.js? [Zamknięte]

291

Niedawno zacząłem programować mój pierwszy node.js. Odkryłem jednak, że nie mogę utworzyć formularza kontaktowego, który wysyła bezpośrednio na moją wiadomość e-mail, ponieważ nie mogę znaleźć żadnych modułów z węzła, które mogłyby wysyłać wiadomości e-mail.

Czy ktoś wie o bibliotece e-mailowej node.js lub przykładowym skrypcie formularza kontaktowego?

NycCompSci
źródło
Zamówienie: bezpłatne wiadomości e-mail 62000 AWS-SES dla aplikacji ec2.
Harvey,

Odpowiedzi:

142

Węzeł-e-mail-szablony to znacznie lepsza opcja: https://github.com/niftylettuce/node-email-templates

ma także obsługę systemu Windows

JimBastard
źródło
1
To naprawdę pomaga doktorom wyjaśnić.
NycCompSci,
4
github.com/marak/node_mailer jest przestarzały. Powinien użyć tego github.com/andris9/Nodemailer
user470370
7
to dlatego, że jego nodemailer.com teraz używam go w moim projekcie, działa dobrze, nodejitsu nie miało problemów z wysyłaniem poczty przez serwery smtp gmail.
jascha
2
W ciągu ostatnich dwóch dni spędziłem kilka godzin, próbując wstać node-email-templates. Chcę po prostu użyć go jako obiektu, który zainicjuję, a następnie użyję do wysłania. Nie mogę go uruchomić. Poddawać się.
jcollum
Samouczek okazał się cenny (Nodejs Gamil OAuth2) masashi-k.blogspot.com.au/2013/06/…
eddyparkinson
162

Nodemailer to w zasadzie moduł, który daje możliwość łatwego wysyłania wiadomości e-mail podczas programowania w Node.js. Istnieje kilka świetnych przykładów użycia modułu Nodemailer na stronie http://www.nodemailer.com/ . Pełne instrukcje dotyczące instalacji i korzystania z podstawowych funkcji Nodemailer znajdują się w tym linku.

Osobiście miałem problem z instalacją Nodemailer przy użyciu npm, więc właśnie pobrałem źródło. Istnieją instrukcje dotyczące instalacji npm i pobierania źródła.

Jest to bardzo prosty moduł do użycia i polecam go każdemu, kto chce wysyłać e-maile za pomocą Node.js. Powodzenia!

Eric Peterson
źródło
2
nodemailer działał na początku!
Capy
przetestowałem go zarówno z SMTP, jak i Amazon SES, działa dla mnie, zintegrowałem go z ramami ConnectedSets
Jean Vincent
proste, bez ciężkiej pracy przy konfiguracji. właśnie skopiowałem przykładowy kod, zmieniłem na moje informacje (przeczytaj o bezpiecznym SSL) i po prostu działało. idealne dla prostego nadawcy e-maila!
Teraz jest to projekt komercyjny, więc ostrzegam.
elliotrock
2
Ta odpowiedź powinna zawierać przykład
Abraham TS
65

Sprawdź emailjs

Po marnowaniu czasu na próbę zmuszenia nodemailer do pracy z dużymi załącznikami, znalazłem emailjs i od tamtej pory jest szczęśliwy.

Obsługuje wysyłanie plików przy użyciu normalnych obiektów File, a nie dużych buforów, jak wymaga nodemailer. Oznacza, że ​​możesz połączyć go z, na przykład, potężnym, aby przekazać załączniki z formularza HTML do programu pocztowego. Obsługuje także kolejkowanie.

Podsumowując, nie mam pojęcia, dlaczego nodejitsu ppl wybrał nodemailer, na którym oprze swoją wersję, emailjs jest po prostu znacznie bardziej zaawansowany.

silvio
źródło
3
Po dłuższym użytkowaniu musiałem rozwidlić go, aby rozwiązać problem: chyba że w procesie wysyłania poczty rzecz nie przetwarzałaby zdarzeń związanych z gniazdami, a więc zatrzymywała się po pewnym czasie bezczynności, ponieważ serwer zamyka połączenie, ale tam nic nie przetworzyło zdarzenia i nie zresetowało zmiennych wewnętrznych. Rozwidloną wersję można znaleźć tutaj: https://github.com/silvioster/emailjs . Ta wersja działa stabilnie już od dłuższego czasu bez żadnych przeciągnięć.
silvio,
18
zaktualizowałem poprzedni komentarz, oryginalny autor naprawił ten błąd i kilka innych, więc rozwidlenie nie jest już potrzebne. najnowsza wersja powinna znajdować się na stronie https://github.com/eleith/emailjs
silvio
1
nodemailer obsługuje również strumienie załączników, nie tylko „ogromne bufory”
JoshuaDavid
57

Wypełnij kod, aby wysłać e-mail za pomocą modułu nodemailer

var mailer = require("nodemailer");

// Use Smtp Protocol to send Email
var smtpTransport = mailer.createTransport("SMTP",{
    service: "Gmail",
    auth: {
        user: "[email protected]",
        pass: "gmail_password"
    }
});

var mail = {
    from: "Yashwant Chavan <[email protected]>",
    to: "[email protected]",
    subject: "Send Email Using Node.js",
    text: "Node.js New world for me",
    html: "<b>Node.js New world for me</b>"
}

smtpTransport.sendMail(mail, function(error, response){
    if(error){
        console.log(error);
    }else{
        console.log("Message sent: " + response.message);
    }

    smtpTransport.close();
});
Vicky
źródło
4
Znalazłem Nodemailer sposób łatwiejszy w użyciu niż node-email-templates. Może to dlatego, że właśnie próbowałem wysłać zwykły e-mail / zwykły e-mail HTML, ale uznałem, że node-email-templatespotrzebowałem o wiele więcej konfiguracji, podczas gdy Nodemailerdziałałem dosłownie 2 minuty.
JVG
4
Inny niż Gmail? Jak możemy skonfigurować nasz własny serwer smtp?
Balaji Boggaram Ramanarayan
1
Otrzymuję ten błąd po kompilacji z WebPacka: TypeError: Cannot create property 'mailer' on string 'SMTP' at new Mail. Poszedłem do stanowisk takich jak ta , a następnie na tej stronie , ale jeszcze stracone.
user1063287,
2
@ user1063287 Wystarczy usunąć parametr „SMTP”
Bojan Radivojevic Bomber
1
Pamiętaj, że nie możesz zmienić adresu z niczego na inny niż własny adres e-mail użyty do uwierzytelnienia. Gmail wymusza adres z tego adresu, aby mógł potwierdzić uprawnienia nadawcy.
Nicholas Mordecai,
25

@ Przyjęta odpowiedź JimBastarda wydaje się być przestarzała, spojrzałem i że lib mailera nie został dotknięty przez ponad 7 miesięcy, ma kilka błędów na liście i nie jest już zarejestrowany w npm.

nodemailer z pewnością wygląda na najlepszą opcję, jednak adres URL podany w innych odpowiedziach w tym wątku to 404'ing.

nodemailer twierdzi, że obsługuje łatwe wtyczki do Gmaila, Hotmaila itp., a także ma naprawdę piękną dokumentację.

Dean Rather
źródło
9

Zawsze możesz użyć AlphaMail ( ujawnienie: jestem jednym z programistów za tym ).

Wystarczy zainstalować z NPM :

npm install alphamail

Załóż konto AlphaMail. Zdobądź token, a następnie możesz rozpocząć wysyłanie za pomocą usługi AlphaMail.

var alphamail = require('alphamail');

var emailService = new alphamail.EmailService()
    .setServiceUrl('http://api.amail.io/v1/')
    .setApiToken('YOUR-ACCOUNT-API-TOKEN-HERE');

var person = {
    id: 1234,
    userName: "jdoe75",
    name: {
        first: "John",
        last: "Doe"
    },
    dateOfBirth: 1975
};

emailService.queue(new alphamail.EmailMessagePayload()
    .setProjectId(12345) // ID of your AlphaMail project (determines template, options, etc)
    .setSender(new alphamail.EmailContact("Sender Company Name", "[email protected]"))
    .setReceiver(new alphamail.EmailContact("John Doe", "[email protected]"))
    .setBodyObject(person) // Any serializable object
);

A w interfejsie GUI AlphaMail ( pulpit nawigacyjny ) będziesz mógł edytować szablon z wysłanymi danymi:

<html>
    <body>
        <b>Name:</b> <# payload.name.last " " payload.name.first #><br>
        <b>Date of Birth:</b> <# payload.dateOfBirth #><br>

        <# if (payload.id != null) { #>
            <a href="http://company.com/sign-up">Sign Up Free!</a>
        <# } else { #>
            <a href="http://company.com/login?username=<# urlencode(payload.userName) #>">Sign In</a>
        <# } #>
    </body>
</html>

Szablony są napisane w Comlang , jest to prosty język szablonów specjalnie zaprojektowany do wiadomości e-mail.

Robin Orheden
źródło
12
Alphamail jest teraz oficjalnie martwy. Bardzo niefortunne - zacząłem go używać właśnie z powodu tego postu. Życząc deweloperom wszystkiego najlepszego w kolejnym przedsięwzięciu.
masotime
3

npm ma kilka pakietów, ale żaden nie osiągnął jeszcze 1.0. Najlepsze typy z npm list mail:

email@0.2.2
mail@0.1.1
mailer@0.3.0
Ezku
źródło
2

Kampania jest kompleksowym rozwiązaniem do wysyłania e-maili w Węźle i ma bardzo prosty interfejs API.

Występujesz w ten sposób.

var client = require('campaign')({
  from: '[email protected]'
});

Aby wysyłać e-maile, możesz użyć Mandrill , który jest darmowy i niesamowity. Wystarczy ustawić klucz interfejsu API w następujący sposób:

process.env.MANDRILL_APIKEY = '<your api key>';

(jeśli chcesz wysyłać wiadomości e-mail za pośrednictwem innego dostawcy, sprawdź dokumenty)

Następnie, jeśli chcesz wysłać wiadomość e-mail, możesz to zrobić w następujący sposób:

client.sendString('<p>{{something}}</p>', {
  to: ['[email protected]', '[email protected]'],
  subject: 'Some Subject',
  preview': 'The first line',
  something: 'this is what replaces that thing in the template'
}, done);

Repozytorium GitHub ma dość obszerną dokumentację .

bevacqua
źródło