Gmail API:解码消息正文(Java/Android)
我需要以用户邮箱中的格式获取检索到的邮件,即:HTML。Gmail API:解码消息正文(Java/Android),java,android,gmail-api,Java,Android,Gmail Api,我需要以用户邮箱中的格式获取检索到的邮件,即:HTML。 我在解码检索到的邮件正文时遇到问题 请推荐一种用Java实现的方法 我现在这样做是为了得到信息: public class MyClass { public static Message getMessage(Gmail service, String userId, String messageId) throws IOException { Message message = service.users().
我在解码检索到的邮件正文时遇到问题 请推荐一种用Java实现的方法 我现在这样做是为了得到信息:
public class MyClass {
public static Message getMessage(Gmail service, String userId, String messageId)
throws IOException {
Message message = service.users().messages().get(userId, messageId).execute();
System.out.println("Message snippet: " + message.getSnippet());
return message;
}
public static MimeMessage getMimeMessage(Gmail service, String userId, String messageId)
throws IOException, MessagingException {
Message message = service.users().messages().get(userId, messageId).setFormat("raw").execute();
byte[] emailBytes = Base64.decodeBase64(message.getRaw());
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
MimeMessage email = new MimeMessage(session, new ByteArrayInputStream(emailBytes));
return email;
}
}
String mimeType=message.getPayload().getMimeType();
列出部件=message.getPayload().getParts();
if(mimeType.contains(“可选”)){
log.info(“进入备选循环”);
for(MessagePart:parts){
mailBody=新字符串(Base64.decodeBase64(part.getBody())
.getData().getBytes());
}
日志信息(邮件正文);
}
字符串mimeType=message.getPayload().getMimeType();
列出部件=message.getPayload().getParts();
if(mimeType.contains(“可选”)){
log.info(“进入备选循环”);
for(MessagePart:parts){
mailBody=新字符串(Base64.decodeBase64(part.getBody())
.getData().getBytes());
}
日志信息(邮件正文);
}
您可以使用以下方法:
private String getContent(Message message) {
StringBuilder stringBuilder = new StringBuilder();
try {
getPlainTextFromMessageParts(message.getPayload().getParts(), stringBuilder);
byte[] bodyBytes = Base64.decodeBase64(stringBuilder.toString());
String text = new String(bodyBytes, "UTF-8");
return text;
} catch (UnsupportedEncodingException e) {
logger.error("UnsupportedEncoding: " + e.toString());
return message.getSnippet();
}
}
private void getPlainTextFromMessageParts(List<MessagePart> messageParts, StringBuilder stringBuilder) {
for (MessagePart messagePart : messageParts) {
if (messagePart.getMimeType().equals("text/plain")) {
stringBuilder.append(messagePart.getBody().getData());
}
if (messagePart.getParts() != null) {
getPlainTextFromMessageParts(messagePart.getParts(), stringBuilder);
}
}
}
私有字符串getContent(消息){
StringBuilder StringBuilder=新的StringBuilder();
试一试{
getPlainTextFromMessageParts(message.getPayload().getParts(),stringBuilder);
byte[]bodyBytes=Base64.decodeBase64(stringBuilder.toString());
字符串文本=新字符串(bodyBytes,“UTF-8”);
返回文本;
}捕获(不支持的编码异常e){
logger.error(“不支持编码:+e.toString());
返回消息。getSnippet();
}
}
私有void getPlainTextFromMessageParts(列出messageParts、StringBuilder和StringBuilder){
用于(MessagePart MessagePart:messageParts){
if(messagePart.getMimeType().equals(“text/plain”)){
追加(messagePart.getBody().getData());
}
if(messagePart.getParts()!=null){
getPlainTextFromMessageParts(messagePart.getParts(),stringBuilder);
}
}
}
它将所有消息部分与mimeType“text/plain”组合,并将其作为一个字符串返回 您可以使用以下方法:
private String getContent(Message message) {
StringBuilder stringBuilder = new StringBuilder();
try {
getPlainTextFromMessageParts(message.getPayload().getParts(), stringBuilder);
byte[] bodyBytes = Base64.decodeBase64(stringBuilder.toString());
String text = new String(bodyBytes, "UTF-8");
return text;
} catch (UnsupportedEncodingException e) {
logger.error("UnsupportedEncoding: " + e.toString());
return message.getSnippet();
}
}
private void getPlainTextFromMessageParts(List<MessagePart> messageParts, StringBuilder stringBuilder) {
for (MessagePart messagePart : messageParts) {
if (messagePart.getMimeType().equals("text/plain")) {
stringBuilder.append(messagePart.getBody().getData());
}
if (messagePart.getParts() != null) {
getPlainTextFromMessageParts(messagePart.getParts(), stringBuilder);
}
}
}
私有字符串getContent(消息){
StringBuilder StringBuilder=新的StringBuilder();
试一试{
getPlainTextFromMessageParts(message.getPayload().getParts(),stringBuilder);
byte[]bodyBytes=Base64.decodeBase64(stringBuilder.toString());
字符串文本=新字符串(bodyBytes,“UTF-8”);
返回文本;
}捕获(不支持的编码异常e){
logger.error(“不支持编码:+e.toString());
返回消息。getSnippet();
}
}
私有void getPlainTextFromMessageParts(列出messageParts、StringBuilder和StringBuilder){
用于(MessagePart MessagePart:messageParts){
if(messagePart.getMimeType().equals(“text/plain”)){
追加(messagePart.getBody().getData());
}
if(messagePart.getParts()!=null){
getPlainTextFromMessageParts(messagePart.getParts(),stringBuilder);
}
}
}
它将所有消息部分与mimeType“text/plain”组合,并将其作为一个字符串返回 新字符串(messageResult.getPayload().getParts().get(0.getBody().decodeData())新字符串(messageResult.getPayload().getParts().get(0.getBody().decodeData())该代码到底有什么问题?它会崩溃、返回错误、返回乱码数据还是什么?在解码检索到的消息正文时遇到问题。它返回编码数据@KenY nw当我使用消息ID执行代码时,正文中会出现以下内容:会吗?该代码到底有什么问题?它会崩溃、返回错误、返回乱码数据还是什么?在解码检索到的消息正文时遇到问题。它返回编码数据@KenY nw当我用消息ID执行代码时,正文中会出现以下内容:是吗?这个答案真的帮我解决了一个问题,我被困了4-5个小时!!谢谢@Kiran PalakaHelp,我在“part.getBody().getData()”中得到了一个空指针,因为“part.getBody()”返回一个DataMap$entry数组。这个答案真的帮助我解决了一个困扰了我4-5个小时的问题!!谢谢@Kiran PalakaHelp,我在“part.getBody().getData()”中得到一个空指针,因为“part.getBody()”返回一个DataMap$条目数组