2013-07-23 7 views
11

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

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

ответ

17

Существует библиотека под названием 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; 

Вы можете check here for all possible fields в SmtpOptions классе.

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

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

Библиотека поддерживает HTML электронной почты и вложений, а также. Обратитесь к the example, чтобы узнать, как это сделать.

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

+0

FYI, будьте осторожны с паролями приложений. Они обходят двухфакторную аутентификацию и не ограничиваются конкретным приложением, как это может означать название. Я бы никогда не поместил его в исходный код. _Maybe, вы можете чувствовать себя безопасно загружать его из службы безопасного хранения ключей. –

+0

Возможно, мне следует пояснить, что я никогда не собирался хранить такие файлы в исходном коде! Обновленный пример. –

+0

В случае Google я никогда не буду чувствовать себя в безопасности, сохраняя такие пароли. Я бы максимально использовал специальный почтовый сервис, например, в случае большинства почтовых служб, таких как Mailgun. Спасибо за примечание. –

Смежные вопросы