2013-07-23 8 views
11

Przeglądałem dokumentację interfejsu API i przewodnik po językach, ale nie widziałem nic na temat wysyłania wiadomości e-mail w aplikacji Dart. Sprawdziłem również to google groups post, ale jest dość stare według standardów Dart.Wysyłanie wiadomości e-mail SMTP w aplikacji Dart

Czy można to zrobić? Wiem, że zawsze mogę użyć klasy Process, aby wywołać programy zewnętrzne, ale wolałbym prawdziwe rozwiązanie Dart, jeśli takie istnieje.

Odpowiedz

17

Istnieje biblioteka o nazwie mailer, która wykonuje dokładnie to, o co prosiłeś: wysyła wiadomości e-mail.

Ustaw go jako zależność w swoim pubspec.yaml i uruchomić pub install:

dependencies: 
    mailer: any 

Podam prosty przykład za pomocą Gmaila na moim komputerze lokalnym Windows:

import 'package:mailer/mailer.dart'; 

main() { 
    var options = new GmailSmtpOptions() 
    ..username = '[email protected]' 
    ..password = 'my gmail password'; // If you use Google app-specific passwords, use one of those. 

    // As pointed by Justin in the comments, be careful what you store in the source code. 
    // Be extra careful what you check into a public repository. 
    // I'm merely giving the simplest example here. 

    // Right now only SMTP transport method is supported. 
    var transport = new SmtpTransport(options); 

    // Create the envelope to send. 
    var envelope = new Envelope() 
    ..from = '[email protected]' 
    ..fromName = 'Your company' 
    ..recipients = ['[email protected]', '[email protected]'] 
    ..subject = 'Your subject' 
    ..text = 'Here goes your body message'; 

    // Finally, send it! 
    transport.send(envelope) 
    .then((_) => print('email sent!')) 
    .catchError((e) => print('Error: $e')); 
} 

GmailSmtpOptions jest tylko pomocnikiem klasa. Jeśli chcesz korzystać z lokalnego serwera SMTP:

var options = new SmtpOptions() 
    ..hostName = 'localhost' 
    ..port = 25; 

Można check here for all possible fields w klasie SmtpOptions.

Oto przykład przy użyciu popularnej Rackspace Mailgun:

var options = new SmtpOptions() 
    ..hostName = 'smtp.mailgun.org' 
    ..port = 465 
    ..username = '[email protected]' 
    ..password = 'from mailgun'; 

Biblioteka obsługuje wiadomości e-mail w formacie HTML i załączniki, jak również. Aby dowiedzieć się, jak to zrobić, sprawdź numer the example.

Osobiście używam mailer z Mailgunem w produkcji.

+0

FYI, należy zachować ostrożność w przypadku haseł aplikacji. Pomijają one 2-czynnikowy autorytet i nie są ograniczone do konkretnej aplikacji, takiej jak nazwa może sugerować. Nigdy nie umieściłbym jednego w kodzie źródłowym. _Możesz czuć się bezpiecznie, ładując go z bezpiecznej usługi przechowywania kluczy. –

+0

Może powinienem wyjaśnić, że nigdy nie zamierzałem nikogo przechowywać takiego w kodzie źródłowym! Zaktualizowany przykład. –

+0

W przypadku Google nigdy nie czułbym się bezpiecznie przechowywać takie hasła. Mogę przechowywać co najwyżej hasło do usługi e-mail, tak jak w przypadku większości usług pocztowych, takich jak Mailgun. Dzięki za notatkę. –