使用java mail在java中错误解析电子邮件主题
我正在使用JavaMail 1.4.6阅读和解析gmail收件箱中的电子邮件。但问题是当我要解析emaill主题时(示例主题字符串是“Jenkins:appanalyti中的构建失败”)x»appanalytix#51“)带声明
String subjectStr=(String) mimeMessage.getSubject();
我越来越
subjectStr as "Build failed in Jenkins: appanalytix » appanal" instead "Build failed in Jenkins: appanalytix » appanalytix #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) {
}
}
电子邮件样本是 (以下主题行) 在Jenkins中生成失败:appanalytix»appanalytix51
(身体部分如下) 变化:
<===[JENKINS远程处理能力]=>;频道启动 log4j:WARN找不到记录器(org.apache.commons.beanutils.converters.BooleanConverter)的追加器。 log4j:警告请正确初始化log4j系统
# 1 楼答案
如果您使用的是gmail服务器,那么这是最好的代码,只需输入您的用户名和密码并运行即可
# 2 楼答案
JavaMail为您解码主题。当然,如果主题编码不正确,就无法正确解码
主题标题中的原始文本是什么
JavaMail调试输出显示了什么