Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a test for an email with UTF-8 subject #484

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

boris-petrov
Copy link
Contributor

This test is not "complete". I think it's not supposed to work as-is. You see I set the Subject header directly with some Unicode symbols in it (because I don't want them to be encoded). Java Mail is supposed to support that with the mail.mime.allowutf8 property set. That's missing from the test - I'm not sure how to correctly set it here. But in any case - even with it set, still the resulting subject contains ??? (at least in my own tests). Not sure if I'm doing something wrong or that's an issue in Greenmail.

cc @marcelmay

try {
MimeMessage message = GreenMailUtil.createTextEmail(
"to@localhost", "from@localhost", "will be replaced", "body", greenMail.getSmtp().getServerSetup());
message.setHeader("Subject", subject);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All headers must be encoded, see https://www.rfc-editor.org/rfc/rfc2047 for details.

Could be done e.g. via

message.setHeader("Subject", MimeUtility.encodeText(subject));

or indirectly by using

message.setSubject(...)

Longer subjects (encoded >76 chars) need to be folded, too. Example from https://github.com/jakartaee/mail-api/blob/master/api/src/main/java/jakarta/mail/internet/MimeMessage.java#L874 :

		setHeader("Subject", MimeUtility.fold(9,
		    MimeUtility.encodeText(subject, charset, null)));

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@marcelmay thanks for the response. I obviously haven't read the RFC, however isn't the mail.mime.allowutf8 property exactly for that? Doesn't it allow setting UTF-8 symbols in headers without encoding first? That requires server support as far as I understand but otherwise it's supposed to work. Or did I misunderstand something? If I'm correct, then this test should work (after mail.mime.allowutf8 is somehow set - which I haven't done - please see my initial comment).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After diving into JavaMail sources this will only work if the SMTP server also announces SMTPUTF8, which GreenMail currently does not support:

https://github.com/javaee/javamail/blob/master/mail/src/main/java/com/sun/mail/smtp/SMTPTransport.java#L768 :

	    if (allowutf8 && !supportsExtension("SMTPUTF8"))
		logger.log(Level.INFO, "mail.mime.allowutf8 set " +
			    "but server doesn't advertise SMTPUTF8 support");

It is really mail server dependent. If I force the property, it shows up in the logs:

Feb 06, 2023 9:55:41 PM com.sun.mail.smtp.SMTPTransport protocolConnect
INFO: mail.mime.allowutf8 set but server doesn't advertise SMTPUTF8 support

I created #535 for SMTPUTF8. Though I believe not many servers support it ... ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No idea how many servers support it. And yes, I guess GreenMail also doesn't support that. But in any case, this is rather low-priority I would think. #481 and #483 are much more important.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants