2013-07-23 46 views
11

Ho esaminato la documentazione dell'API e la guida linguistica, ma non ho visto nulla sull'invio di e-mail in Dart. Ho anche controllato questo google groups post, ma è piuttosto vecchio per gli standard di Dart.Invio di un'e-mail SMTP in Dart

È possibile fare questo? So che posso sempre usare la classe Process per invocare programmi esterni, ma preferirei una vera soluzione Dart se ce n'è.

risposta

17

C'è una libreria chiamata mailer, che fa esattamente quello che hai richiesto: invia e-mail.

impostarlo come una dipendenza nella vostra pubspec.yaml ed eseguire pub install:

dependencies: 
    mailer: any 

darò un semplice esempio l'utilizzo di Gmail sulla mia macchina locale di 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')); 
} 

Il GmailSmtpOptions è solo un aiutante classe. Se si desidera utilizzare un server SMTP locale:

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

È possibile check here for all possible fields nella classe SmtpOptions.

Ecco un esempio utilizzando il popolare Rackspace Mailgun:

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

La libreria supporta le email HTML e allegati pure. Dai un'occhiata a the example per sapere come farlo.

Utilizzo personalmente mailer con Mailgun in uso in produzione.

+0

FYI, fai attenzione con le password specifiche dell'applicazione. Ignorano l'autenticazione a 2 fattori e non sono limitati a un'applicazione specifica come potrebbe implicare il nome. Non lo metterei mai nel codice sorgente. Forse ti sentirai al sicuro caricandolo da un servizio di archiviazione sicura delle chiavi. –

+0

Forse dovrei chiarire che non ho mai inteso che qualcuno memorizzasse tale codice sorgente! Esempio aggiornato –

+0

Nel caso di Google, non mi sentirei mai sicuro di memorizzare tali password. Conservavo al massimo una password specifica per i servizi di posta elettronica, come nel caso della maggior parte dei servizi di posta elettronica come Mailgun. Grazie per la nota. –