我从雅虎邮箱网络服务中获得了json的共鸣。之后我使用play json库进行解析。
现在我无法迭代它并构建具有发件人姓名,主题,ccList等的邮件对象列表。
我想构建的邮件对象是:List(EmailMessage(subject,recvdDate,body1,sender,recipientsList))
我查看了play website的文档。但很难将它们理解为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
}
答案 0 :(得分:1)
如果您只是查询Yahoo的邮件,则无法获取电子邮件的内容,因此您应该使用看起来更像这样的查询。请注意,这将查询帐户的所有消息,包括已读或已存档的消息。
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))
}
}