CRLF в цитируемом MIME-сообщении - PullRequest
0 голосов
/ 13 июня 2018

У меня есть многокомпонентное MIME-сообщение, в котором одна часть выглядит как

------=_Part_901_990681075.1528833507
Content-Disposition: attachment; filename="metadata.txt"
Content-ID: 3314a2d3-6092-48c3-93d9-a45648b6582b@localhost
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

version: 1.0=0Aid: 13848078-9bc3-4ec1-8cb0-3ee07d74f1cb=0Auser: givenName=
=3DJohn; middleName=3DJacob; surname=3DDoe; dateOfBirth=3D=0A=3D1970-01-01;=
gender=3DM; postalCode=3D12345

, но получатель говорит, что это раздел метаданных с ошибками, поскольку =0A следует заменить на истинный CRLF.

Iзнаю, что это представление CRLF для кодирования quoted-printable, но это не то, что ожидает получатель.

Для создания части метаданных я использовал код PHP:

$sMetadata = "version: 1.0
id: $sTrancasctionId
user: givenName=$sUserFirstName; middleName=$sUserMiddleName; surname=$sUserLastName; dateOfBirth=
=$sUSerDOB; gender=$sUserGender; postalCode=$sUserPostalCode";

, а затем я 'm, используя существующую MailSo инфраструктуру, чтобы добавить ее к существующему объекту сообщения.

Любые советы по этому вопросу?

1 Ответ

0 голосов
/ 13 июня 2018

Как указано в комментариях, =0A представляет только часть перевода строки (LF) CRLF.Таким образом, код, вероятно, хранится с символами новой строки Unix, который состоит только из LF, в то время как представление MIME ожидает CRLF.

С помощью этой команды непосредственно после строки $sMetadata вы можете преобразовать все новые строки в CRLF:

$sMetadata = preg_replace('/\R/', "\r\n", $sMetadata);
...