我从雅虎邮件网络服务中获得了json共鸣。之后,我使用播放 json 库进行了解析。
现在我无法迭代它并构造带有发件人姓名、主题、ccList 等的邮件对象列表。
我尝试构造的邮件对象是:列表(电子邮件(主题,接收日期,正文1,发件人,收件人列表))
我浏览了游戏网站上的文档。但是作为 scala 的学习者很难理解它们。有人可以帮助我如何使用案例类来实现这一点。
响应我从网络服务中得到:
{
"result": {
"folder": {
"folderInfo": {
"fid": "Sent",
"name": "Sent"
},
"total": 3,
"unread": 0,
"size": 943522,
"isSystem": true
},
"total": 3,
"code": [],
"message": [
{
"mid": "2_0_0_2_3196_ACfai2IAACqmUwNFtgAAAKAUN2U",
"receivedDate": 1392723382,
"subject": "test mail",
"xapparentlyto": "",
"hasBlockedImages": false,
"flags": {
"isReplied": 0,
"isFlagged": 0,
"isRead": 1,
"isDraft": 0,
"isForwarded": 0,
"isHam": 0,
"isSpam": 0,
"hasAttachment": 0,
"isRecent": 1,
"inAddressBook": 0
},
"from": {
"email": "rajeevkumar.kallempudi@yahoo.com",
"name": "Rajeev Kumar Kallempudi"
},
"to": [
{
"email": "rajeevprasanna@gmail.com",
"name": "rajeevprasanna@gmail.com"
}
],
"replyto": [
{
"email": "rajeevkumar.kallempudi@yahoo.com",
"name": "Rajeev Kumar Kallempudi"
}
],
"cc": [],
"bcc": [],
"domainkey": false,
"messageId": "<1392723382.76715.YahooMailNeo@web160105.mail.bf1.yahoo.com>",
"inReplyTo": "",
"references": "",
"sender": "rajeevkumar.kallempudi@yahoo.com",
"part": [
{
"partId": "HEADER",
"type": "x-unknown",
"subtype": "",
"typeParams": "",
"disposition": "",
"dispParams": "",
"encoding": "7bit",
"filename": "",
"size": 1474,
"contentId": "",
"isTruncated": false,
"hasBlockedImages": false,
"referencedInline": false
}
]
},
{
"mid": "2_0_0_2_2463_ACfai2IAAAdpUwM1NwAAAD0sJOA",
"receivedDate": 1392719159,
"subject": "passage1",
"xapparentlyto": "",
"hasBlockedImages": false,
"flags": {
"isReplied": 0,
"isFlagged": 0,
"isRead": 1,
"isDraft": 0,
"isForwarded": 0,
"isHam": 0,
"isSpam": 0,
"hasAttachment": 0,
"isRecent": 1,
"inAddressBook": 0
},
"from": {
"email": "rajeevkumar.kallempudi@yahoo.com",
"name": "Rajeev Kumar Kallempudi"
},
"to": [
{
"email": "rajeevkumar.kellmpudi@yahoo.com",
"name": ""
}
],
"replyto": [
{
"email": "rajeevkumar.kallempudi@yahoo.com",
"name": "Rajeev Kumar Kallempudi"
}
],
"cc": [],
"bcc": [],
"domainkey": false,
"messageId": "<1392719159.63976.YahooMailNeo@web160106.mail.bf1.yahoo.com>",
"inReplyTo": "",
"references": "",
"sender": "rajeevkumar.kallempudi@yahoo.com",
"part": [
{
"partId": "HEADER",
"type": "x-unknown",
"subtype": "",
"typeParams": "",
"disposition": "",
"dispParams": "",
"encoding": "7bit",
"filename": "",
"size": 1949,
"contentId": "",
"isTruncated": false,
"hasBlockedImages": false,
"referencedInline": false
},
{
"partId": "TEXT",
"subtype": "alternative",
"type": "multipart",
"typeParams": "boundary="-827237569-990831377-1392719159=:63976"",
"disposition": "",
"dispParams": "",
"encoding": "7bit",
"filename": "",
"size": 11623,
"contentId": "",
"isTruncated": false,
"hasBlockedImages": false,
"referencedInline": false
}
]
}
]
},
"error": null
}
如果你只是查询雅虎的消息,你不会得到电子邮件的内容,所以你应该使用一个看起来更像这样的查询。 请注意,这将查询帐户的所有消息,包括已读或存档的消息。
select
message.subject,
message.receivedDate,
message.from,
message.to,
message.cc,
message.bcc,
message.part.text
from ymail.msgcontent
where (fid,mids) in (
select
folder.folderInfo.fid,
mid
from ymail.messages
)
一旦你有了它,你只需要使用Play文档中描述的JSON选择元素功能。 它应该看起来像这样:
import java.util._
case class EmailMessage(
subject : String,
receivedDate : Date,
body : String,
sender : String,
recipients : List[String]
)
def yahooToEmailMessage(json:JsValue) = {
val subject = json / "result" / "message" / "subject"
val body = json / "result" / "message" / "part" / "text"
val ts = (json / "result" / "message" / "receivedDate").toLong
val receivedDate = new Date(ts * 1000L)
val sender = getRecipient(json / "result" / "message" / "to")
val to = getRecipients(json / "result" / "message" / "to")
val cc = getRecipients(json / "result" / "message" / "cc")
val bcc = getRecipients(json / "result" / "message" / "bcc")
val recipients = to ::: cc ::: bcc
EmailMessage(
subject,
receivedDate,
body,
sender,
recipients
)
}
def getRecipient(recipient:JsValue):List[String] = {
val name = recipient / "name"
val email = recipient / "email"
name + " <" + email + ">"
}
def getRecipients(array:JsArray):List[String] = {
array.foldLeft(List[String]()) {
(list,recipient) => list ::: List(getRecipient(recipient))
}
}