从Swift中的消息URL获取正文

时间:2015-10-08 07:06:44

标签: swift url message apple-mail

这个问题从以下问题得出: Drag messages from Mail onto Dock using Swift

我现在收到一条拖放消息,将邮件从Mail拖到停靠栏。我得到的唯一的东西是消息标题和消息URL,如下所示:

消息:%3C2004768713.4671@mail.stackoverflow.com%3E

如何从此网址获取正文文本?

由于

安德鲁

1 个答案:

答案 0 :(得分:3)

您可以使用简单的正则表达式。

.*参数很饿,并且会尝试尽可能多地匹配字符串中的(希望)最后一个@字符之前的url subject:message对。

我还提供了一个小工具函数(rangeFromNSRange())来帮助将Objective-C NSRange结构转换为正确的Range<String.Index> Swift结构。

将以下内容粘贴到Swift游乐场中以查看它是否有效(并且玩得开心!):

import Cocoa

func rangeFromNSRange(range: NSRange, string: String) -> Range<String.Index>
{
    let startIndex = string.startIndex.advancedBy(range.location)
    let endIndex = startIndex.advancedBy(range.length)
    return Range(start: startIndex, end: endIndex)
}

func parseEmailURL(urlAsString url: String) -> (subject: String, message: String)?
{
    let regexFormat = "^(.*):(.*)@"
    if let regex = try? NSRegularExpression(pattern: regexFormat, options: NSRegularExpressionOptions.CaseInsensitive)
    {
        let matches = regex.matchesInString(url, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, url.characters.count))

        if let match = matches.first
        {
            let subjectRange = rangeFromNSRange(match.rangeAtIndex(1), string: url)
            let messageRange = rangeFromNSRange(match.rangeAtIndex(2), string: url)

            let subject = url.substringWithRange(subjectRange)
            let message = url.substringWithRange(messageRange)

            return (subject, message)
        }
    }

    return nil
}

parseEmailURL(urlAsString: "message:2004768713.4671@mail.stackoverflow.com")