-
Notifications
You must be signed in to change notification settings - Fork 181
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
base: master
Are you sure you want to change the base?
Add a test for an email with UTF-8 subject #484
Conversation
e1109c8
to
995e18c
Compare
995e18c
to
9c2aa66
Compare
try { | ||
MimeMessage message = GreenMailUtil.createTextEmail( | ||
"to@localhost", "from@localhost", "will be replaced", "body", greenMail.getSmtp().getServerSetup()); | ||
message.setHeader("Subject", subject); |
There was a problem hiding this comment.
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)));
There was a problem hiding this comment.
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).
There was a problem hiding this comment.
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:
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 ... ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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 themail.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