我正在使用Java邮件1.4.6来读取和解析Gmail邮箱的邮件。但问题是,当我绑解析emaill主题(例如主题字符串“建设失败詹金斯:appanalyti X»appanalyti X#51" )的声明使用java邮件在java中解析电子邮件主题的错误
String subjectStr=(String) mimeMessage.getSubject();
我越来越
subjectStr as“Jenkins的构建失败:appanaltix»appanal”而不是 “Jenkins的构建失败:appanalyti x»appanalyti x#51”。
我可以知道我哪里出错了吗?需要它来解码主题串
代码:
public boolean parseEmailSubject(String host,String userName,String password,String configurationStringToCheck,String saveDirectory){
....
Session session = Session.getDefaultInstance(properties);
try {
IMAPSSLStore store = (IMAPSSLStore)session.getStore(IMAP);
store.connect(host, userName, password) ;
Folder folderInbox =store.getFolder(IMAP_FOLDER);
folderInbox.open(Folder.READ_ONLY);
Message[] arrayMessages = folderInbox.getMessages();
for (int i = 0; i < arrayMessages.length; i++) {
MimeMessage message = (MimeMessage) arrayMessages[i];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
message.writeTo(bos);
bos.close();
SharedByteArrayInputStream bis =new SharedByteArrayInputStream(bos.toByteArray());
MimeMessage cmsg = new MimeMessage(session, bis);
bis.close();
String megSubject = cmsg.getSubject();
if(megSubject.contains(configurationStringToCheck)){
String contentType = cmsg.getContentType();
if (contentType.contains(IMAP_CONTENT_TYPE)) {
Multipart multiPart = (Multipart) cmsg.getContent();
int numberOfParts = multiPart.getCount();
for (int partCount = 0; partCount < numberOfParts; partCount++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
String fileName = part.getFileName();
part.saveFile(saveDirectory + File.separator + fileName);
}
}
}
return true;
}
}
folderInbox.close(false);
store.close();
}catch (Exception e) {
}
}
电子邮件样本 (以下主题行) 构建失败詹金斯:appanalyti X»appanalyti X#51
(下面身体部分) 变更:
< === [JENKINS远程处理CAPAC ITY] ===>频道开始 log4j:WARN记录器(org.apache.commons.beanutils.converters.BooleanConverter)找不到appender。 log4j:WARN请正确初始化log4j系统。
我们可以看到您的代码和电子邮件示例(没有任何私人数据)吗? – Djon
我编辑了上面的代码并添加了邮件样本 – user2215139