Отправка электронной почты SMTP в Dart

Я просмотрел документацию по API и руководство по языку, но я ничего не видел о отправке писем в Dart. Я также проверил это сообщение google groups, но он довольно старый по стандартам Dart.

Можно ли это сделать? Я знаю, что всегда могу использовать класс Process для вызова внешних программ, но я бы предпочел настоящее решение Dart, если оно есть.

Ответ 1

Там есть библиотека под названием mailer, которая делает именно то, что вы просили: отправляет электронные письма.

Задайте его как зависимость в pubspec.yaml и запустите pub install:

dependencies:
  mailer: any

Я приведу простой пример использования Gmail на моей локальной машине 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 - это только вспомогательный класс. Если вы хотите использовать локальный SMTP-сервер:

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

Вы можете проверить здесь все возможные поля в классе SmtpOptions.

Вот пример использования популярного Rackspace Mailgun:

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

Библиотека поддерживает HTML-письма и вложения. Посмотрите пример, чтобы узнать, как это сделать.

Я лично использую mailer с Mailgun в производстве.