我有使用java mail api和spring编写的服务。以下是阅读邮件的代码段。
First Store对象是使用spring bean创建的,如下所示
<bean id="store" factory-bean="imap_session" factory-method="getStore">
<constructor-arg index="0" value="imaps"/>
</bean>
<bean id="imap_session" class="javax.mail.Session">
<constructor-arg index="0">
<props>
<prop key="mail.imap.partialfetch">false</prop>
<prop key="mail.mime.decodefilename">true</prop>
<prop key="mail.imap.port">993</prop>
<prop key="mail.imap.ssl.protocols"></prop>
<prop key="mail.imap.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
<prop key="mail.imap.ssl.enable">true</prop>
</props>
</constructor-arg>
<constructor-arg index="1">
<null/>
</constructor-arg>
</bean>
用于连接服务器和获取消息的java代码片段如下所示
public Message[] getMessages() throws MessagingException, ConfigurationException {
try {
store.connect(host, user, password);
} catch (AuthenticationFailedException e) {
log.error("AuthenticationFailedException: " + e.getMessage());
} catch(Exception ex) {
log.error("Exception: in connection with mail server " + ex.getMessage());
}
Folder inFolder = store.getFolder(name);
folder.open(Folder.READ_WRITE);
int count = inFolder.getMessageCount();
int length = count < numberOfMessagesToFetch ? count : numberOfMessagesToFetch;
Message[] messages = inFolder.getMessages(1, length);
// Commented out below settings
/*FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.FLAGS);
fp.add(FetchProfile.Item.CONTENT_INFO);*/
//fp.add(IMAPFolder.FetchProfileItem.MESSAGE);
//IMAPFolder.FetchProfileItem
/*fp.add("X-mailer");
inFolder.fetch(messages, fp);*/
return messages;
}
下面是下载附件的代码片段
try{
Object content = message.getContent();
Multipart msgMultipart = (Multipart) content;
Part part = multipart.getBodyPart(0);
File attachmentFile = new File("path of file");
FileOutputStream os = null;
os = new FileOutputStream(attachmentFile);
IOUtils.copy(part.getInputStream(), os);
os.flush();
} finally {
IOUtils.closeQuietly(os);
}
还有一些消息处理,例如获取一些标题字段值。收到时间,寄件人等。
问题是,对于一台不是Microsoft Exchange服务器的服务器,上面的代码片段需要3-4秒才能下载大小为315k的附件。但另一台服务器交换服务器,相同的代码速度非常慢,需要10 +秒。这是一个很大的瓶颈。
这种缓慢的原因是什么?如果有人有解决方案,请帮助我。如何快速使用Exchange邮件服务器。