Sending an SMTP email in Dart
dart, email
Solution
There's a library called `mailer`, which does exactly what you asked for: sends out emails.
Set it as a dependency in your `pubspec.yaml` and run `pub install`:
dependencies:
mailer: any
I will give a simple example using Gmail on my local Windows machine:
import 'package:mailer/mailer.dart';
main() {
var options = new GmailSmtpOptions()
..username = 'kaisellgren@gmail.com'
..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 = 'support@yourcompany.com'
..fromName = 'Your company'
..recipients = ['someone@somewhere.com', 'another@example.com']
..subject = 'Your subject'
..text = 'Here goes your body message';
// Finally, send it!
transport.send(envelope)
.then((_) => print('email sent!'))
.catchError((e) => print('Error: $e'));
}
The `GmailSmtpOptions` is just a helper class. If you want to use a local SMTP server:
var options = new SmtpOptions()
..hostName = 'localhost'
..port = 25;
You can check here for all possible fields in the `SmtpOptions` class.
Here's an example using the popular Rackspace Mailgun:
var options = new SmtpOptions()
..hostName = 'smtp.mailgun.org'
..port = 465
..username = 'postmaster@yourdomain.com'
..password = 'from mailgun';
The library supports HTML emails and attachments as well. Check out the example to learn how to do that.
I am personally using `mailer` with Mailgun in production use.
Problem
I looked through the API documentation and language guide, but I did not see anything about sending emails in Dart. I also checked this google groups post, but it's quite old by Dart standards. Is this possible to do? I know that I can always use the Process class to invoke external programs, but I'd prefer a real Dart solution if there's any.