我想使用 java 解析和过滤我的 local 收件箱(例如:thunderbird)中的消息。比如:
java MyProgram < ~/.thunderbird/xxxxx.default/Mail/yyyyy/Inbox > statistics.txt
据我所知,有 jakarta mail api 及其实现( org.eclipse.angus ),但我看到的所有示例都使用 remote 收件箱,使用
import javax.mail.Session;
import javax.mail.Store;
那么有没有一个 API(在雅加达邮件中?)可以解析这样的 local 平面文件并让我迭代所有消息。比如:
ParserSomething localbox = ParserSomething.of(System.in);
Iterator<Message> iter = localbox.iterator();
while(iter.hasNext()) {
Message msg = iter.next();
System.err.println(msg.getTitle());
for(Attachment a : msg.getAttachements()) {
try(InputStream in = a.getInputStream() ) {
(...)
}
}
}
好的,我得到了答案在这里。
使用org.apache.james.mime4j
import org.apache.james.mime4j.parser.*;
import org.apache.james.mime4j.stream.*;
import org.apache.james.mime4j.*;
public class ScanMail extends AbstractContentHandler {
@Override
public void field(Field field) throws MimeException {
System.out.println(field);
}
public static void main(String[] args) {
try {
final ContentHandler handler = new ScanMail();
final MimeConfig config = MimeConfig.DEFAULT;
final MimeStreamParser parser = new MimeStreamParser(config);
parser.setContentHandler(handler);
parser.parse(System.in);
}
catch(Throwable err) {
err.printStackTrace();
}
}
};
编译:
wget -O work/apache-mime4j-core-0.8.11.jar "https://repo1.maven.org/maven2/org/apache/james/apache-mime4j-core/0.8.11/apache-mime4j-core-0.8.11.jar"
wget -O work/commons-io-2.18.0.jar "https://repo1.maven.org/maven2/commons-io/commons-io/2.18.0/commons-io-2.18.0.jar"
javac -d work -cp work/apache-mime4j-core-0.8.11.jar ScanMail.java
echo | java -cp work:work/apache-mime4j-core-0.8.11.jar:work/commons-io-2.18.0.jar ScanMail