148M max heap size should be more than enough for small systems.
Note that zmlmtpinject will inject the whole file as one message. It does not understand mbox format - you will have to split into individual messages.
The default message size limit is also 10M, so even if it is treated as one big message, the message should be rejected by the LMTP code. I do not understand why an OOM manifested itself. Maybe message parsing code is going bananas?
Can you do this as the zimbra user:
Code:
$ tomcat stop
$ zmlocalconfig -e tomcat_java_options="-client -XX:NewRatio=2 -Xrunhprof:file=/tmp/hprof.txt"
$ tomcat start
$ zmlmtpinject ...
This will cause the JVM to run dog slow, but at the end of the run, the JVM should dump some heap info and we can see why the OOM was triggered.
Remeber to remove the -Xrunhprof:... option when you are done!
What else do the log files say? catalina.out, zimbra.log, etc? Anything interesting there?