Merge code to generate MIME PGP parts and MIME Plain parts

This commit is contained in:
the-djmaze 2024-01-18 03:17:27 +01:00
parent ad985f94e5
commit 48c3d655b4
2 changed files with 38 additions and 64 deletions

View file

@ -182,4 +182,38 @@ class Part
return \MailSo\Base\StreamWrappers\SubStreams::CreateStream($aSubStreams);
}
public function addPgpEncrypted(string $sEncrypted)
{
$oPart = new MimePart;
$oPart->Headers->AddByName(Enumerations\Header::CONTENT_TYPE, 'multipart/encrypted; protocol="application/pgp-encrypted"');
$this->SubParts->append($oPart);
$oSubPart = new MimePart;
$oSubPart->Headers->AddByName(Enumerations\Header::CONTENT_TYPE, 'application/pgp-encrypted');
$oSubPart->Headers->AddByName(Enumerations\Header::CONTENT_DISPOSITION, 'attachment');
$oSubPart->Headers->AddByName(Enumerations\Header::CONTENT_TRANSFER_ENCODING, '7Bit');
$oSubPart->Body = \MailSo\Base\ResourceRegistry::CreateMemoryResourceFromString('Version: 1');
$oPart->SubParts->append($oSubPart);
$oSubPart = new MimePart;
$oSubPart->Headers->AddByName(Enumerations\Header::CONTENT_TYPE, 'application/octet-stream');
$oSubPart->Headers->AddByName(Enumerations\Header::CONTENT_DISPOSITION, 'inline; filename="msg.asc"');
$oSubPart->Headers->AddByName(Enumerations\Header::CONTENT_TRANSFER_ENCODING, '7Bit');
$oSubPart->Body = \MailSo\Base\ResourceRegistry::CreateMemoryResourceFromString($sEncrypted);
$oPart->SubParts->append($oSubPart);
}
public function addPlain(string $sPlain)
{
$oPart = new MimePart;
$oPart->Headers->AddByName(Enumerations\Header::CONTENT_TYPE, 'text/plain; charset=utf-8');
$oPart->Headers->AddByName(Enumerations\Header::CONTENT_TRANSFER_ENCODING, 'quoted-printable');
$oPart->Body = \MailSo\Base\StreamWrappers\Binary::CreateStream(
\MailSo\Base\ResourceRegistry::CreateMemoryResourceFromString(\preg_replace('/\\r?\\n/su', "\r\n", \trim($sPlain))),
'convert.quoted-printable-encode'
);
$this->SubParts->append($oPart);
}
}

View file

@ -906,8 +906,6 @@ trait Messages
if ($this->Config()->Get('security', 'hide_x_mailer_header', true)) {
$oMessage->DoesNotAddDefaultXMailer();
} else {
$oMessage->SetXMailer('SnappyMail/'.APP_VERSION);
}
$oMessage->SetFrom(new \MailSo\Mime\Email($oIdentity->Email(), $oIdentity->Name()));
@ -952,8 +950,6 @@ trait Messages
if ($this->Config()->Get('security', 'hide_x_mailer_header', true)) {
$oMessage->DoesNotAddDefaultXMailer();
} else {
$oMessage->SetXMailer('SnappyMail/'.APP_VERSION);
}
$sFrom = $this->GetActionParam('from', '');
@ -1029,28 +1025,7 @@ trait Messages
unset($sSigned);
} else if ($sEncrypted = $this->GetActionParam('encrypted', '')) {
$oPart = new MimePart;
$oPart->Headers->AddByName(
MimeEnumHeader::CONTENT_TYPE,
'multipart/encrypted; protocol="application/pgp-encrypted"'
);
$oMessage->SubParts->append($oPart);
$oAlternativePart = new MimePart;
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_TYPE, 'application/pgp-encrypted');
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_DISPOSITION, 'attachment');
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_TRANSFER_ENCODING, '7Bit');
$oAlternativePart->Body = \MailSo\Base\ResourceRegistry::CreateMemoryResourceFromString('Version: 1');
$oPart->SubParts->append($oAlternativePart);
$oAlternativePart = new MimePart;
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_TYPE, 'application/octet-stream');
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_DISPOSITION, 'inline; filename="msg.asc"');
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_TRANSFER_ENCODING, '7Bit');
$oAlternativePart->Body = \MailSo\Base\ResourceRegistry::CreateMemoryResourceFromString(\preg_replace('/\\r?\\n/su', "\r\n", \trim($sEncrypted)));
$oPart->SubParts->append($oAlternativePart);
unset($oAlternativePart);
$oPart->addPgpEncrypted(\preg_replace('/\\r?\\n/su', "\r\n", \trim($sEncrypted)));
unset($sEncrypted);
} else if ($sHtml = $this->GetActionParam('html', '')) {
@ -1064,14 +1039,7 @@ trait Messages
// First add plain
$sPlain = $this->GetActionParam('plain', '') ?: \MailSo\Base\HtmlUtils::ConvertHtmlToPlain($sHtml);
$this->Plugins()->RunHook('filter.message-plain', array($oAccount, $oMessage, &$sPlain));
$oAlternativePart = new MimePart;
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_TYPE, 'text/plain; charset=utf-8');
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_TRANSFER_ENCODING, 'quoted-printable');
$oAlternativePart->Body = \MailSo\Base\StreamWrappers\Binary::CreateStream(
\MailSo\Base\ResourceRegistry::CreateMemoryResourceFromString(\preg_replace('/\\r?\\n/su', "\r\n", \trim($sPlain))),
'convert.quoted-printable-encode'
);
$oPart->SubParts->append($oAlternativePart);
$oPart->addPlain($sPlain);
unset($sPlain);
// Now add HTML
@ -1114,15 +1082,7 @@ trait Messages
} else {
*/
$this->Plugins()->RunHook('filter.message-plain', array($oAccount, $oMessage, &$sPlain));
$oAlternativePart = new MimePart;
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_TYPE, 'text/plain; charset="utf-8"');
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_TRANSFER_ENCODING, 'quoted-printable');
$oAlternativePart->Body = \MailSo\Base\StreamWrappers\Binary::CreateStream(
\MailSo\Base\ResourceRegistry::CreateMemoryResourceFromString(\preg_replace('/\\r?\\n/su', "\r\n", \trim($sPlain))),
'convert.quoted-printable-encode'
);
$oMessage->SubParts->append($oAlternativePart);
unset($oAlternativePart);
$oMessage->addPlain($sPlain);
unset($sPlain);
}
unset($oPart);
@ -1230,28 +1190,8 @@ trait Messages
foreach ($aFingerprints as $sFingerprint) {
$GPG->addEncryptKey($sFingerprint);
}
$sEncrypted = $GPG->encryptStream($fp);
$oPart = new MimePart;
$oPart->Headers->AddByName(
MimeEnumHeader::CONTENT_TYPE,
'multipart/encrypted; protocol="application/pgp-encrypted"'
);
$oMessage->SubParts->append($oPart);
$oAlternativePart = new MimePart;
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_TYPE, 'application/pgp-encrypted');
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_DISPOSITION, 'attachment');
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_TRANSFER_ENCODING, '7Bit');
$oAlternativePart->Body = \MailSo\Base\ResourceRegistry::CreateMemoryResourceFromString('Version: 1');
$oPart->SubParts->append($oAlternativePart);
$oAlternativePart = new MimePart;
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_TYPE, 'application/octet-stream');
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_DISPOSITION, 'inline; filename="msg.asc"');
$oAlternativePart->Headers->AddByName(MimeEnumHeader::CONTENT_TRANSFER_ENCODING, '7Bit');
$oAlternativePart->Body = \MailSo\Base\ResourceRegistry::CreateMemoryResourceFromString($sEncrypted);
$oPart->SubParts->append($oAlternativePart);
$oPart->addPgpEncrypted($GPG->encryptStream($fp));
}
$this->Plugins()->RunHook('filter.build-message', array($oMessage));