Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending an SMTP email in Dart

Tags:

email

dart

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.

like image 230
stan Avatar asked Jul 23 '13 23:07

stan


People also ask

How do I send an email directly in flutter?

You need to create a Flutter screen that contains text fields of the email. This includes a list of recipients, email subject, and email contents, along with the option to add attachments. At the end, add a button to send an email.

Can I send email using localhost?

You can send mail from localhost with sendmail package , sendmail package is inbuild in XAMPP. So if you are using XAMPP then you can easily send mail from localhost. For example, you can configure C:\xampp\php\php. ini and c:\xampp\sendmail\sendmail.

How do I send mail without opening the default email app on flutter?

Yes, you can directly Send email from your app via SMTP using mailer plugin. You will need to ask and store user's Email, Password, SMTP port, and host and use these credentials to send emails. This will work with pretty much with any email provider.


1 Answers

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 = '[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'));
}

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 = '[email protected]'
  ..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.

like image 95
Kai Sellgren Avatar answered Sep 17 '22 23:09

Kai Sellgren