Отправить html отформатированный текст из Flutter / Dart - PullRequest
0 голосов
/ 26 февраля 2020

Мне удалось отправить электронное письмо от Flutter, но в сообщении электронной почты разрешено только <br>. Если я попробую даже тег <b>, он ответит кодом состояния 400.

Future<Null> testingEmail(String userId, Map header) async {
  header['Accept'] = 'application/json';
  header['Content-type'] = 'application/json';

  var from = userId;
  var to = userId;
  var subject = 'test send email';
  var message = "Hi<br/>Html <b>Email</b><br><br>gfdgdfgdfg";
  var content = '''
    Content-Type: text/html; charset="utf-8"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    to: ${to}
    from: ${from}
    subject: ${subject}

    ${message}''';

  var bytes = utf8.encode(content);
  var base64 = base64Encode(bytes);
  var body = json.encode({'raw': base64});

  String url =
      'https://www.googleapis.com/gmail/v1/users/' + userId + '/messages/send';

  final http.Response response =
      await http.post(url, headers: header, body: body);
}

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

При построении строки будьте осторожны с переносами строк. Лучше использовать \n, чтобы избежать проблем, и вместо base64Encode используйте base64Url. Вот небольшой пример, который показывает закодированное тело:

import 'dart:convert';

void main() {
  var content = '''Content-Type: text/html; charset=utf-8\nMIME-Version: 1.0\nContent-Transfer-Encoding: 7bit\nto: user2@domain\nsender: user@domain\nsubject: API test Dart\n\nHi<br/>Html <b>Email</b><br><br>gfdgdfgdfg''';

  String encoded = base64Url.encode(utf8.encode(content));
  print(encoded);

}

Кроме того, я бы рекомендовал вам проверить Клиентские библиотеки Google API с Dart , это официальная библиотека Dart, предоставленная Google использует свои API.

0 голосов
/ 26 февраля 2020

Самое простое решение - просто использовать https://pub.dev/packages/mailer

...