使用 IMAP 将所有电子邮件放入列表

Getting all the emails into a list using IMAP

我正在尝试在 Flutter 中创建一个邮件应用程序,现在我正在测试后端,然后我想将它集成到我的应用程序中。

我正在使用 IMAP 从我的大学获取我所有的电子邮件,并使用一个名为 Emails 的 class 将它们插入到一个列表中,其中包含主题、日期、发件人、收件人和正文(所有字符串类型)等参数。

    List emails;
  Future<EMails> getEmails() async {
    ImapFolder inbox = await client.getFolder("inbox");
    EMails list;
    for (var i = inbox.mailCount; i > 0; i--) {
      list.subject = await inbox.fetch(["BODY.PEEK[HEADER.FIELDS (SUBJECT)]"],
          messageIds: [i]) as String; //gets the subject
      list.date = await inbox.fetch(["BODY.PEEK[HEADER.FIELDS (Date)]"],
          messageIds: [i]) as String; //gets the Date
      list.from = await inbox.fetch(["BODY.PEEK[HEADER.FIELDS (From)]"],
          messageIds: [i]) as String; //gets the From
      list.to =
          await inbox.fetch(["BODY.PEEK[HEADER.FIELDS (To)]"], messageIds: [i])
              as String; //gets the To
      list.body = await inbox.fetch(["RFC822.TEXT"], messageIds: [i]) as String;
      emails.add(list);
    }
    return list;
  }

问题是我无法将获取的数据转换为字符串。 https://i.imgur.com/vP91ZG1.png

.fetch returns 一个未来,但看起来你还没有等待它。在每个 inbox.fetch.

前添加 await

这记录在 https://pub.dev/documentation/imap_client/latest/imap_client/ImapFolder-class.html

.fetch returns 地图>

Map<int, Map<String, dynamic>> subject =  await inbox.fetch(["BODY.PEEK[HEADER.FIELDS (SUBJECT)]"],messageIds: [i]);

var mapSubjectEmail = subject[i];
var mapEmail = mapSubjectEmail.values;
var subjectEmail = mapEmail.first as String;