Benoit Tellier [Fri, 17 Sep 2021 10:38:58 +0000 (17:38 +0700)]
[maven-release-plugin] prepare for next development iteration
Benoit Tellier [Fri, 17 Sep 2021 10:37:37 +0000 (17:37 +0700)]
[maven-release-plugin] prepare release apache-mime4j-project-0.8.6
Ondra Pelech [Sat, 4 Sep 2021 08:43:16 +0000 (10:43 +0200)]
Add maven-javadoc-plugin (#54)
To generate the Javadoc run:
```
mvn clean install site
```
The javadoc will be located in `target/site/apidocs`
To be published on the website.
Co-authored-by: Tellier Benoit <btellier@linagora.com>
Benoit TELLIER [Sat, 4 Sep 2021 08:42:57 +0000 (15:42 +0700)]
MIME4J-306 MimeUtil::unfold should group char appends (#52)
Calling repeatedly append requires ensuring the capacity amongst other.
Appends to the string builder can be done for all previous chars when a line delimiter is encountered, thus reducing the cost of the operation.
Gain: 66%
Benoit TELLIER [Sat, 4 Sep 2021 08:42:47 +0000 (15:42 +0700)]
MIME4J-305 ContentUtil::decode can avoid using StringBuilder (#51)
StringBuilder is an expensive construct, we spend most of our time, for each character, ensuring the capacity of the string builder.
Size being known, the operation simple, we can directly operate on top of a char array.
Gains: 78%
Benoit TELLIER [Sat, 4 Sep 2021 08:42:34 +0000 (15:42 +0700)]
MIME4J-304 DecoderUtil::decodeEncodedWords without REGEXP (#50)
Benoit Tellier [Fri, 30 Jul 2021 01:55:40 +0000 (08:55 +0700)]
[Documentation] Fix site.xml license
RAT plugin complains
Benoit Tellier [Fri, 30 Jul 2021 01:42:54 +0000 (08:42 +0700)]
[Documentation] Retire HUPA
Benoit Tellier [Fri, 30 Jul 2021 01:42:39 +0000 (08:42 +0700)]
[Documentation] Links should enforce HTTPS in menus
Benoit Tellier [Thu, 1 Jul 2021 07:32:00 +0000 (14:32 +0700)]
[maven-release-plugin] prepare for next development iteration
Benoit Tellier [Thu, 1 Jul 2021 07:31:10 +0000 (14:31 +0700)]
[maven-release-plugin] prepare release apache-mime4j-project-0.8.5
Benoit Tellier [Thu, 1 Jul 2021 07:11:26 +0000 (14:11 +0700)]
[RELEASE] Roll out changelog
Benoit Tellier [Mon, 28 Jun 2021 00:03:33 +0000 (07:03 +0700)]
[CHANGELOG] Track changes prior 0.8.5
Benoit Tellier [Thu, 24 Jun 2021 10:00:46 +0000 (17:00 +0700)]
[EXAMPLES] RAT exceptions for newly added example resources
Benoit Tellier [Thu, 24 Jun 2021 07:48:40 +0000 (14:48 +0700)]
[EXAMPLES] Github links for examples
- One can then easily find them without
requiring to clone the repository
- Mention explaining they could easily be
launched from within an IDE
- Also, I added the new `Parsing` example.
Benoit Tellier [Thu, 24 Jun 2021 07:47:15 +0000 (14:47 +0700)]
[EXAMPLES] Fix a typo in NAV panel
We have several examples...
Benoit Tellier [Thu, 24 Jun 2021 07:46:50 +0000 (14:46 +0700)]
[EXAMPLES] Link github and sit examples from the Mime4J index
This makes discovering the examples easier.
Benoit Tellier [Thu, 24 Jun 2021 07:35:59 +0000 (14:35 +0700)]
[EXAMPLES] Add an example for parsing messages
Benoit Tellier [Thu, 24 Jun 2021 07:35:42 +0000 (14:35 +0700)]
[EXAMPLES] Migrate away from MessageBuilder
Benoit Tellier [Thu, 24 Jun 2021 07:35:10 +0000 (14:35 +0700)]
[EXAMPLES] IterateOverMbox should be easy to launch from an IDE
We can default to a local resource if no argument is provided.
Benoit Tellier [Thu, 24 Jun 2021 07:34:31 +0000 (14:34 +0700)]
[EXAMPLES] MessageTree should be easy to launch from an IDE
We can default to a local resource if no argument is provided.
Benoit Tellier [Sun, 20 Jun 2021 03:29:17 +0000 (10:29 +0700)]
MIME-298 DateTimeFieldLenientImpl: remove unneeded option
Removing it breaks no tests, as 0000 is the
default GMT.
This prevents one defensive copy of the
parsed entity thus gets parsing slightly
faster.
Benoit Tellier [Mon, 21 Jun 2021 04:45:34 +0000 (11:45 +0700)]
MIME-303 Base64OutputStream is two time slower than its Java8 counterpart
While looking and running mime4J benchmarks, I tried some alternative implementations for Base64 encoding / decoding.
Base64InputStream proved to be 20% faster than its Java8 counterpart.
However, throughtput went from 280 MB/s to 520 MB/s by switching to Java8 Base64.getMimeEncoder().wrap(...)
Tests pass and this speeds up message writing operations... Apache James can for instance benefit of it when composing JMAP messages with large attachments.
Tellier Benoit [Sun, 20 Jun 2021 02:45:20 +0000 (09:45 +0700)]
MIME4J-298 Convert DateTimeFieldLenientImpl to DateTimeFormatter (#44)
This allows:
- Specifying all patterns at once, avoiding one parsing pass per pattern
- DateTimeFormatter is thread safe, thus can be initialized once and reused
Special care have been taken to preserve previous behaviour (missing tests were added):
- Accept extra input after the date
- Relax cross-validation
Benoit Tellier [Tue, 15 Jun 2021 07:13:21 +0000 (14:13 +0700)]
MIME4J-301 ContentTypeFieldImpl: more tests for extra semicolon in parameters
Benoit Tellier [Tue, 15 Jun 2021 07:08:15 +0000 (14:08 +0700)]
MIME4J-301 ContentTypeFieldImpl do fill a stacktrace when ended by a semicolon
While running some performance tests for the Apache James server, I noted a bunch of time spent filling some stacktraces while parsing some content types.
I noted that inputs like `Content-Type: text/plain;` was causing ContentTypeFieldImpl to fill some stacktraces while not preventing this class from doing a correct parsing.
As such, it make sense to me to consider such inputs as valid.
Benoit Tellier [Fri, 18 Jun 2021 05:44:55 +0000 (12:44 +0700)]
MIME4J-302 Use lowercase when looking up known headers
An optimization implemented in MaximalBodyDescriptor aims at reducing the costs of toLowerCase calls: upon known header names lookup the lowercase version of the field instead of the normal version to benefit optimizations (calling toLowerCase on a lowerCase string do not do allocation, it just iterates String content). It might be worth generalizing it.
Benoit Tellier [Thu, 17 Jun 2021 08:13:20 +0000 (15:13 +0700)]
MIME4J-302 Parser should avoid multiple calls to "toLowerCase"
I was surprised MIME4J parsing spends 18% of its time calling toLowerCase on header names. This represents 12% of allocated memory.
By holding the lowerCased name as part of the field name, and doing lazy initialization on it we can get this down to 6%.
Benoit Tellier [Fri, 28 May 2021 05:05:36 +0000 (12:05 +0700)]
MIME4J-300 Set up an automated build for Apache MIME4J
Benoit Tellier [Thu, 27 May 2021 07:46:56 +0000 (14:46 +0700)]
[WARNING] Remove unecessary toString calls
The StringBuilder handles the conversion
itself.
Benoit Tellier [Thu, 27 May 2021 07:46:13 +0000 (14:46 +0700)]
[WARNING] Group: iterations can be replaces by Collection::addAll
This is likely to be more efficient.
Benoit Tellier [Thu, 27 May 2021 07:45:27 +0000 (14:45 +0700)]
[WARNING] Manual calls to Math.max
Using Math.max is more explicit and thus
should be favored.
Benoit Tellier [Thu, 27 May 2021 07:44:34 +0000 (14:44 +0700)]
[WARNING] Unneeded array boxing
Benoit Tellier [Thu, 27 May 2021 07:43:26 +0000 (14:43 +0700)]
[WARNING] Remove uneeded redundant interface qualifiers
Idem, this was reported by intelliJ inspections.
Benoit Tellier [Thu, 27 May 2021 07:42:28 +0000 (14:42 +0700)]
[WARNING] MessageBuilder::getReadDate infinitely recurse
This was reported by intelliJ as "likely a bug".
There is no shortcut to exit this infinite recursion.
The pattern applied with MIME4J-262, that is
to call the same method on the delegate
builder is not followed.
Benoit Tellier [Thu, 27 May 2021 07:37:51 +0000 (14:37 +0700)]
[WARNING] Remove unused import
Run intelliJ inspection to find unused imports
Jochen Wiedmann [Tue, 25 May 2021 10:19:38 +0000 (12:19 +0200)]
Merge pull request #17 from bwndai/encodeQ
MIME4J-273 Fix encoded word splitting point for EncodeQ method as well.
Jochen Wiedmann [Tue, 25 May 2021 10:17:06 +0000 (12:17 +0200)]
Merge pull request #40 from chibenwa/MIME4J-299
MIME4J-299 Access to the Header map
Benoit Tellier [Tue, 25 May 2021 08:25:07 +0000 (15:25 +0700)]
fixup! MIME4J-299 Access to the Header map
Benoit Tellier [Mon, 24 May 2021 11:50:27 +0000 (18:50 +0700)]
[REFACTORING] Pre-compile ContentLocationFieldImpl REGEX
Using String::replaceAll leads to recompile the regex on each calls.
Benoit Tellier [Mon, 24 May 2021 11:47:53 +0000 (18:47 +0700)]
[REFACTORING] Pre-compile EncoderUtil::quote REGEX
Using String::replaceAll leads to recompile the regex on each calls.
Benoit Tellier [Mon, 24 May 2021 10:47:50 +0000 (17:47 +0700)]
[REFACTORING] AbstractHeader was calling toLowerCase twice
This generates needless object allocation and uselessly huggs CPU
Benoit Tellier [Mon, 24 May 2021 00:30:27 +0000 (07:30 +0700)]
[REFACTORING] AbstractEntityBuilder was colling toLowerCase twice
Benoit Tellier [Sun, 23 May 2021 17:50:19 +0000 (00:50 +0700)]
[WARNING] Remove redundant string operations
Run an intelliJ inspection to sole a warning
Benoit Tellier [Tue, 25 May 2021 00:12:45 +0000 (07:12 +0700)]
MIME4J-299 Access to the Header map
Preserving the "grouped by name" structure can ease the work of callers.
Felix Knecht [Mon, 2 Nov 2015 13:43:33 +0000 (21:43 +0800)]
MIME4J-255 Add method to allow setting of "no recurse" mode to underlying mime token stream
Benoit Tellier [Wed, 21 Apr 2021 10:49:32 +0000 (17:49 +0700)]
MIME4J-297 0.8.4 release in the changelog
Benoit Tellier [Fri, 16 Apr 2021 03:30:22 +0000 (10:30 +0700)]
MIME4J-297 Merge the changelog and the release notes together, drop 0.9.0
Benoit Tellier [Fri, 16 Apr 2021 03:25:08 +0000 (10:25 +0700)]
MIME4J-297 Detail more the changelog pre-8.0.4 release
Benoit Tellier [Wed, 14 Apr 2021 06:57:28 +0000 (13:57 +0700)]
[maven-release-plugin] prepare for next development iteration
Benoit Tellier [Wed, 14 Apr 2021 06:56:45 +0000 (13:56 +0700)]
[maven-release-plugin] prepare release apache-mime4j-project-0.8.4
Jason Cobb [Tue, 30 Mar 2021 21:18:41 +0000 (17:18 -0400)]
MIME4J-296 Use Path instead of File in MboxIterator
Tellier Benoit [Tue, 30 Mar 2021 10:42:22 +0000 (17:42 +0700)]
JAMES-3226 Ignore Antora doc missing licenses (#36)
Tyler Rockwood [Tue, 30 Mar 2021 10:41:58 +0000 (05:41 -0500)]
MIME4J-290 Fix build for recent mvn and JDK versions (#35)
* [MIME4J-290] Fix build for recent mvn and JDK versions
* Remove unneed import
Tyler Rockwood [Tue, 30 Mar 2021 10:41:35 +0000 (05:41 -0500)]
MIME4J-295 Allow for overriding the specified charset when decoding q or b encoded words (#34)
* Allow for overriding the specified charset when decoding q or b encoded words.
It it very common to recieve mislabeled charsets for windows-1252, which usually end up
being ISO-8898-1. This is a minimal change allows our email servers to not have to rewrite
q-encoding, but doesn't change any default behaviors within Mime4J.
* Address review feedback
* Tighten up charset lookup method
Jason Cobb [Mon, 22 Mar 2021 16:59:51 +0000 (12:59 -0400)]
MIME4J-233 Fix ByteBufferInputStream read implementation (#33)
* Fix ByteBufferInputStream read implementation
* Check preconditions in read
* Add license to ByteBufferInputStreamTest
Eugen Stan [Thu, 30 Jul 2020 23:08:24 +0000 (02:08 +0300)]
JAMES-3226 #comment Added antora docs stub
Benoit Tellier [Mon, 6 Jul 2020 05:09:28 +0000 (12:09 +0700)]
MIME4J-273 Add limit and position to LimitedInputStream exception message
Tran Tien Duc [Wed, 4 Sep 2019 02:11:58 +0000 (09:11 +0700)]
MIME4J-289 Upgrade maven-assembly-plugin 3.0.0 -> 3.1.1
- Use goals `single` instead of `attached` by the recommendation at
http://maven.apache.org/plugins-archives/maven-assembly-plugin-2.5.5/attached-mojo.html
Tran Tien Duc [Wed, 4 Sep 2019 01:55:08 +0000 (08:55 +0700)]
MIME4J-289 Upgrade apache parent pom version 18 -> 21
Tran Tien Duc [Tue, 3 Sep 2019 11:35:26 +0000 (18:35 +0700)]
MIME4J-289 Upgrade guava 18.0 -> 28.1-jre
Tran Tien Duc [Tue, 3 Sep 2019 11:34:38 +0000 (18:34 +0700)]
MIME4J-289 Upgrade slf4j-api 1.7.7 -> 1.7.28
Tran Tien Duc [Tue, 3 Sep 2019 11:31:41 +0000 (18:31 +0700)]
MIME4J-289 Upgrade mockito 1.9.5 -> 3.0.0
Tran Tien Duc [Tue, 3 Sep 2019 11:30:36 +0000 (18:30 +0700)]
MIME4J-289 Upgrade assertj 1.7.1 -> 3.13.2
Tran Tien Duc [Tue, 3 Sep 2019 11:27:42 +0000 (18:27 +0700)]
MIME4J-289 Upgrade log4j 1.2.14 -> 1.2.17
Tran Tien Duc [Tue, 3 Sep 2019 11:23:53 +0000 (18:23 +0700)]
MIME4J-289 Upgrade junit 4.10 -> 4.12
Tran Tien Duc [Tue, 3 Sep 2019 11:22:54 +0000 (18:22 +0700)]
MIME4J-289 Upgrade common-logging 1.1.1 -> 1.2
Tran Tien Duc [Tue, 3 Sep 2019 11:21:26 +0000 (18:21 +0700)]
MIME4J-289 Upgrade common-io 2.4 -> 2.6
Tran Tien Duc [Tue, 3 Sep 2019 11:19:11 +0000 (18:19 +0700)]
MIME4J-289 Upgrade maven-jar-plugin 2.4 -> 3.1.2
Tran Tien Duc [Tue, 3 Sep 2019 11:16:51 +0000 (18:16 +0700)]
MIME4J-289 Upgrade maven-bundle-plugin 2.3.7 -> 4.2.1
Tran Tien Duc [Tue, 3 Sep 2019 11:08:50 +0000 (18:08 +0700)]
MIME4J-289 Upgrade maven-compiler-plugin 3.0 -> 3.8.1
Bowen Dai [Fri, 27 Apr 2018 17:12:32 +0000 (10:12 -0700)]
MIME4J-273 Fix encoded word splitting point for EncodeQ method as well.
Benoit Tellier [Fri, 22 Mar 2019 07:36:48 +0000 (14:36 +0700)]
MIME4J-287 Use JDK 1.8
Benoit Tellier [Fri, 22 Mar 2019 07:33:38 +0000 (14:33 +0700)]
CHANGELOG for MIME4J
Benoit Tellier [Tue, 19 Mar 2019 03:23:04 +0000 (10:23 +0700)]
CHANGELOG for MIME4J
Benoit Tellier [Thu, 14 Mar 2019 04:44:49 +0000 (11:44 +0700)]
[maven-release-plugin] prepare for next development iteration
Benoit Tellier [Thu, 14 Mar 2019 04:44:09 +0000 (11:44 +0700)]
[maven-release-plugin] prepare release apache-mime4j-project-0.8.3
Dmitry Potapov [Fri, 18 Jan 2019 15:17:43 +0000 (18:17 +0300)]
MIME4J-283 DecoderUtil performance fix
Antoine Duprat [Thu, 13 Sep 2018 06:57:47 +0000 (08:57 +0200)]
Merge remote-tracking branch 'dmak/MIME4J-280'
Dmitry Katsubo [Wed, 23 May 2018 10:25:03 +0000 (12:25 +0200)]
MIME4J-280 Wrapping the underlying exception rather then ignoring it.
Bowen [Fri, 25 May 2018 04:29:43 +0000 (21:29 -0700)]
Fix failing tests.
Dmitry Katsubo [Tue, 22 May 2018 10:17:11 +0000 (12:17 +0200)]
MIME4J-279 Fixed JavaDoc errors to comply with Java8.
benwa [Tue, 22 May 2018 08:57:07 +0000 (15:57 +0700)]
Add the lost self link for site of Mime4J doc
Reported and fixed by https://github.com/dongxuwang
Artur Jablonski [Fri, 18 Aug 2017 09:51:40 +0000 (11:51 +0200)]
MIME4J-263 decoding encoded words with empty encoded-text
Dmitry Katsubo [Tue, 22 May 2018 07:42:07 +0000 (09:42 +0200)]
MIME4J-270 Using "alternative" as default subtype.
Bowen Dai [Fri, 27 Apr 2018 17:12:32 +0000 (10:12 -0700)]
Fix encoded word splitting point for EncodeQ method as well.
benwa [Fri, 27 Apr 2018 08:47:58 +0000 (15:47 +0700)]
[maven-release-plugin] prepare for next development iteration
benwa [Fri, 27 Apr 2018 08:47:22 +0000 (15:47 +0700)]
[maven-release-plugin] prepare release apache-mime4j-project-0.8.2
Bowen [Sat, 14 Apr 2018 05:15:31 +0000 (22:15 -0700)]
MIME4J-273 Update encodeB encoding bytes splitting point.
EncoderUtil.encodeIfNecessary(<unicode string>, EncoderUtil.Usage.TEXT_TOKEN, <number less than 10>) is broken in some cases, such as : https://issues.apache.org/jira/projects/MIME4J/issues/MIME4J-250?filter=allopenissues
The culprit is line
String part1 = text.substring(0, text.length() / 2);
Since the breaking point can be in between one unicode character. Once the string is breaking into two part, part1 will have a broken tail and part2 will have a broken head in this case.
Update test for failing testEncodeEncodedWordSplitForUnicode. Changed parameter is to force word split.
benwa [Mon, 9 Apr 2018 03:06:56 +0000 (10:06 +0700)]
MIME4J-272 Implicit DOM builder calls
Matthieu Baechler [Wed, 28 Mar 2018 15:01:14 +0000 (17:01 +0200)]
MIME4J-271 Make possible to define a Content-Type parameter
benwa [Tue, 13 Mar 2018 02:36:55 +0000 (09:36 +0700)]
MIME4J-269 Expose a convenient 100 Mo limited "permissive" mime config limit
This aims at remaining very permissive while still denying a single email to use all JVM memory.
benwa [Fri, 9 Mar 2018 07:29:07 +0000 (14:29 +0700)]
MIME4J-268 DefaultMessageWriter should expose a convenient *asBytes* method
benwa [Fri, 9 Mar 2018 07:23:06 +0000 (14:23 +0700)]
MIME4J-269 Introduce a Lenient default mimeConfig object
benwa [Wed, 17 Jan 2018 09:08:40 +0000 (16:08 +0700)]
MIME4J-267 DateTimeFieldLenientImpl should support date with no timezones.
benwa [Thu, 15 Jun 2017 00:58:38 +0000 (07:58 +0700)]
JAMES-1789 Remove mention to SVN
benwa [Fri, 9 Jun 2017 02:49:22 +0000 (09:49 +0700)]
[maven-release-plugin] prepare for next development iteration
benwa [Fri, 9 Jun 2017 02:48:48 +0000 (09:48 +0700)]
[maven-release-plugin] prepare release apache-mime4j-project-0.8.1
benwa [Mon, 5 Jun 2017 11:03:53 +0000 (18:03 +0700)]
JAMES-2045 DateTimeFieldImpl should assume 19xx century when date without century >= 70
benwa [Mon, 5 Jun 2017 06:54:26 +0000 (13:54 +0700)]
JAMES-2045 LenientDateTimeField should support partial years