我正在處理一個項目,該項目需要加載傳入的電子郵件,處理僅通過過濾條件的電子郵件,最後標記該電子郵件已經SEEN並修改學科。無法使用spring框架修改郵件(郵件接收)
有幾個問題我無法弄清楚:
郵件過濾器表達式是不是爲我工作。我想找出主題以「AAA」開頭並且發件人的電子郵件爲「[email protected]」的郵件。
這裏是我的表情: 「( '?。(我)AAA *' 主題相符)|( '?。(我)[email protected]' 發件人匹配)」
如何設置用戶定義標誌的方式非常慢。我必須從打開的文件夾中加載所有電子郵件,並找到與當前閱讀消息的消息ID匹配的電子郵件。有沒有更好更快的方法來做到這一點?
彈簧的context.xml
<int-mail:imap-idle-channel-adapter id="customAdapter"
store-uri="imaps://XXXX:[email protected]:993/inbox"
channel="receiveChannel"
auto-startup="true"
should-delete-messages="false"
should-mark-messages-as-read="true"
java-mail-properties="mailProperties"
mail-filter-expression="(subject matches '(?i)AAA.*')|(sender matches '(?i).*[email protected]*')"/>/>
<bean id="mailReceiver" class="com.mfr.email.EmailReceiver"/>
<int:service-activator input-channel="receiveChannel" ref="mailReceiver" method="process"/>
EmailReceiver.java
public void process(Message message) {
System.out.println("Got mail match with filter criteria!");
try {
String subject = message.getSubject();
.........
Folder folder = message.getFolder();
folder.open(Folder.READ_WRITE);
String messageId = ((MimeMessage)message).getMessageID();
Message[] messages = folder.getMessages();
FetchProfile contentsProfile = new FetchProfile();
contentsProfile.add(FetchProfile.Item.ENVELOPE);
contentsProfile.add(FetchProfile.Item.CONTENT_INFO);
contentsProfile.add(FetchProfile.Item.FLAGS);
folder.fetch(messages, contentsProfile);
for (int i = 0; i < messages.length; i++) {
Message loopMsg = messages[i];
String loopMsgId = ((MimeMessage)loopMsg).getMessageID();
if (loopMsgId.equals(messageId)) {
Flags processedFlag = new Flags();
processedFlag.add(Flags.Flag.ANSWERED);
processedFlag.add(Flags.Flag.SEEN);
loopMsg.setFlags(processedFlag, true);
break;
}
}
folder.expunge();
folder.close(true);
} catch (Exception e) {
e.printStackTrace();
}
}
我建議你在你的javamail屬性中設置'mail.debug = true',看看它是否提供了任何線索。 – 2015-02-05 17:50:59
謝謝加里。我設置了mail.debug = true,但沒有返回有用的信息。當我調用mail.saveChanges()時,沒有例外,沒有日誌。我想那時候,文件夾已經關閉了,因此不會有任何更改會被應用。 – user1601373 2015-02-05 19:46:16