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

Attachments with umlauts (äöüß) in filenames get corrupted #1691

Closed
eddi13 opened this issue Mar 21, 2019 · 21 comments
Closed

Attachments with umlauts (äöüß) in filenames get corrupted #1691

eddi13 opened this issue Mar 21, 2019 · 21 comments

Comments

@eddi13
Copy link

eddi13 commented Mar 21, 2019

Hello.

If the attachment name contains an umlaut, the file at the receiver is not readable due to incorrect encoding.
Schöne PDF.pdf

$mail = new PHPMailer();
$mail->setFrom('[email protected]');
$mail->Mailer = 'smtp';
$this->CharSet = PHPMailer::CHARSET_UTF8;
$mail->SMTPAuth = true;
$mail->Host = 'mail.example.com';
$mail->Username = '[email protected]';
$mail->Password = 'pass';
$mail->addAddress('[email protected]');
$mail->Subject = 'Test mail';
$mail->Body = 'Hello';
$mail->addAttachment('/path/to/file/Schöne PDF.pdf');
$mail->send();

Best regards
Eduard Töws

@Synchro
Copy link
Member

Synchro commented Mar 21, 2019

Could you please post the raw headers from the message you receive?

@eddi13
Copy link
Author

eddi13 commented Mar 22, 2019

That's the source code

Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: from mail.radas.de
	by muenchen.radas.lan (Dovecot) with LMTP id kbuvBOWLlFwdRgAA21vmKw
	for <[email protected]>; Fri, 22 Mar 2019 08:16:53 +0100
Received: from localhost (mail.radas.de [127.0.0.1])
	by mail.radas.de (Postfix) with ESMTP id DC3AD2484A15
	for <[email protected]>; Fri, 22 Mar 2019 08:16:52 +0100 (CET)
Authentication-Results: mail.radas.de;
	dkim=pass (1024-bit key; unprotected) header.d=gmx.net [email protected] header.b="gPmrIg9r";
	dkim-atps=neutral
X-Virus-Scanned: by amavisd-new-2.10.1 (20141025) (Debian) at radas.de
X-Spam-Flag: NO
X-Spam-Score: -2.59
X-Spam-Level:
X-Spam-Status: No, score=-2.59 tagged_above=-1000 required=5
	tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
	FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001,
	T_FREEMAIL_DOC_PDF=0.01] autolearn=ham autolearn_force=no
Received: from mail.radas.de ([127.0.0.1])
	by localhost (mail.radas.de [127.0.0.1]) (amavisd-new, port 10024)
	with ESMTP id 3Kz-ossNecio for <[email protected]>;
	Fri, 22 Mar 2019 08:16:52 +0100 (CET)
Received: from mout.gmx.net (mout.gmx.net [212.227.17.22])
	by mail.radas.de (Postfix) with ESMTPS id 126CB24849E3
	for <[email protected]>; Fri, 22 Mar 2019 08:16:52 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net;
	s=badeba3b8450; t=1553239011;
	bh=sl7ZJpEvkkg8Jr6+ytAnKdu0OtTgD8FL3uQnDD6Lta4=;
	h=X-UI-Sender-Class:Date:To:From:Subject;
	b=gPmrIg9rrGsyKERxbc9+JlgIu7D9f5N5Aa94VT8PaNiAUoR82ukvkxaOdBg339uMc
	 Pdg7w/K/Tt6EnaTX8vowrYVsba2+fB8rc1lcTb4ZcEJmi7S8LrV+0JCRtQeJAJ/QwT
	 mEbPKSNQJ8kddG70ZDIJ0USJZpNn5j+DmSG44Tbk=
X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c
Received: from nbranch.radas.loc ([92.116.4.254]) by mail.gmx.com (mrgmx103
 [212.227.17.168]) with ESMTPSA (Nemesis) id 0LcSWg-1ggBKH29pu-00jrrX for
 <[email protected]>; Fri, 22 Mar 2019 08:16:51 +0100
Date: Fri, 22 Mar 2019 08:16:51 +0100
To: [email protected]
From: ET <[email protected]>
Subject: Mail from system
Message-ID: <[email protected]>
X-Mailer: PHPMailer 6.0.6 (https://github.com/PHPMailer/PHPMailer)
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="b1_vP6oXL3ZKWN2orgztMb5SDtz3MSnV2KFxRY9WC8"
X-Provags-ID: V03:K1:iB0MV4qhupXH9EZMfYHkZd670gYekfv6HDXWDaHkEZQzS6g7H8/
 U6moW+u8lMR02XZiRBAgsWIokz+KEYmWgWoBRRVOLAEoiVMQvcoudNGxGHxqcqpU7MCsErz
 nnFZhPp5j748mm1yWkNMaJ+TikEpEpYMi7AMCgUskO83AmWPnRiQ3wCNsv6gWGEyak1ONJx
 dNTYmU4W7MYqxOGpq2Yjg==
X-Spam-Flag: NO
X-UI-Out-Filterresults: notjunk:1;V03:K0:6M/ykJc6L3w=:ToGNgTZRYNmkcQiz7Y8ZDB
 6h4AkFSzG7iUt7jzg6FkBn6hAukkj5LeALWxdLQt2qbDtXtoyidqQ1XRaSKxeelKGrG4JvL0W
 JOWHNmJd/GTbDI6H43Ou2UXTaTlq4fK63KXkQXbBxlMnGJ8tX6q/3UGbMBMwzIMEe3aFoy572
 FD2VC1YHSDNVQZw/beKmAQVEBjXE30qGExlTGfa6TMm9ywAVr9DhllI9Edqv02I/YUh26tKSb
 ODFWy+rrJ7KRYOuag3nmNUpCNa68ZRXI4TtlmmdM7V/MQsp/hSJWwFpKfGUlDm+ED6pXidxAs
 YuNjsAVXycf2H4Lni0A10eAVmVsCXTgI2Vkl7JDdCQykgTD7hFlKsKY3QJtmlwJ2smhU6pHic
 8UHpzSdemDJ41zH/3ctKjXoy6LMbNv8re4UQaRg2wdp9cNjjZxJIuqVaaEBWkwqqRle1QIRFM
 KULPPfQkjc2e50hwPX7lq2PdqTp2ruebzqhkW3GdI9AqumaMOLiRK+unWIQ9FyY9OBgKhNfjo
 v5X5JhTcP/DCmb/s+l0mqB06aZHHIfxEtZNZguRfOtgXCjVsnwRAM02ZLgzmbIjElq8mqgfr3
 bALlyPzt9c6qkfs51KdFeisgWPf8NU8al7x1hksVE2izSrmrakldkPmbZ98CX9LLNwwu9+3Qq
 fqjHRFslD87hl8+5fLyIlV/FSmWN5Gd6cocMJVBBhfCHj67kRXzXAi4Somw8QTlu6xAVFj4K4
 rT0HysMzlNuWdpIeWS3r/2pRvmEl5gQYVoj/oQRAC/XoqJ0zj5YQ9e4KomyOH7SCZXP/3yaPd
 6tOPzPB0sZvNT+Bzvc+zMGRVW02/5OweN8/gdY4uoPd64qv3R5chr+yFgagvwsjOOhnWRZ+O3
 5/qpFIFezucx2/aV7sFO/iy7QjBmz9yaZENcWrbLToYVP6qU/yITGRQXIs7RdSd6/UHBUv9NZ
 v/kwZwrcKZJRjsSwndvJVWCvDkXeznhA=

This is a multi-part message in MIME format.
--b1_vP6oXL3ZKWN2orgztMb5SDtz3MSnV2KFxRY9WC8
Content-Type: text/plain; charset=us-ascii

Guten Tag mein Lehser.

--b1_vP6oXL3ZKWN2orgztMb5SDtz3MSnV2KFxRY9WC8
Content-Type: application/pdf; name="=?utf-8?Q?Sch=C3=B6ne_PDF.pdf?="
Content-ID: <Schöne PDF.pdf>
Content-Disposition: attachment; filename="=?utf-8?Q?Sch=C3=B6ne_PDF.pdf?="

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
mS23UDiWNB8KRRVYMKp6E1/AohtD/KVpFct+GADcYh2uS2/NW3tCLi9HhhOx8jBMJX2kRHILHC7j
qItUT9uiTdACxyi1bRqEERDeLQ6CYcc6wsCPxDSL9b+1NqEkPpZ0ES1hbuGIpOlOEcSOfxNECO7k
fRXEDXJYQIX/7gGzmJNpT5EncT3Rpzd7C3pgyXOUNZe/Qt+AyfswAXY+CJb/zQbp48BSxTerRgSD
Tct+TRYsnhKAcenHFNIHo7fnjraG1NnDV06LWyWy7TOJr2ZN0PXF4Orgjj+p5AZgygFPc+45mdA2
VbkpHpCubUvR0bA9HvIQMuNsnE6A8bIxAGN6NpCR4IzSE4/4J1DNE3jBHB9yEjlO8Tcf/0ozio1M
n3yRcCt4BV4tBhJjjgBX7mppvRq64MC0QDiJ77AhYXRMsVoG/xWUQg4TYL4Y+gLZbNGpwDcM7Lj7
uitNnkSK1eYdpdm0+Ee+0ZqnS17ygfhCHzpZ+8evJQTBV/izW6mcG+k2edRU+FYSbz1umb8cxNUt
BQeb4jmnOhKbtkL9bkF5aQQpqFn//1GuDBfj4COeDo/z2gMev1DE5TJYUtnywEM1kQQ2178Q6yAx
buE09Eny3zZr5sLjm0hA4hQ0GY59KZ9vb62oWq/5jwckPHrmuxkWsa37swAMiVVEfS2j9uuHl4U/
qxNnrWzNYcKeHXoojt26jOqCYwN83LnNZcGDc5vfXJ79dFbu3ur//gdrWvmbZW5kc3RyZWFtCmVu
ZG9iago2IDAgb2JqCjQxMzgKZW5kb2JqCjQgMCBvYmoKPDwvVHlwZS9QYWdlL01lZGlhQm94IFsw
IDAgNTk1IDg0Ml0KL1JvdGF0ZSAwL1BhcmVudCAzIDAgUgovUmVzb3VyY2VzPDwvUHJvY1NldFsv
UERGIC9UZXh0XQovRXh0R1N0YXRlIDEyIDAgUgovRm9udCAxMyAwIFIKPj4KL0NvbnRlbnRzIDUg
MCBSCj4+CmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbCjQgMCBSCl0gL0Nv
dW50IDEKPj4KZW5kb2JqCjEgMCBvYmoKPDwvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMyAwIFIKPj4K
ZW5kb2JqCjcgMCBvYmoKPDwvVHlwZS9FeHRHU3RhdGUKL09QTSAxPj5lbmRvYmoKMTIgMCBvYmoK
PDwvUjcKNyAwIFI+PgplbmRvYmoKMTMgMCBvYmoKPDwvUjEwCjEwIDAgUi9SOAo4IDAgUj4+CmVu
ZG9iagoxMCAwIG9iago8PC9CYXNlRm9udC9MVlNYS0wrVGltZXMtUm9tYW4vRm9udERlc2NyaXB0
b3IgMTEgMCBSL1R5cGUvRm9udAovRmlyc3RDaGFyIDMyL0xhc3RDaGFyIDEyMS9XaWR0aHNbCjI1
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMjUwIDAgMjUwIDAKMCAwIDAgMCAwIDAgMCAwIDAgMCAw
IDAgMCAwIDAgMAowIDcyMiAwIDY2NyA3MjIgNjExIDU1NiAwIDAgMzMzIDAgMCA2MTEgODg5IDcy
MiAwCjU1NiA3MjIgMCA1NTYgMCA3MjIgNzIyIDAgMCAwIDAgMCAwIDAgMCAwCjAgNDQ0IDUwMCA0
NDQgNTAwIDQ0NCAzMzMgNTAwIDUwMCAyNzggMCAwIDI3OCA3NzggNTAwIDUwMAo1MDAgNTAwIDMz
MyAzODkgMjc4IDUwMCA1MDAgMCA1MDAgNTAwXQovRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nL1N1
YnR5cGUvVHlwZTE+PgplbmRvYmoKOCAwIG9iago8PC9CYXNlRm9udC9VRE9YTFQrSGVsdmV0aWNh
LUJvbGQvRm9udERlc2NyaXB0b3IgOSAwIFIvVHlwZS9Gb250Ci9GaXJzdENoYXIgMzIvTGFzdENo
YXIgMTE3L1dpZHRoc1sKMjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAg
MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCA3MjIgMCA2MTEgMCAwIDAgMCAwIDAgODMz
IDAgMAo2NjcgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDU1NiAwIDAg
MCAwIDAgMCAwIDAgMCAwCjAgMCAzODkgNTU2IDMzMyA2MTFdCi9FbmNvZGluZy9XaW5BbnNpRW5j
b2RpbmcvU3VidHlwZS9UeXBlMT4+CmVuZG9iagoxMSAwIG9iago8PC9UeXBlL0ZvbnREZXNjcmlw
dG9yL0ZvbnROYW1lL0xWU1hLTCtUaW1lcy1Sb21hbi9Gb250QkJveFswIC0yMTggODYzIDY4M10v
RmxhZ3MgMzQKL0FzY2VudCA2ODMKL0NhcEhlaWdodCA2NzYKL0Rlc2NlbnQgLTIxOAovSXRhbGlj
QW5nbGUgMAovU3RlbVYgMTExCi9NaXNzaW5nV2lkdGggMjUwCi9YSGVpZ2h0IDQ2MQovQ2hhclNl
dCgvQS9DL0QvRS9GL0kvTC9NL04vUC9RL1MvVS9WL2EvYi9jL2NvbW1hL2QvZS9mL2cvaC9pL2wv
bS9uL28vcC9wZXJpb2QvcS9yL3Mvc3BhY2UvdC91L3YveC95KS9Gb250RmlsZTMgMTQgMCBSPj4K
ZW5kb2JqCjE0IDAgb2JqCjw8L0ZpbHRlci9GbGF0ZURlY29kZQovU3VidHlwZS9UeXBlMUMvTGVu
Z3RoIDQyODM+PnN0cmVhbQp4nG1XCXRTVbe+ITT3ilCwMdIIJv0VRJkE1N9WVIYyqBSkA4VOlpaG
DmTqnKQZm6TTbtMmnZK0TSfolNKB0tZCK4KMCiooCIgWlvMsv751bt/pW/87Af/nm1aysm7uvfuc
vff59re/zaFmzqA4HM7sqHSZJHtFhEKWJPf9X84u4LALZ7CPcQHLp36fWuf3GBXWxJ0Ds7kwe2bL
wgB5APv8Q+ibuWhiHsXlcAbf/zxUoVRnpaem5QQ9tSti99PLli3/687qkJCQoGT1v54EbZJkp6fK
g54kF3kSqUIpk8hz1gaFkrel0vR9QalStTItOygpJUWS4jOLTpJKDgRtSZemK5WKvKCnQp8OWrNq
1eoV5GfN2qAduTJJlmJ5ULp8f7o8PUcdlCRPCXpDJklNCpIlpUh8C2ySpedkqYOeW5Uu/y/rHemy
5NzsoHshB+1QhASFBUVIUnOlSVn/9wlFUUs2yBWhyk2Zm7O2ZOfkvpaXpEoOU+/bnrJDsn9nanha
euQuabRs+coginqceoPaSS2iwqnFVAT1JBVJLaGiqF1UNLWU2k1tpGKoUGoFFUttolZSm6lnqC3U
Vmo19Sq1hnqNep16jvo7tZ16gdpBzaHmUhzqKXI+1ExKQn3KeYLTOGPhjDruQ9wW7j9nyv1ov1i/
c7wZvCSaQwP9LfMyM/GA4IHCB/45Sz7r0oNLHvTM1s6ZN6dozg1/lf93cxfP1c1bMe/NeXnz1Mjm
P7UfPCjmKPu3Zs5UtEfwps1Um3YVV7AXA/N5OGXasA0/aSiIKxWqUKyHjst3dtbbXFVO8Rh6wA+5
eUeX1SsdmaATQpbGHF3GqFA1Pa1HtQJEo07E4E4/f7YE3OyjpzifTaJNk9wG9nGB3VZbXgdMZ402
VozLaYgw6vYUM1qU5qb3VGrroZ9Bh+njb7XW9wIz3i59TYwlNITpNTG+l1LcdGyVoR7GGaSmv098
d0OCVLNtq+gmbamIVacbowqEZEdTJ7umk9P1NXJ9zUU2dq8AP7JqGRbhBd89iQJQwI//hkRo/jM/
4IfFeoVg8uwy/Bj2e3Pr+pT97UN5YsWJgstwhfnh2IUrIv+pZ3SjbHALChnikHi4UxQbLShEeX55
PGtegSEfCkFr09pjG2Kq4yEEgqXbozZvl6wEPANWdj//dsS517+V/ALID34ZO3+LUTdt2PSaLBiE
YRDZvHcwalz6NSAug177Dj2AFp8+kbdvSOQ94FZ4XmdIEFjWqGlC4V7W/1zAtUmUe2c+X1vDPiao
KXdADTCHHaZ48XQazR+H3UbjTiujoflaVNTEW1+ur4P3GLSa7stoNw0Dg2Z9i2aixWje5q+WRiZm
7UoUX6etFbvy0vRRGiFaul7Q/W7/2NXxdZjB3Nj1ofER/d2ie7hQDbC3B1SegN/vsjzEmc9v/B1x
BBBq0K8rYlQ0X4oGeIiBP3ovvHvx7MBX8BN8LbsRdWrrR5jTjx8Dht+I21S8m5aaQtjA3O0V8KU9
ddVH71wsSD8uurHr6POAKcCzkl94MX6PPNzwHDD7DDVe8f3IUcR5NqAzuzmg/Q4qmJzPv4Wm2ZcF
/J86EmQ1KQvwQ8vwTLwIB1xa8/2ZU4eOj4rxThoi1dpNRYwGGV10VL25GoYZ/i32ByO9EX8hgOxi
vcmcq8owSEEKytr85gNdeRfhEsP/Cc165+rtCz0Zr4r8WeQLGo0cvdaMnh8kkf9ydz4/i/0evSxQ
8GIwtTcbPwGMkhcLSVUWR5GttA4aGQRoJf05uPXOYKYNaXN4luRirVGn1yjM8cDglSiLx9d02u0d
IrSAR6DQqm1czRzk8UdK0BN+050q3lWrUwebmWkSwmadduO93GrYAZ4/ugNu9OvPnE8nuQ72UYHL
VlNeD8zBmoJEMbbREGOxbDOQkrC46a02jRtOMyiX9o5MdNhrikx1ogZdndUJTLu7sbM3rzk9SZ6z
KVb8LV1UEZ2bqt+pInXyDin98/8j1j/YbFQgIEHQhrVq7Vri/mLifmeVz/mF/935n/6385tpCDbe
Awbq9dCvVOpc8DGD5GgxfQsatfUvEkQLTa0FLezqZn1rwNsXUMhlAij0IfpAwF9ejBb6GXmlpYWW
srJiEFrBVGGsIvipzs2tzFzwUsSe0Ejvvttx4jMZffmN2SAVJh5Q7EmXOltVoryDhW3600wBjx+G
VzlpR21lRT0pD1dpm5UsYO3sKG5acP39M5cnsnvf6Bdj6n1Fg/YgdAiHejrHTnenr2kT+aMe0wl2
tpdzeZKLqkl9P4kYXm2ZzSqyFFoLLSZJ1N64gmKjxWqBIigpL7WVMu/gk7wXuveeHR9sP9Er0tfl
ZWlMuSDcr+14T4yO/Eb7KOgMK2jUuQKuTKItBL9vsdkTgiJegrFuTIx+pPnX8RoN70JJvQliGGyg
QVGk0xmVuVKDDJiUA4eHxfy30E38pI4+XuLSQgKDq+iXju/5ZOBIQ0eHaGTEL5iuLJ1o7q972yX0
wcQzNdPDQfRdLuFdUqLr9YYXSshJTHjoEFuBCz5hWAKuT1zOyUrGgydU9O2ieiMpSuInu9XNYTNJ
1Fis5XlL3CZQganUVGx6CtcHLkY1VleJC2qE0FTn6LMxbrxHSw+WOkxji9BsPBRYYbVZbGa72m62
gx0cTvcAehhdDez60O7otpHld5I0BLYHDHy55Uv0xK35/O/YHZcEGp2hSAtMjsU1Kka7aThR1KVt
z+3f69lJOOP6ig2xYTnN+W3tLc2tlWVVZQ5xaU1ZNTiYDm/r0HiHfJdoB41XbteY90oY/ne5+br0
jEfDRhPPjx5tOXFeVLW7Ke8oHIaW+r5BBj9DCl9aVJhnyNYpCvOASVMcHhFX0nD2aD+aM8rc703B
bg7qeQQluHlSyG+QjuKH0Z7AL9BsT0d3g7dc6MZrtHR3aa0VdGAw5GZJi6wGtT5f1xyoGFYfBie4
nI7ucpKZfdoauhsa9D3x3+NFgZiHQ2TJJktGiVCLFrtphaHKaXe4nc3im2juNzio0lphBasQ1Jbi
jFKfJyYv++B7nI8mUf6XXLRi6mVBUUWSVmmO1wvlZr8C2l5eCQ5ghmoKk8TTDbT0dsZnKPAumoGe
QHPXfb9kR3hqbL4oeuaRY/0nbky8jP0xN25byO432w7+yWpH2N/ul7iSvYw2CjQSXY5Wk5YSpQ4G
5lXeRr29T8zKaLjict2sIhjpU9F/0RJ/4C9iUrJ9vONoo6+vY/ld9jhBj8KHngUEPQ2FBcVl1hKL
eCnuwjSyW13FTqgj2HE7RipIhpJ19KHiRmO1BvFwWaDN7JZ1xjSkglYI2pwwjUyXmavSgRUKK0xV
KoemUkMwkp+fneHNGv7g+Lto0UkxWskud3rratttQh+2Pmb9ujgHr3PZx9EqQdzm1OwIYFZt+wzR
/zh15Va/07i/VmzPrVY0qVtAeKjV0/bu5mMvxO7JT00WxyQqtsJLDH7k5krEfWuooadf1NFODvws
4//vc/6sJs4o23SXO/V39rJgOoawm0H/0p/strGKsNuVezV1xem8aif5iqNx5nQFLmAr/HCsivd5
kdMAG5nppTQs0qmCrcTO4GNFTRv8xrBLaFQ5fczPxfMd+wn20U5Oxx2UT9jnJ5MALTnh10Cry0qh
BJhUM6EL9n3C2XGaNNM2jbCAri63QzUwAzWmZDFeRUu8yrp9hKbpldgPP44fvvYcmvHuYPOxw+Jt
hAlmgsViMBnV+VkmOTDBUZ+huchv/Oqn74zHR4tJize2mHyxBvhifXbUx1KsUcC20XCudsDjdNW6
Kgd9hGFQ0YMlrmJ3YbOuJhW2M/hrelrAqvzwOhVvBFzmoXhmejvNV/1/sS6kyao7SLS+A/sIyb2I
7uewy1GwIG7dXvk2iIC9XfLT6kFLb+l5Bp3nmS+aurK8sv6Elt0QA/FqSXp8snIThDBY9PHziP7h
2llEDYvwDbRcUHfj8MB5OA/tCudzzL1myS7xcv5B8njBh8i5hMbPeHoGW1wmeZOoIbPe1AhMm6ep
rT/x0Bvbo5UJmeLMRHNq2Vom5MDn+AMebDQaQn0S0+kmrGmsg2sM+gD50/f7ZOsQmvBpoV/vogKf
FvoJvYlGBYdKG8sOwQ04WTvSfs7bfx4uwbBuUNm1b/S5zhWEzW7hRtIizbUmCL3XIl8wm9ZZ7oPo
JZv2HjHnzSSqxuHoQAsuxC9aujMG0/m68ooc0b0CO43eO4gyjlR1BnReln+BNl/v6JjPx2wGGyg4
8gqdT8RnviO3OlBZq6zKJNuhlRtCV4V1SC5liFVqtcZalCHX50M+5NUbjuYzfLxptzJj/6PRNxJ/
uHbj0PAJ0WBPoxcG4UL88AYbFtgDoyuyaqABmnv7OqpryhxlNvCUOsvsMABD7p6O3k53H0xAV1Gb
zstgy/Sjgl7LZ9ZxYL7p1aeGr0vBfs+Gd422OZzDE2I+qkLfCc529o31HNLIGkRNafUJkMJEytMS
3ki6+KNPX+LNTVND/ZzDiMe+gnjcqXD8rADzbGtHX/zjQ2d/49jQ1UuD39zTxwl4IVqEI8lnIRF9
iU93h5zdJjqS5M2/kn0sKvDDl9CcvehZcJO2X1fO2Hn466kzghEYU/VJT8Z5lwH2g6fki/cl7E/e
nRMFcZDYmOqNPnbgV0APwI9dPx8dOzp6rOUM/NkOFpzkfDKJdhAUrUY/CobHuhuPADNxMHWzGMfS
sNWkD7fen1V21Vqr4SMGxdF/JJ18cWdS9hsJInSaLrKlG7LMkQVCpY+2K8ttUAXMSLV5r3j6ABF4
1sJwM7GXuulwu6me2BP5QXZ97y7nB7JlqG9WeSbKT0vqvL7CWV4DwvZ7ck9LQ6jJuMUHT5Obfq3K
XOuTV4jeg/IEypwchaI1p7OrrbWrM6dNTiT0O/qWvD52ewtadjTgyh2k+20+f5yNnAoW5PGKc4xG
DZiA8Gv1ftf+6gOwFxI1GfI0qToJdsPa0Ug0c+fHkhPJByU1+qo8yGb42ldjEjauCTuF/GNEOTz+
eDdO82vllXvqXW4gCrjYYxnUDpmHyKRBf3XzH59HXcSBV8SPn0kahZPMqeHBC28Nq1L7RD0HXJkN
O4l4JGdPhqopD+f3u+g/RrksYusFcLe+4fNawjVaFX3D2pALSxhMeGirRVIgU8Ztk66HTRDbrjym
9loGfMPNJzR8XFf3mYNY9Kvom9Y6I6FbfJHGG26FoFcQ51rfh0dE7cM1Y3D9foY5P09yPVNcgZ1X
V15fThjUW6sj81MmDbt0+rAiklejmw6rNNTCKYb9ni6u2K2RmLZohPdYcmqOhzO1fWqpACepeKdK
moyggAKL0iDDS6a5gXgZ+ibjE3MbuIXgcdV6KyoJDl3lxDWPih4vdelG1qCy6bFANw9lsWd6b9bV
HSf9a8pDjv2xE5w7kyjM9+V6yGjstFX7RuNDNQVxYmz3+aaNLCO+Zbnp6AptHRxhUB8NFdW1DsfB
tpHGPmBGW9MIMknnjjQaI3zwyHHTEeXaRrjAoCq6e6S3aQyY003KYDFOJaO22RxuIS8p3HRmhaxC
3wRHhCiZRrNSzr0SviczfJdIfTq9YxckgkIXHMZcI1P1HhWZqrVEZdq+wH8TfND71nk4x0ykHXkz
LTsn/UCbqt/uKC+3ixwVAOXAVNut5gOK/bv2i4kBeuhXgSwrUyo/mNXVc+hgV0/mIZnvvn9+Mxvd
jKKaed2zbj/YXT179u2m2XMo6j8BdiPTGwplbmRzdHJlYW0KZW5kb2JqCjkgMCBvYmoKPDwvVHlw
ZS9Gb250RGVzY3JpcHRvci9Gb250TmFtZS9VRE9YTFQrSGVsdmV0aWNhLUJvbGQvRm9udEJCb3hb
MCAtMjMgNzc2IDcyOV0vRmxhZ3MgMTMxMTA0Ci9Bc2NlbnQgNzI5Ci9DYXBIZWlnaHQgNzI5Ci9E
ZXNjZW50IC0yMwovSXRhbGljQW5nbGUgMAovU3RlbVYgMTE2Ci9NaXNzaW5nV2lkdGggMjc4Ci9Y
SGVpZ2h0IDU0OQovQ2hhclNldCgvRC9GL00vUC9lL3Ivcy9zcGFjZS90L3UpL0ZvbnRGaWxlMyAx
NSAwIFI+PgplbmRvYmoKMTUgMCBvYmoKPDwvRmlsdGVyL0ZsYXRlRGVjb2RlCi9TdWJ0eXBlL1R5
cGUxQy9MZW5ndGggOTQwPj5zdHJlYW0KeJxVUm1sU1UYPrdft+m6zq5eGMy1dyTD0X3AEAnLIBE2
CzIQdQIGErVbu7Zy2y5r13WLIjABtzM+hG1FXdYKG4HVLF22HxMGsggzkoIlCM6QGfGHVpPhfgjv
qacYT03U+Ofk5Hnej+d93pdDChniOC5nk10K2P2uBmvZBq9ky0Bmks+Rp2SkQI79qf6UW1mAtvQn
s7FWjrWKs3/szoUP9fBeDgSfQHKOC3aFqr1Nbc0uh9MvFm9/ZeeykpLS/5CKyspKsb7tH0assftc
Do+4lH0Cdsnb5LZ7/FViNYuWJFeD6JDampw+0Wqz2W2ZtB1Wyb5HtLgkV1OTNyAWVy8TV65YUVHG
npUvutz1LT6xzurxiVvEjPr/IQghTU2zxedv2Wp/SUSoCNWhp9GraDvagcqRBVUgDmUxD5CCEcfR
Bc7CvctNcY9l9bIh2TkY1qUaMeiJD/TcDJjhKpjlMwtgVAVyfGtocvra18MPMCgxKKQHLyd2TVsG
qQKrKePN6XmBpeXzoPxiLX2WrqpbS5UmHVmEI2QRmDzh3OsgLjTErpOYkI6BCGO8ITE7Pj77UW/X
+wNGWMJ3dB/Ch3EtrrO6N6gNsYe8jgCOwGegh0om5w6TAn64KcBt0NPbDPsT9Omex24wq3Tkih9k
8DvIci+y0pshn+oz3ebJESITOkH1TIIWMZ0Fqy1U7uiTBgKmgWD/gc/boWpnniE5si+0r2XxW7bW
zQ7PiVCb8e2+g30Hz7Fw1TGq+XErrMF38dWPx6Jj0TOX8BV8yzlRE6HPX86zhfafxJ+oz0fDk0bD
/E38qa97l1oH98mmJPc9iHKYIkPCOiiiIi2ylCfoD6rVE9afhwePnhw0zvHvdHZ07cfqxgN9F01w
4bvMuH7IKomQw+Hca2yKNzITBMnoAhJjBX7iDRO1r1s3bnNH40b4jYppLU+zbmwE/pvJs1+OGQ3B
Wl6XuoMjqZowdwPMpDzjl0TiAixMx5XMJBBIXJmOgznlpgGePpmeoXlkRkn9/1r4CJYkIecRRyIQ
ELpD+Dg+gac6Lu0ddcytmqYcM3B5KVXQF+j6XwqhDLLnEg+HTdSoan/T1vwabsB7+lvP7w0fOtN5
WX0kKfTMjox/hUdwtD3sPdX6QeBoo1qXWs422sE26mUb/ZYdWG9GZQBOCbBNBYvv/wrFsHTNPVpq
onf/lkUEBYsV+Xsx53PrG51VJh27Uf9pEgvDuvDu0yrQaKAwCzQ9Wi0U9mqzEfoLU0fNbwplbmRz
dHJlYW0KZW5kb2JqCjIgMCBvYmoKPDwvUHJvZHVjZXIoR1BMIEdob3N0c2NyaXB0IDkuMDIpCi9D
cmVhdGlvbkRhdGUoRDoyMDEzMDUyNDEwMDEyNiswMicwMCcpCi9Nb2REYXRlKEQ6MjAxMzA1MjQx
MDAxMjYrMDInMDAnKQovVGl0bGUoRG9rdW1lbnQyKQovQ3JlYXRvcihGcmVlUERGIDQuMDQgLSBo
dHRwOi8vc2hib3guZGUpCi9BdXRob3IoRWRkaSk+PmVuZG9iagp4cmVmCjAgMTYKMDAwMDAwMDAw
MCA2NTUzNSBmIAowMDAwMDA0NDYyIDAwMDAwIG4gCjAwMDAwMTEzNTYgMDAwMDAgbiAKMDAwMDAw
NDQwMyAwMDAwMCBuIAowMDAwMDA0MjQzIDAwMDAwIG4gCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAw
MDAwNDIyMyAwMDAwMCBuIAowMDAwMDA0NTEwIDAwMDAwIG4gCjAwMDAwMDUwMzcgMDAwMDAgbiAK
MDAwMDAxMDA3NSAwMDAwMCBuIAowMDAwMDA0NjIyIDAwMDAwIG4gCjAwMDAwMDUzODcgMDAwMDAg
biAKMDAwMDAwNDU1MSAwMDAwMCBuIAowMDAwMDA0NTgxIDAwMDAwIG4gCjAwMDAwMDU3MDcgMDAw
MDAgbiAKMDAwMDAxMDMzMiAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDE2IC9Sb290IDEgMCBS
IC9JbmZvIDIgMCBSCi9JRCBbPDBBNDhCN0RFQjZCRTkwRDQ5MENDNkMyMzdDQjJENDU3PjwwQTQ4
QjdERUI2QkU5MEQ0OTBDQzZDMjM3Q0IyRDQ1Nz5dCj4+CnN0YXJ0eHJlZgoxMTU1MgolJUVPRgo=

--b1_vP6oXL3ZKWN2orgztMb5SDtz3MSnV2KFxRY9WC8--

@Synchro
Copy link
Member

Synchro commented Mar 22, 2019

The filename is encoded as =?utf-8?Q?Sch=C3=B6ne_PDF.pdf?= which is correct, but Content-ID has not been encoded the same way, though that should not affect its handling as an attachment:

Content-ID: <Schöne PDF.pdf>

image

It is also missing the content transfer encoding header, so when you save the attachment it does not have its base64 encoding removed. I think that is the actual problem, not the filename, unless the omission of the header is caused by the filename. Needs more investigation...

@eddi13
Copy link
Author

eddi13 commented Mar 22, 2019

Headers without "ö" in filename:

...
This is a multi-part message in MIME format.
--b1_qDf7kWD0PvG4Zat4ppsc8ZKLKMkEbRVepu3ow7oECE
Content-Type: text/plain; charset=us-ascii

Guten Tag mein Lehser.

--b1_qDf7kWD0PvG4Zat4ppsc8ZKLKMkEbRVepu3ow7oECE
Content-Type: application/pdf; name="Schone PDF.pdf"
Content-Transfer-Encoding: base64
Content-ID: <Schone PDF.pdf>
Content-Disposition: attachment; filename="Schone PDF.pdf"

JVBERi0xLjMKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFIvR...

and with "ö":

...
This is a multi-part message in MIME format.
--b1_vP6oXL3ZKWN2orgztMb5SDtz3MSnV2KFxRY9WC8
Content-Type: text/plain; charset=us-ascii

Guten Tag mein Lehser.

--b1_vP6oXL3ZKWN2orgztMb5SDtz3MSnV2KFxRY9WC8
Content-Type: application/pdf; name="=?utf-8?Q?Sch=C3=B6ne_PDF.pdf?="
Content-ID: <Schöne PDF.pdf>
Content-Disposition: attachment; filename="=?utf-8?Q?Sch=C3=B6ne_PDF.pdf?="

JVBERi0xLjMKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFIvRmlsdG...
  • Content-Transfer-Encoding: base64 - is missed, if an umlaut occurs

@eddi13
Copy link
Author

eddi13 commented Mar 22, 2019

So so... after some experiments:
PHPNailer line 2926

$mime[] = sprintf('Content-ID: <%s>%s', $cid, static::$LE);

I added encoding

$mime[] = sprintf('Content-ID: <%s>%s', $this->encodeHeader($this->secureHeader($cid)), static::$LE);

new headers

Content-Type: application/pdf; name="=?utf-8?Q?Sch=C3=B6ne_PDF.pdf?="
Content-Transfer-Encoding: base64
Content-ID: <=?utf-8?Q?Sch=C3=B6ne_PDF.pdf?=>
Content-Disposition: attachment; filename="=?utf-8?Q?Sch=C3=B6ne_PDF.pdf?="

Content-Transfer-Encoding is present and attachment is readable

@eddi13
Copy link
Author

eddi13 commented Mar 22, 2019

A few more experiments.
I sent the file "bäck.png" from the email client as attachment and inline in an email.
These are the headers:

Content-Type: image/png; name="=?UTF-8?Q?b=C3=A4ck.png?="
Content-Transfer-Encoding: base64
Content-ID: <2d24120d900f4ac38a3647d02af3de57@Open-Xchange>
Content-Disposition: inline; filename="=?UTF-8?Q?b=C3=A4ck.png?="
...
Content-Type: image/png; name="=?utf-8?Q?b=C3=A4ck.png?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="=?utf-8?Q?b=C3=A4ck.png?="
X-Part-Id: 2b5928e5976641009b5cd3e59b6a3a46

The header Content-ID is only used for inline attachments.

In PHPMailer 5 I have seen the following

if ($disposition == 'inline') {
    $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE);
}

When I "comment out" the content ID header in version 6, it works as expected.
fix in PHPMailer

if (!empty($cid) && ($disposition == 'inline')) {
    $mime[] = sprintf('Content-ID: <%s>%s', $this->encodeHeader($this->secureHeader($cid)), static::$LE);
}

headers

Content-Type: image/png; name="=?utf-8?Q?b=C3=A4ck.png?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="=?utf-8?Q?b=C3=A4ck.png?="

and attach is readable
bäck

I am not a specialist in Email Headers and I do not know exactly how it is right, but I hope that my experiments will help you.

@adnsistemas
Copy link

Hello,
I had the same problem attaching files with names like "File N° 1". The 'cid' is "corrupted" in the sense of the MIME specs.
Changing the code in addAttachment:
7 => $name ===>> 7 => 'fl_attch_'.count($this->attahments)

solves the problem.
When cid is corrupted, mail client shows more attachments, or missing ones, names repeated, or simply corrupted files. Changing the cid everythig works fine.
I'm not very keen on GitHub, and the fix is very simple, so I won't even try so submit a "proper fix".
Hope this helps.
David.

@Synchro
Copy link
Member

Synchro commented Oct 16, 2019

Please let me know if these changes fix the issues you were having

@eddi13
Copy link
Author

eddi13 commented Oct 18, 2019

Hello Synchro.
The change from "if (!empty($cid)) {" to "if ($cid !== '' && $disposition === 'inline') {" is ok, but "!==", I think, is too strict.
And "$mime[] = 'Content-ID: ' . $this->encodeHeader('<' . $this->secureHeader($cid) . '>') . static::$LE;" gives a wrong header:

$cid = 'schön';
$mime = 'Content-ID: ' . $mailer->encodeHeader('<' . $mailer->secureHeader($cid) . '>') . "\r\n";
//-> Content-ID: =?utf-8?Q?<sch=C3=B6n>?=

//v.6.1.1 has another code
$mime2 = sprintf(
    'Content-ID: <%s>%s',
    $mailer->encodeHeader($mailer->secureHeader($cid)),
    "\r\n"
);
//-> Content-ID: <=?utf-8?Q?sch=C3=B6n?=>

My suggestion would be, as I've already written here #1691 (comment):

if (!empty($cid) && ($disposition == 'inline')) {
		$mime[] = sprintf(
				'Content-ID: <%s>%s',
				$this->encodeHeader($this->secureHeader($cid)),
				static::$LE
		);
}

I fixed PHPMailer that way, and so far I have no problem.

Best regards
Eduard

@Synchro
Copy link
Member

Synchro commented Oct 18, 2019

I was looking at this again - the changes you mention were introduced for #1864, however, that solution is wrong too, as described in this comment, because RFC2047 encoding is (officially) not supported in Content-ID headers, so a solution more like @adnsistemas suggested would be safer.

@Synchro
Copy link
Member

Synchro commented Oct 18, 2019

This raises a slight problem. Given that $cid is a user-supplied parameter, a user is free to provide an invalid ID. Should we reject it altogether? Hash it? Transliterate it? When it's used in msgHTML we can avoid the problem, but not when it's used manually.

@Synchro
Copy link
Member

Synchro commented Oct 18, 2019

Further down the rabbit hole, I ran into RFC2231, which deals with this exact problem! That said, it's still quite confusing, and introduces yet another encoding scheme.

So now I need to nail down whether the 2047 encoding should be applied inside or outside the <> - in my tests in Apple Mail, it works both ways, so 🤷‍♂️. OTOH, encoding outside is what fixed #1864. Do you have results from any other clients?

@adnsistemas
Copy link

Hi, I know very little on the subject, but from the little research I did to "fix" the issue I was having, I don't see any use for the 'cid' other that internally referencing the MIME parts.
So in the end, I don't see why to allow the "user" to specify a 'cid', when it can be calculated.
What's the purpose of accepting a provided 'cid', and be forced to process it to make it valid MIME syntax?
Why do you use the attachment name as 'cid'?
Besides, you are accepting some 'cid' values but others are fixed in code..

@Synchro
Copy link
Member

Synchro commented Oct 19, 2019

Well ,that's exactly what cid values are for, and if you are writing the HTML yourself, then you're also writing the cid values, and thus need to be able to add attachments with matching values, so that's why it's allowed. The only place where PHPMailer creates cid values itself is in msgHTML(), where it can be responsible for both ends of the connection (both the attachment and the URL that references it), so it does indeed use generated values, which are not derived from the filename but from a hash of the binary content, and that's the only place that values are "fixed" in code.

The reason for using user-supplied values (and defaulting to the filename) is that those values are usually more readable - for example cid:logo is better than cid:7ac656abc22899fa4, and if we do generate cids, then the user needs to get them back somehow, so for example the addEmbeddedImage method could (though currently does not) return a generated cid. It's mainly easier to let the user decide, and most typical values (e.g. a filename) will not cause a problem.

@eddi13
Copy link
Author

eddi13 commented Oct 19, 2019

well then... experiments)

$mail = new PHPMailer(); //v.6.1.1
$mail->setFrom('[email protected]');
$mail->Mailer = 'smtp';
$this->CharSet = PHPMailer::CHARSET_UTF8;
$mail->SMTPAuth = true;
$mail->Host = 'mail.example.com';
$mail->Username = '[email protected]';
$mail->Password = 'pass';
$mail->addAddress('[email protected]');
$mail->isHTML(true);
$mail->Subject = 'Test mail';
$filename = 'schönes bild.gif';
//body see below
$mail->send()

Definitions:
CONTENT_ID_1: sprintf('Content-ID: <%s>%s', $this->encodeHeader($this->secureHeader($cid)), static::$LE);
CONTENT_ID_2: 'Content-ID: ' . $this->encodeHeader('<' . $this->secureHeader($cid) . '>') . static::$LE;

SEND_METHOD_Body:

$mail->Body = '<p>Ich habe ein Bild für dich: <img src="cid:'.$mail->encodeHeader($mail->secureHeader($filename)).'" alt="'.$filename.'"></p>';
$mail->addEmbeddedImage(__DIR__ . DIRECTORY_SEPARATOR . $filename, $filename);

SEND_METHOD_msgHTML:

$mail->msgHTML('<p>Ich habe ein Bild für dich: <img src="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/'.$filename.'" alt="'.$filename.'"></p>', __DIR__);

OK: the image in the client is visible
BAD: the image in the client is not visible
#######################################
Open XChange Mail Client
CONTENT_ID_1 + SEND_METHOD_Body = OK
CONTENT_ID_1 + SEND_METHOD_msgHTML = BAD
CONTENT_ID_2 + SEND_METHOD_Body = OK
CONTENT_ID_2 + SEND_METHOD_msgHTML = BAD
Windows Mail Client
CONTENT_ID_1 + SEND_METHOD_Body = OK
CONTENT_ID_1 + SEND_METHOD_msgHTML = BAD
CONTENT_ID_2 + SEND_METHOD_Body = BAD
CONTENT_ID_2 + SEND_METHOD_msgHTML = BAD
Thunderbird Mail Client
CONTENT_ID_1 + SEND_METHOD_Body = OK
CONTENT_ID_1 + SEND_METHOD_msgHTML = BAD
CONTENT_ID_2 + SEND_METHOD_Body = BAD
CONTENT_ID_2 + SEND_METHOD_msgHTML = BAD
#######################################
CONTENT_ID_1 + SEND_METHOD_Body

<p>Ich habe ein Bild f=C3=BCr dich: <img src=3D"cid:=3D?utf-8?Q?sch=3DC3=
=3DB6nes_bild.gif?=3D" alt=3D"sch=C3=B6nes bild.gif"></p>

--b1_gQPve6l6lyGaLT9mlo86kkfwoJA8gPfdWpHD87RhI
Content-Type: image/gif; name="=?utf-8?Q?sch=C3=B6nes_bild.gif?="
Content-Transfer-Encoding: base64
Content-ID: <=?utf-8?Q?sch=C3=B6nes_bild.gif?=>
Content-Disposition: inline; filename="=?utf-8?Q?sch=C3=B6nes_bild.gif?="

CONTENT_ID_1 + SEND_METHOD_msgHTML

<p>Ich habe ein Bild f=C3=BCr dich: <img src=3D"cid:49d1e98bb534d0b1b00d02=
[email protected]" alt=3D"sch=C3=B6ne=
s bild.gif"></p>

--b2_dvQFGGq3Pe2FpiCsJnU0bjmUc2EJFHy4P9yWW4pp9iI
Content-Type: image/gif; name="=?utf-8?Q?sch=C3=B6nes_bild.gif?="
Content-Transfer-Encoding: base64
Content-ID: <=?us-ascii?Q?49d1e98bb534d0b1b00d0261857cdae231e0ac98b39b32682f778ad63bf3?=
 [email protected]?=>
Content-Disposition: inline; filename="=?utf-8?Q?sch=C3=B6nes_bild.gif?="

CONTENT_ID_2 + SEND_METHOD_Body

<p>Ich habe ein Bild f=C3=BCr dich: <img src=3D"cid:=3D?utf-8?Q?sch=3DC3=
=3DB6nes_bild.gif?=3D" alt=3D"sch=C3=B6nes bild.gif"></p>

--b1_mLnamdrZogtxoZb1c5MmROaqSfW1jF47cJvGu4ZQkY
Content-Type: image/gif; name="=?utf-8?Q?sch=C3=B6nes_bild.gif?="
Content-Transfer-Encoding: base64
Content-ID: =?utf-8?Q?<sch=C3=B6nes_bild.gif>?=
Content-Disposition: inline; filename="=?utf-8?Q?sch=C3=B6nes_bild.gif?="

CONTENT_ID_2 + SEND_METHOD_msgHTML

<p>Ich habe ein Bild f=C3=BCr dich: <img src=3D"cid:49d1e98bb534d0b1b00d02=
[email protected]" alt=3D"sch=C3=B6ne=
s bild.gif"></p>

--b2_O4gdb3swBBf3irTtTOzCJks0qrf1lfoAWRPvVFqE
Content-Type: image/gif; name="=?utf-8?Q?sch=C3=B6nes_bild.gif?="
Content-Transfer-Encoding: base64
Content-ID: =?us-ascii?Q?<49d1e98bb534d0b1b00d0261857cdae231e0ac98b39b32682f778ad63bf?=
 [email protected]>?=
Content-Disposition: inline; filename="=?utf-8?Q?sch=C3=B6nes_bild.gif?="

#######################################
Conclusion:

  1. With msgHTML() it never worked for me. Am I doing something wrong? I see in code that '/' is always expected as DIRECTORY_SEPARATOR. In Win (my case) it is ''. Maybe my problem is in it?
    But 'C:/wamp/vhosts/host' instead of 'DIR' has not brought anything...
    Maybe [email protected]?= is the problem. I do not know here ...
  2. CONTENT_ID_1 + SEND_METHOD_Body works everywhere

So, my choice is still, because then I have at least one possibility that works everywhere:

if (!empty($cid) && ($disposition == 'inline')) {
		$mime[] = sprintf(
				'Content-ID: <%s>%s',
				$this->encodeHeader($this->secureHeader($cid)),
				static::$LE
		);
}

Sorry, I could not shorter)
And hope that it helps.

Best regards
Eduard

@eddi13
Copy link
Author

eddi13 commented Oct 19, 2019

When I switched off the maxLength in encodeHeader, CONTENT_ID_1 + SEND_METHOD_msgHTML also worked everywhere

...
        if ('mail' == $this->Mailer) {
            $maxlen = static::MAIL_MAX_LINE_LENGTH - $overhead;
        } else {
            $maxlen = static::STD_LINE_LENGTH - $overhead;
        }
            $maxlen = 10000000;
...
<p>Ich habe ein Bild f=C3=BCr dich: <img src=3D"cid:49d1e98bb534d0b1b00d02=
[email protected]" alt=3D"sch=C3=B6ne=
s bild.gif"></p>

--b2_S4Ze60O2Pm11e4SfVo8Ej980t9l3KCdIYpzwjC97P0
Content-Type: image/gif; name="=?utf-8?Q?sch=C3=B6nes_bild.gif?="
Content-Transfer-Encoding: base64
Content-ID: <49d1e98bb534d0b1b00d0261857cdae231e0ac98b39b32682f778ad63bf353d0@phpmailer.0>
Content-Disposition: inline; filename="=?utf-8?Q?sch=C3=B6nes_bild.gif?="

Of course this is not a solution.
But, that confirms, I believe that CONTENT_ID_1 is the right way to CONTENT-ID encoding.

@adnsistemas
Copy link

Ohh, ok I get the idea now. Didn't know about building the HTML yourself for the body.
If I had to fix it, I will go for the "return a cid for added parts", instead of the complexities of trying to make a valid cid out of "anything".
The problem is that changing methods to return the 'cid' is not backward compatible, but simplifies the internal implementation.
I believe the best choice will be to "overload" the existing methods with methods that return a calculated 'cid', and comment the existing methods with "don't use characters outside ASCII for names (and no longer than xx characters)".

@eddi13
Copy link
Author

eddi13 commented Oct 19, 2019

Maybe in msgHTML()
3958: $cid = hash('sha256', $data)... -> $cid = hash('md5', $data)...
3984: $cid = hash('sha256', $url)... -> $cid = hash('md5', $url)...
and (optional) Exception in attachAll() if $this->encodeHeader($this->secureHeader($cid)) > maxLength
that should solve the problem...
PS.: As with MESSAGE-ID. There "username" is also 32 characters long

@Synchro
Copy link
Member

Synchro commented Oct 19, 2019

Thanks for your work there @eddi13. Are you both using latest code? I pushed a change several days ago in 809394f that uses 32-char truncated sha256 hashes (same length as md5, but without the associated security problems) for cids generated in msgHTML - that should avoid the header encoding issue.

I agree that returning cids is a good solution, but it will have to wait for a major release for the BC break. In the mean time I think we should allow it to break and document that only ascii-compatible cids are supported.

When I look at all these encoding issues and see that other mail libraries have largely not handled them either, it makes me want to restart from scratch and build a proper library! PHPMailer has so much legacy baggage that it's very hard to change stuff.

@eddi13
Copy link
Author

eddi13 commented Oct 20, 2019

So. We have 2 issues with CID - length and encoding.
Solution for length:
809394f + The same should also be made for urls $cid = hash('sha256', $url)...(slightly deeper in msgHtml, see #1691 (comment))

Solution for encoding:

if (!empty($cid) && ($disposition == 'inline')) {
		$mime[] = sprintf(
				'Content-ID: <%s>%s',
				$this->encodeHeader($this->secureHeader($cid)),
				static::$LE
		);
}

This solves ALL problems of inline attachments, even if the CIDs have not ascii symbols (e.g. "schönes bild.gif").
See for custom HTML #1691 (comment)
and for msgHtml #1691 (comment)

with 'Content-ID: ' . $this->encodeHeader('<' . $this->secureHeader($cid) . '>') . static::$LE; the whole thing will not work for non ascii!!!

@Synchro
Copy link
Member

Synchro commented Oct 20, 2019

See recent pushes for these changes. Also note major revision of DKIM merged to master.

@Synchro Synchro closed this as completed Jun 9, 2020
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

No branches or pull requests

3 participants