cleanup mime header encoding handling

This commit is contained in:
the-djmaze 2024-01-22 09:19:45 +01:00
parent 4d9fb41d73
commit 8749d189df
6 changed files with 8 additions and 11 deletions

View file

@ -21,7 +21,6 @@ abstract class Encoding
const QUOTED_PRINTABLE_LOWER = 'quoted-printable'; const QUOTED_PRINTABLE_LOWER = 'quoted-printable';
const QUOTED_PRINTABLE_SHORT = 'Q'; const QUOTED_PRINTABLE_SHORT = 'Q';
const BASE64 = 'Base64';
const BASE64_LOWER = 'base64'; const BASE64_LOWER = 'base64';
const BASE64_SHORT = 'B'; const BASE64_SHORT = 'B';
} }

View file

@ -356,7 +356,10 @@ abstract class Utils
return $sResultHeaders; return $sResultHeaders;
} }
public static function EncodeUnencodedValue(string $sEncodeType, string $sValue) : string /**
* https://datatracker.ietf.org/doc/html/rfc2047
*/
public static function EncodeHeaderValue(string $sValue, string $sEncodeType = 'B') : string
{ {
$sValue = \trim($sValue); $sValue = \trim($sValue);
if (\strlen($sValue) && !static::IsAscii($sValue)) { if (\strlen($sValue) && !static::IsAscii($sValue)) {

View file

@ -153,7 +153,7 @@ class Attachment
$oAttachmentPart->Body = $oAttachmentPart->Body =
\MailSo\Base\StreamWrappers\Binary::CreateStream($oAttachmentPart->Body, \MailSo\Base\StreamWrappers\Binary::CreateStream($oAttachmentPart->Body,
\MailSo\Base\StreamWrappers\Binary::GetInlineDecodeOrEncodeFunctionName( \MailSo\Base\StreamWrappers\Binary::GetInlineDecodeOrEncodeFunctionName(
\MailSo\Base\Enumerations\Encoding::BASE64, false)); \MailSo\Base\Enumerations\Encoding::BASE64_LOWER, false));
\MailSo\Base\StreamWrappers\Binary::RememberStream($oAttachmentPart->Body); \MailSo\Base\StreamWrappers\Binary::RememberStream($oAttachmentPart->Body);
} }

View file

@ -184,9 +184,7 @@ class Email implements \JsonSerializable
$sDisplayName = \str_replace('"', '\"', $this->sDisplayName); $sDisplayName = \str_replace('"', '\"', $this->sDisplayName);
if ($bConvertSpecialsName) { if ($bConvertSpecialsName) {
$sDisplayName = \strlen($sDisplayName) $sDisplayName = \strlen($sDisplayName) ? \MailSo\Base\Utils::EncodeHeaderValue($sDisplayName) : '';
? \MailSo\Base\Utils::EncodeUnencodedValue(\MailSo\Base\Enumerations\Encoding::BASE64_SHORT, $sDisplayName)
: '';
} }
$sDisplayName = \strlen($sDisplayName) ? '"'.$sDisplayName.'"' : ''; $sDisplayName = \strlen($sDisplayName) ? '"'.$sDisplayName.'"' : '';

View file

@ -66,9 +66,7 @@ class Parameter implements \JsonSerializable
\strtolower(Enumerations\Parameter::FILENAME) \strtolower(Enumerations\Parameter::FILENAME)
))) )))
{ {
return $this->sName . '="' . \MailSo\Base\Utils::EncodeUnencodedValue( return $this->sName . '="' . \MailSo\Base\Utils::EncodeHeaderValue($this->sValue) . '"';
\MailSo\Base\Enumerations\Encoding::BASE64_SHORT,
$this->sValue) . '"';
} }
return $this->sName . '="' . $this->sValue . '"'; return $this->sName . '="' . $this->sValue . '"';

View file

@ -779,8 +779,7 @@ trait Messages
if (!empty($sRawBody)) { if (!empty($sRawBody)) {
$sMailTo = \trim($aToCollection->ToString(true)); $sMailTo = \trim($aToCollection->ToString(true));
$sMailSubject = \trim($oMessage->GetSubject()); $sMailSubject = \trim($oMessage->GetSubject());
$sMailSubject = 0 === \strlen($sMailSubject) ? '' : \MailSo\Base\Utils::EncodeUnencodedValue( $sMailSubject = \strlen($sMailSubject) ? \MailSo\Base\Utils::EncodeHeaderValue($sMailSubject) : '';
\MailSo\Base\Enumerations\Encoding::BASE64_SHORT, $sMailSubject);
$sMailHeaders = $sMailBody = ''; $sMailHeaders = $sMailBody = '';
list($sMailHeaders, $sMailBody) = \explode("\r\n\r\n", $sRawBody, 2); list($sMailHeaders, $sMailBody) = \explode("\r\n\r\n", $sRawBody, 2);