从 Flutter/dart 发送 html 格式的文本

Send html formatted text from Flutter/dart

我成功地从 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);
}

最简单的解决方案可能就是使用 https://pub.dev/packages/mailer

构建字符串时,请注意换行符。最好使用 \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 Client Libraries with Dart,这是 Google 提供的官方 Dart 库,用于使用其 API。