【发布时间】:2021-10-10 21:26:51
【问题描述】:
我已经编写了这段代码来将 Message(Gmail API) 转换为 MimeMessage(Javax.internet)
public static MimeMessage createMimeFromMessage(Session mailSession, Message message)throws Exception{
String raw=message.getRaw();
byte[] decodedEmail=Base64.decodeBase64(raw);
InputStream emailInputStream=new ByteArrayInputStream(decodedEmail);
MimeMessage mimeMessage=new MimeMessage(mailSession,emailInputStream);
return mimeMessage;
}
这里 getRaw() 返回 null。我正在使用以下方式收到消息-
public static List<Message> listMessagesMatchingQuery(Gmail service, String userId,
String query) throws IOException {
ListMessagesResponse response = service.users().messages().list(userId).setQ(query).execute();
List<Message> messages = new ArrayList<Message>();
while (response.getMessages() != null) {
messages.addAll(response.getMessages());
if (response.getNextPageToken() != null) {
String pageToken = response.getNextPageToken();
response = service.users().messages().list(userId).setQ(query)
.setPageToken(pageToken).execute();
} else {
break;
}
}
return messages;
}
这是基于谷歌网站上的逆向工程代码(https://developers.google.com/gmail/api/guides/sending)-
public static Message createMessageWithEmail(MimeMessage emailContent)
throws MessagingException, IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
emailContent.writeTo(buffer);
byte[] bytes = buffer.toByteArray();
String encodedEmail = Base64.encodeBase64URLSafeString(bytes);
Message message = new Message();
message.setRaw(encodedEmail);
return message;
}
最终目标是将 Message 转换为 MimeMessage。我可以将 eml 文件转换为 MimeMessage 类型而不会出错,但我不确定为什么会出错。 谢谢!
【问题讨论】:
-
您是否实施了任何日志以查看您的代码在什么时候的行为与预期不同?
-
就像我说的......它根据查询检索消息。每条消息的大小为 2,带有 id 和线程 id,并带有用于扩展字段的选项,该字段显示更多我无法理解的数字。我可以打印 id,获取附件名称。在 listMessageMatchingQuery 调用之后,它立即转到 createMimeforMessage ,它为 getraw 返回 null
标签: java email gmail-api mime-message