ios - 访问 From 和 To 邮件名称的 API 响应
问题描述
我能够从 gmail api 获取消息。在回复中,我收到了来自和收件人的邮件,如下所示
{
"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!))")
}
输出是:
From ::: Mail Delivery Subsystem <mailer-daemon@googlemail.com>
而不是发件人姓名和邮件。我只想单独获取邮件和发件人姓名。我如何将值分成两部分/字符串,一个用于名称,另一个用于邮件。
有时没有发件人姓名以及小于和大于符号,那时我只收到邮件。
@vadian 我在下面指定了响应中的所有格式。有时我没有得到小于和大于。而且我还想将姓名和电子邮件保存为两个单独的字符串。如果响应中没有名称,则无需将其作为字符串抓取,只有邮件足以作为字符串抓取。
解决方案
我能想到的2个选项,
第一:又快又脏
使用“<”运算符拆分字符串,获取第二部分,该部分将位于“<”之后,然后从该结果中删除“>”以进行清理。如果用户的名称中可能包含“<”或“>”,那么这可能会很危险,因此不会依赖这种方法。
第二:正则表达式
使用正则表达式从值中获取电子邮件
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)!])
}
您可能在“发件人”字段中只有一封电子邮件,但这将允许您在“收件人”字段中获取多封电子邮件。
推荐阅读
- powershell - 在 PowerShell 中使用命名空间的范围是什么?
- flutter - Flutter 如何将单个数据从 Stream 传递到另一个屏幕并得到更新
- c# - 获取注册用户数据时出错 - C# MVC
- r - 将相同的因子水平应用于 R 中具有不同水平数量的多个变量
- java - 如果输入不是 bigDecimal,如何抛出异常并再次扫描?
- heroku - Heroku 运行脚本时是否有事件列表?
- javascript - HTML 元素列表上的事件监听器
- excel - 电子表格按行值透视
- django - 如何使用 Django 框架触发 AWS Lambda 函数?
- r - 在ggplot R中手动创建图例