API响应访问From和To邮件的名称

时间:2018-05-07 10:59:04

标签: ios swift string swift4 gmail-api

我能够从gmail api获取邮件。在回复中,我将收到来自和收件人的邮件,如下所示

enter image description here

{
    "name": "From",
    "value": Mail Delivery Subsystem **Symbol lessthan**mailer-daemon@googlemail.com**Symbol greaterthan**
}

{
    "name": "To",
    "value": Rahul, kumar **Symbol greaterthan**rahulkumar1234@gmail.com**Symbol lessthan**
}

我可以通过循环来访问如下所示的值。

 if element.name == "From" {
   print("From ::: \(String(describing: element.value!))")
 }

OutPut是:

From ::: Mail Delivery Subsystem <mailer-daemon@googlemail.com>

而不是发件人姓名和邮件。我想只获得邮件和发件人名称。如何将值分为两个部分/字符串,一个用于名称,另一个用于邮件。

有时候没有发件人姓名以及lessthan和greaterthan符号,在那个时候我只收到邮件。

@vadian我已在下面指定了响应中的所有格式。有时我没有得到少于和超过。而且我想将名称和电子邮件保存为两个单独的字符串。如果响应中没有名称,则无需将其作为字符串抓取,只有邮件足以作为字符串获取。 enter image description here

2 个答案:

答案 0 :(得分:0)

我能想到的两个选项,

1st:Quick and Dirty

使用&#39;&lt;&#39;拆分字符串运营商,得到第二部分,这将是&#39;&lt;&#39;然后删除&#39;&gt;&#39;从那个结果来清理它。如果用户可以使用&#39;这可能是危险的。或者&#39;&gt;&#39;以他们的名义,所以不会依赖这种方法。

第二名:RegEx

使用正则表达式从值

中获取电子邮件
var value = "Some Guy <email@example.com>"

// no idea how robust this pattern is I just grabbed it from google so feel free to change
var pattern = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
let regex = try NSRegularExpression(pattern: pattern)
let results = regex.matches(in: value, range: NSRange(value.startIndex..., in: value))

// Generates a string array of emails
var emails = results.map {
    String(value[Range($0.range, in: value)!])
}

您可能只在“发件人”字段中有一封电子邮件,但如果“收件人”字段中有此电子邮件,则可以抓取多封电子邮件。

答案 1 :(得分:0)

首先\(String(describing: element.value!)太可怕了。 element.value!无论如何都应该是一个字符串并且在String(describing:中包装并且再次在字符串插值中是两次冗余。

请勿将String(describing滥用于符合ExpressibleByStringLiteral的类型。

只需撰写print("From ::: ", element.value!)

即可

此函数返回nameemail的元组。它会检查是否有<个字符。

如果没有,则返回空字符串name,输入字符串为email
如果有,则返回<之后的子字符串,直到第二个字符为email,其余字符由double quotespace<剪裁为{{ 1}}。

name