<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style id="signatureStyle" type="text/css"><!--#x22dfd998cf8b47c #xc42d577871334d2cbca17ccda13140c5 p.MsoNormal
{margin: 0cm 0cm 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;}
#x22dfd998cf8b47c #xc42d577871334d2cbca17ccda13140c5 a:link
{color: rgb(5, 99, 193); text-decoration: underline;}
#x22dfd998cf8b47c #xc42d577871334d2cbca17ccda13140c5 a:visited
{color: rgb(149, 79, 114); text-decoration: underline;}
--></style><style id="css_styles" type="text/css"><!--blockquote.cite { margin-left: 5px; margin-right: 0px; padding-left: 10px; padding-right:0px; border-left: 1px solid #cccccc }
blockquote.cite2 {margin-left: 5px; margin-right: 0px; padding-left: 10px; padding-right:0px; border-left: 1px solid #cccccc; margin-top: 3px; padding-top: 0px; }
a img { border: 0px; }
li[style='text-align: center;'], li[style='text-align: center; '], li[style='text-align: right;'], li[style='text-align: right; '] {  list-style-position: inside;}
body { font-family: 'Segoe UI'; font-size: 12pt; }
.quote { margin-left: 1em; margin-right: 1em; border-left: 5px #ebebeb solid; padding-left: 0.3em; }
--></style>
</head>
<body>
<div>Hi,</div>
<div><br>
</div>
<div>After reading a bit the code and trying to understand it, here is what I think happens here:</div>
<div><br>
</div>
<div>Given a bogus Message-ID, for example (notice it's missing angle brackets < >:</div>
<div>
<div id="x6807bc31ea484be9a15c3e4440f4d41d">
<div class="plain_line" style="background-color:rgba(0,0,0,0);margin:0px;"><span><br>
</span></div>
<div class="plain_line" style="background-color:rgba(0,0,0,0);margin:0px;"><span>Message-ID: </span><span>1883biz_pay_after_purchase:0:0_572392900$ae7ed6e4d53b424c84aaf83b30c507e7</span></div>
<div class="plain_line" style="background-color:rgba(0,0,0,0);margin:0px;"><br>
</div>
<div class="plain_line" style="background-color:rgba(0,0,0,0);margin:0px;">Dovecot is parsing Message-ID headers and is looking for the angle bracket as the begining of the Message-ID:</div>
<div class="plain_line" style="background-color:rgba(0,0,0,0);margin:0px;"><a href="https://github.com/dovecot/core/blob/d2ff32792ac052610cea7d65f30de1ee139cb55c/src/lib-mail/message-id.c#L75">https://github.com/dovecot/core/blob/d2ff32792ac052610cea7d65f30de1ee139cb55c/src/lib-mail/message-id.c#L75</a></div>
</div>
</div>
<div><span><br>
</span></div>
<div><span>As none is found it will act as if there was no Message-ID header in the mail (even that the header is present).</span></div>
<div><span><br>
</span></div>
<div>Then, pigeonhole's redirect function  is told to generate a new Message-ID if none was previously detected:</div>
<div><a href="https://github.com/dovecot/pigeonhole/blob/5a3f4bd672cc2fb9e755a4b09c4753ac86e15f99/src/lib-sieve/cmd-redirect.c#L569">https://github.com/dovecot/pigeonhole/blob/5a3f4bd672cc2fb9e755a4b09c4753ac86e15f99/src/lib-sieve/cmd-redirect.c#L569</a></div>
<div><br>
</div>
<div>The result is the mail being forwarded, in this case, is now having dual Message-ID and is not RFC 5322 compliant anymore and can be rejected for this reason (hi, gmail?)</div>
<div><a href="https://www.spamresource.com/2022/08/gmail-weird-rfc-5322-bounces-and-what.html">https://www.spamresource.com/2022/08/gmail-weird-rfc-5322-bounces-and-what.html</a></div>
<div><br>
</div>
<div>Some thoughts:</div>
<div><br>
</div>
<div>
<div id="xf1cf6d8ac9d9474ab3ebf3d9909a76a8">- First, to be honest, I'm not sure gmail would accept the original mail with the bogus Message-ID sent directly to their servers, but if it was refused, I would assume that these senders would have fixed the issue
 on their side so their message are delivered (unless there is some whitelisting going on?)</div>
</div>
<div id="xf1cf6d8ac9d9474ab3ebf3d9909a76a8"><br>
</div>
<div id="xf1cf6d8ac9d9474ab3ebf3d9909a76a8">- <span>What options could we have to resolve this?</span> </div>
<div><br>
</div>
<div>a) Having dovecot core to remove the Message-ID header line from the mail if it is not going to consider it valid ? (So there is no dupe headers when pigeonhole adds one?)</div>
<div>b) Having pigeonhole check, when adding a new valid Message-ID, if there is already one existing, and remove the bogus one ?</div>
<div> </div>
<div>For now, to workaround this, I'm trying to find a way in the mail flow on our servers to keep only the top most Message-ID when more than one exists.</div>
<div>Maybe using: <a href="https://www.postfix.org/postconf.5.html#smtp_header_checks" style="font-size: 12pt;">https://www.postfix.org/postconf.5.html#smtp_header_checks</a> but I'm not sure how to achieve it yet or even if it's possible.</div>
<div><br>
</div>
<div>Kind regards</div>
<div><br>
</div>
<div id="signature_old">
<div id="x22dfd998cf8b47c">
<div id="xc42d577871334d2cbca17ccda13140c5">
<p class="MsoNormal" xmlns="http://www.w3.org/TR/REC-html40"><b><span lang="EN-US" style="font-size:10.0pt;color:#C00000;
mso-ansi-language:EN-US;mso-fareast-language:#2000">Sébastien RICCIO</span></b><span lang="EN-US"><o:p xmlns:o="urn:schemas-microsoft-com:office:office"></o:p></span></p>
<p class="MsoNormal" xmlns="http://www.w3.org/TR/REC-html40"><b><span lang="EN-US" style="font-size: 10pt;">SYSTEM ADMINISTRATOR</span></b><span lang="EN-US"><o:p xmlns:o="urn:schemas-microsoft-com:office:office"></o:p></span></p>
<p class="MsoNormal" xmlns="http://www.w3.org/TR/REC-html40"><b><span lang="EN-US" style="font-size:8.0pt;color:#C00000;
mso-ansi-language:EN-US;mso-fareast-language:#2000">P</span></b><span lang="EN-US" style="font-size: 8pt;">  +41 840 888 888<o:p xmlns:o="urn:schemas-microsoft-com:office:office"></o:p></span></p>
<p class="MsoNormal" xmlns="http://www.w3.org/TR/REC-html40"><b><span lang="EN-US" style="font-size:8.0pt;color:#C00000;
mso-ansi-language:EN-US;mso-fareast-language:#2000">F</span></b><b><span lang="EN-US" style="font-size:8.0pt;color:#538135;mso-ansi-language:EN-US;
mso-fareast-language:#2000"> 
</span></b><span lang="EN-US" style="font-size: 8pt;">+41 840 888 000</span><span lang="EN-US" style="font-size: 12pt;"><o:p xmlns:o="urn:schemas-microsoft-com:office:office"></o:p></span></p>
<p class="MsoNormal" xmlns="http://www.w3.org/TR/REC-html40"><b><span lang="EN-US" style="font-size:8.0pt;color:#C00000;
mso-ansi-language:EN-US;mso-fareast-language:#2000">M</span></b><b><span lang="EN-US" style="font-size: 8pt;">
</span></b><b><span lang="EN-US" style="font-size:
8.0pt;mso-ansi-language:EN-US;mso-fareast-language:#2000"><span style="color: rgb(0, 0, 255);"><a href="mailto:sriccio@swisscenter.com" style="color: rgb(5, 99, 193);">sriccio@swisscenter.com</a></span></span></b></p>
<p class="MsoNormal" xmlns="http://www.w3.org/TR/REC-html40"><b><span lang="EN-US" style="font-size:
8.0pt;mso-ansi-language:EN-US;mso-fareast-language:#2000"><br>
</span></b></p>
</div>
</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div>
<div>------ Message d'origine ------</div>
<div>De "<a href="mailto:michael.zork@feierfighter.de">michael.zork@feierfighter.de</a>" <<a href="mailto:michael.zork@feierfighter.de">michael.zork@feierfighter.de</a>></div>
<div>À "<a href="mailto:dovecot@dovecot.org">dovecot@dovecot.org</a>" <<a href="mailto:dovecot@dovecot.org">dovecot@dovecot.org</a>></div>
<div>Date 01.10.2022 14:49:13</div>
<div>Objet Re: Re[6]: Pigeonhole redirect is adding a message-id header when it already exists</div>
</div>
<div><br>
</div>
<div id="xba9ead08f68d497">
<blockquote cite="20221001124913.E5D52A6327@smtp02.mail.de" type="cite" class="cite2">
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi there,</div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
 </div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I can confirm this behavior. A few months ago I introduced a milter which is checking for multiple headers when the RFC says that there just should be one of them For example "Message-Id".</div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
 </div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I found the described problem in an email coming from Alibaba, which had an invalid "Message-Id" header. It didn't contain an "@" sign or similar. It was RFC-invalid.</div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
 </div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
This email was sent from Alibaba to a German email provider. There was a redirect at that email provider, pointing to my mailserver.</div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
 </div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
My server rejected the email because there were 2 "Message-Id" headers: The original invalid "Message-Id" header from Alibaba, and a new "Message-Id" header from the German provider, which seems to have been added during the redirect. There were "Dovecot-sieve"
 headers in that mail, so my guess was that it happened because of Dovecot-sieve/pigeonhole implementation.
</div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
 </div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I contacted the email provider, asking for help. Asking if it really is a bug in pigeonhole (or maybe some other system at that provider, who knows). And I contacted Alibaba, so they fix the invalid "Message-Id". I got responses from both, but until now, as
 far as I can see, it has not been fixed. </div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
 </div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
The best fix would be (if it really is a bug in pigeonhole), if pigeonhole fixes the problem, then it's fixed for all users of Dovecot. I guess Alibaba is not the only sender with an invalid "Message-ID" header, but that's the only one I saw.</div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
 </div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Michael</div>
<div style="font-family: arial, helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
 </div>
<div><br>
<br>
Am 01-Oct-2022 14:00:45 +0200 schrieb <a href="mailto:sriccio@swisscenter.com">sriccio@swisscenter.com</a>:</div>
<blockquote style="margin-left: 0; padding-left: 5px; border-left: 2px solid navy;">
>You wrote in the original email the message was rejected. Sorry I don't have login access to my gmail test account anymore since the google @#$%@#$% wanted to have me add a phone number.<br>
<br>
In my original post I said that gmail was rejecting the forwards because <br>
of duplicate headers, and that the duplicate header seems to be a <br>
Message-ID added by pigeonhole when it's "not happy" with the original <br>
mail Message-ID.<br>
<br>
I probably failed to explain the issue clearly and sorry for that.<br>
<br>
Thank you anyway for trying to help :)<br>
<br>
</blockquote>
</blockquote>
</div>
</body>
</html>