swift 如何将电子邮件正文转换为可读的内容?

42fyovps  于 2023-01-19  发布在  Swift
关注(0)|答案(1)|浏览(140)

bounty将在6天后过期。回答此问题可获得+150声望奖励。Thomas Kekeisen希望引起更多人关注此问题。

我正在做一个简单的苹果邮箱扩展,但不能从我的邮件中得到可读的东西。

func allowMessageSendForSession(_ session: MEComposeSession, completion: @escaping (Error?) -> Void) {
        let mailMessage = session.mailMessage;
        let subject = mailMessage.subject
        let sender = mailMessage.fromAddress.addressString ?? "undefined";
        let data = String(data: mailMessage.rawData!, encoding: .utf8)

在数据中是邮件头和邮件体,但是它填充了太多的“引用的可打印的”字符串。
就像Viele Gr=C3=BC=C3=\n=9Fe =F0=9F=A4=9D。应该是Viele Grüße 🤝
我已经试过这个答案中的代码https://stackoverflow.com/a/32827598/1407823,但它似乎只适用于单个单词。我不能让它适用于整个文本。
难道没有内置的方法来解析这样的文本吗?

tjrkku2a

tjrkku2a1#

没有内置的方法来解码消息,您需要一个RFC822解析器,例如GitHub上的MimeParser,可作为Swift Package使用。
这是一个如何将正文解码为纯文本的示例,messageData表示消息的原始数据

import MimeParser

do {
    let messageString = String(data: messageData, encoding: .utf8)!
    let parser = MimeParser()
    let mime = try parser.parse(messageString)
    
    switch mime.content {
        case .body(let body): print(body.raw)
        case .alternative(let mimes), .mixed(let mimes):
        if let plainTextMime = mimes.first(where: {$0.header.contentType?.subtype == "plain"}),
            let decodedBody = try plainTextMime.decodedContentString() {
            print(decodedBody)
        }
    }
} catch {
    print(error)
}

使用subtype == "html"可以获得HTML文本(如果可用

相关问题