aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hackl <hackl@data-quest.de>2024-04-17 14:21:55 +0000
committerThomas Hackl <hackl@data-quest.de>2024-04-17 14:21:55 +0000
commite0d83e5e63f1ce728923b77409e68635fdeb6cf8 (patch)
tree114fba2406d73aa2549af03afd55c419659f0178
parent95b8d817b5337c234a50a3d4dfb202f5a40ef8af (diff)
Resolve "Darstellung der neuen HTML-Mails für möglichst viele Clients"
Closes #4027 Merge request studip/studip!2879
-rw-r--r--lib/classes/StudipMail.class.php33
-rw-r--r--lib/messaging.inc.php9
-rw-r--r--templates/mail/html.php20
-rw-r--r--templates/mail/notification_html.php20
-rw-r--r--vendor/email_message/email_message.php3
5 files changed, 73 insertions, 12 deletions
diff --git a/lib/classes/StudipMail.class.php b/lib/classes/StudipMail.class.php
index db68a11..4974f66 100644
--- a/lib/classes/StudipMail.class.php
+++ b/lib/classes/StudipMail.class.php
@@ -36,6 +36,11 @@ class StudipMail
*/
private $attachments = [];
/**
+ * Array of attachments that are related to the content
+ * @var array
+ */
+ private $related_attachments = [];
+ /**
* @var array
*/
private $sender;
@@ -307,6 +312,17 @@ class StudipMail
return $this;
}
+ public function addRelatedAttachment(string $file_name, string $name, string $type, string $content_id): void
+ {
+ $this->related_attachments[$name] = [
+ 'FileName' => $file_name,
+ 'Name' => $name,
+ 'Content-Type' => $type,
+ 'Disposition' => 'inline',
+ 'Content-ID' => $content_id
+ ];
+ }
+
/**
* @param $name
* @return StudipMail provides fluent interface
@@ -411,16 +427,29 @@ class StudipMail
$transporter->SetMultipleEncodedEmailHeader($type, $recipients);
}
$transporter->SetEncodedHeader('Subject', $this->getSubject());
- if($this->getBodyHtml()){
- $html_part = '';
+ if($this->getBodyHtml()) {
+ $html_part = 0;
$transporter->CreateQuotedPrintableHTMLPart($this->getBodyHtml(), "", $html_part);
$text_part = '';
$text_message = $this->getBodyText();
+
if(!$text_message){
$text_message = _('Diese Nachricht ist im HTML-Format verfasst. Sie benötigen eine E-Mail-Anwendung, die das HTML-Format anzeigen kann.');
}
$transporter->CreateQuotedPrintableTextPart($transporter->WrapText($text_message), "", $text_part);
+
$part = [$text_part, $html_part];
+ if (count($this->related_attachments) > 0) {
+ $relparts = [$html_part];
+ $i = 99;
+ $multipart = 0;
+ foreach ($this->related_attachments as $one) {
+ $transporter->CreateFilePart($one, $i);
+ $relparts[] = $i;
+ }
+ $transporter->CreateRelatedMultipart($relparts, $multipart);
+ $part = [$text_part, $multipart];
+ }
$transporter->AddAlternativeMultipart($part);
} else {
$transporter->AddQuotedPrintableTextPart($this->getBodyText());
diff --git a/lib/messaging.inc.php b/lib/messaging.inc.php
index 0fb7c3f..8df15ba 100644
--- a/lib/messaging.inc.php
+++ b/lib/messaging.inc.php
@@ -229,6 +229,15 @@ class messaging
$mail->setSubject($title)
->addRecipient($to, $rec_fullname)
->setBodyText($mailmessage);
+
+ // Add Stud.IP logo as "pseudo" attachment - this will be embedded in the mail via Content-ID.
+ $mail->addRelatedAttachment(
+ $GLOBALS['STUDIP_BASE_PATH'] . '/public/assets/images/logos/studip4-logo@2x.png',
+ 'studip-logo.png',
+ 'image/png',
+ 'studiplogo'
+ );
+
if (mb_strlen($reply_to)) {
if ($GLOBALS['MESSAGING_FORWARD_USE_REPLYTO']) {
$mail->setReplyToEmail($reply_to)
diff --git a/templates/mail/html.php b/templates/mail/html.php
index cfb4e95..1987333 100644
--- a/templates/mail/html.php
+++ b/templates/mail/html.php
@@ -11,9 +11,11 @@
<html>
<head>
<style>
- body {
+ html {
background-color: #e7ebf1;
font-family: 'Lato', Helvetica, Arial, sans-serif;
+ height: 100%;
+ width: 100%;
}
a, a:link, a:visited {
@@ -42,20 +44,25 @@
.studip-mail header {
border-bottom: 1px solid #d0d7e3;
+ display: block;
text-align: center;
padding-bottom: 15px;
}
- .studip-mail-header-logo {
+ .studip-mail header .studip-mail-header-logo {
margin-left: auto;
margin-right: auto;
+ width: 100%;
}
- .studip-mail-sndrec {
+ .studip-mail header .studip-mail-sndrec {
+ margin-left: auto;
+ margin-right: auto;
margin-top: 0;
+ width: 100%;
}
- .studip-mail-message {
+ .studip-mail .studip-mail-message {
line-height: 1.33;
padding: 15px 25px;
}
@@ -63,7 +70,10 @@
.studip-mail footer {
border-top: 1px solid #d0d7e3;
text-align: center;
+ margin-left: auto;
+ margin-right: auto;
padding-top: 15px;
+ width: 100%;
}
</style>
</head>
@@ -71,7 +81,7 @@
<article class="studip-mail">
<header>
<div class="studip-mail-header-logo" >
- <img alt="" width="130" height="92" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkViZW5lXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgODQxLjg5IDU5NS4yOCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgODQxLjg5IDU5NS4yOCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBmaWxsPSIjMTM0MDk0IiBkPSJNNzYzLjE3MiwyNDguMzU1YzAtMTcuNjM5LTE0LjMzMS0zMS45NTYtMzEuOTctMzEuOTU2Yy0xNy42NTIsMC0zMS45NDEsMTQuMzE2LTMxLjk0MSwzMS45NTYNCgkJczE0LjI4OSwzMS45NywzMS45NDEsMzEuOTdDNzQ4Ljg0MSwyODAuMzI1LDc2My4xNzIsMjY1Ljk5NCw3NjMuMTcyLDI0OC4zNTUgTTczMS4yMDIsMTYzLjI3Mg0KCQljLTQ2Ljk1OCwwLTg1LjA3NiwzOC4xMTItODUuMDksODUuMDYzaDI1LjM0YzAuMDA2LTMyLjk2NiwyNi43NjItNTkuNzQzLDU5Ljc1LTU5Ljc0M2MzMywwLDU5Ljc3NywyNi43ODMsNTkuNzc3LDU5Ljc2NA0KCQljMCwzMi45ODUtMjYuNzYyLDU5Ljc1Ni01OS43NSw1OS43NjJ2MjUuMzRjNDYuOTc4LTAuMDEzLDg1LjA2My0zOC4xMzksODUuMDYzLTg1LjEwM1M3NzguMTkzLDE2My4yNzIsNzMxLjIwMiwxNjMuMjcyIi8+DQoJPHJlY3QgeD0iNDg2LjkxNiIgeT0iMzk5LjMxOCIgZmlsbD0iI0FFMEEwRCIgd2lkdGg9IjMwLjY0MSIgaGVpZ2h0PSIzMC42NDEiLz4NCgk8Zz4NCgkJPHBhdGggZmlsbD0iIzNDNDQ0OCIgZD0iTTUxLjAwMiwzODUuNTY3YzEwLjk1MSw5LjUyNCwyNS4yMzYsMTYuMTksMzguMDkzLDE2LjE5YzE0LjUyMiwwLDIxLjY2NC01LjcxNCwyMS42NjQtMTQuOTk4DQoJCQljMC05Ljc2My04LjgwOC0xMi44NTgtMjIuMzgtMTguNTcxbC0xOS45OTgtOC41NzFjLTE2LjE5LTYuNDI5LTMxLjQyNy0xOS43NjEtMzEuNDI3LTQyLjM3OA0KCQkJYzAtMjUuNzEzLDIzLjA5NS00Ni4xODgsNTUuMjM1LTQ2LjE4OGMxNy44NTYsMCwzNi42NjQsNy4xNDIsNDkuOTk2LDIwLjQ3NWwtMTcuNjE3LDIyLjE0MmMtMTAuMjM5LTcuODU4LTIwLTEyLjM4MS0zMi4zOC0xMi4zODENCgkJCWMtMTEuOTA1LDAtMTkuNzYxLDUuMjM5LTE5Ljc2MSwxNC4wNDdjMCw5LjUyNCwxMC4yMzcsMTIuODU2LDIzLjgwOCwxOC4zMzJsMTkuNzYxLDguMDk1DQoJCQljMTguODA4LDcuNjE5LDMwLjcxMiwyMC4yMzcsMzAuNzEyLDQyLjE0MWMwLDI1LjcxMy0yMS40MjcsNDguMDkzLTU4LjMzLDQ4LjA5M2MtMjAuMjM2LDAtNDEuNjY0LTcuNjE5LTU3LjYxNS0yMi4zOA0KCQkJTDUxLjAwMiwzODUuNTY3eiIvPg0KCQk8cGF0aCBmaWxsPSIjM0M0NDQ4IiBkPSJNMTgzLjM3OCwzMzIuMTAzaC0zMi45ODN2LTI3LjYxNWg5OC45NTJ2MjcuNjE1aC0zMi45ODV2OTcuMDM0aC0zMi45ODNWMzMyLjEwM3oiLz4NCgkJPHBhdGggZmlsbD0iIzNDNDQ0OCIgZD0iTTI2MS4xNTUsMzA0LjQ4N2gzMi45ODN2NjguMjY5YzAsMjIuMjQ2LDUuNzU0LDMwLjMsMTguNzk0LDMwLjNjMTMuMDQsMCwxOS4xNzctOC4wNTUsMTkuMTc3LTMwLjMNCgkJCXYtNjguMjY5aDMxLjgzNHY2NC40MzVjMCw0Mi41NzItMTYuMTA5LDYyLjUxNS01MS4wMSw2Mi41MTVzLTUxLjc3Ny0xOS45NDMtNTEuNzc3LTYyLjUxNVYzMDQuNDg3eiIvPg0KCQk8cGF0aCBmaWxsPSIjM0M0NDQ4IiBkPSJNMzc5LjEyMiwzMDQuNDg3aDM2LjgxOWMzNy45NywwLDY0LjA1LDE3LjY0Myw2NC4wNSw2MS43NWMwLDQ0LjEwNS0yNi4wOCw2Mi44OTktNjIuMTMyLDYyLjg5OWgtMzguNzM3DQoJCQlWMzA0LjQ4N3ogTTQxNC4wMjMsNDAyLjY3MmMxOC4wMjcsMCwzMi4yMTgtNy4yODYsMzIuMjE4LTM2LjQzNWMwLTI5LjE0OS0xNC4xOTEtMzUuMjg2LTMyLjIxOC0zNS4yODZoLTEuOTE2djcxLjcyMUg0MTQuMDIzeiIvPg0KCQk8cGF0aCBmaWxsPSIjM0M0NDQ4IiBkPSJNNTMyLjU1LDI3My45MDZoMzUuMjM2djE1NS4yM0g1MzIuNTVWMjczLjkwNnoiLz4NCgkJPHBhdGggZmlsbD0iIzNDNDQ0OCIgZD0iTTU4NC40NDQsMjczLjkwNmg1Ni42NjNjMzMuODA4LDAsNjAuNzEyLDEyLjM4MSw2MC43MTIsNDkuOTk4YzAsMzYuNDI3LTI3Ljg1Niw1Mi42MTUtNjAuNzEyLDUyLjYxNQ0KCQkJaC0yMS40Mjd2NTIuNjE3aC0zNS4yMzVWMjczLjkwNnogTTYzOC45NjQsMzQ4LjY2NWMxOS4yODUsMCwyOC41NjktOC41NzEsMjguNTY5LTI0Ljc2MWMwLTE2LjE5LTkuOTk4LTIyLjE0Mi0yOC41NjktMjIuMTQyDQoJCQloLTE5LjI4NXY0Ni45MDNINjM4Ljk2NHoiLz4NCgk8L2c+DQo8L2c+DQo8L3N2Zz4NCg==">
+ <img alt="" width="130" height="92" src="cid:studiplogo">
</div>
<p class="studip-mail-sndrec">
<?php if ($snd_fullname) : ?>
diff --git a/templates/mail/notification_html.php b/templates/mail/notification_html.php
index d046cb2..4502ae5 100644
--- a/templates/mail/notification_html.php
+++ b/templates/mail/notification_html.php
@@ -10,9 +10,11 @@
<html>
<head>
<style>
- body {
+ html {
background-color: #e7ebf1;
font-family: 'Lato', Helvetica, Arial, sans-serif;
+ height: 100%;
+ width: 100%;
}
a, a:link, a:visited {
@@ -41,20 +43,25 @@
.studip-mail header {
border-bottom: 1px solid #d0d7e3;
+ display: block;
text-align: center;
padding-bottom: 15px;
}
- .studip-mail-header-logo {
+ .studip-mail header .studip-mail-header-logo {
margin-left: auto;
margin-right: auto;
+ width: 100%;
}
- .studip-mail-sndrec {
+ .studip-mail header .studip-mail-sndrec {
+ margin-left: auto;
+ margin-right: auto;
margin-top: 0;
+ width: 100%;
}
- .studip-mail-message {
+ .studip-mail .studip-mail-message {
line-height: 1.33;
padding: 15px 25px;
}
@@ -62,7 +69,10 @@
.studip-mail footer {
border-top: 1px solid #d0d7e3;
text-align: center;
+ margin-left: auto;
+ margin-right: auto;
padding-top: 15px;
+ width: 100%;
}
</style>
</head>
@@ -70,7 +80,7 @@
<article class="studip-mail">
<header>
<div class="studip-mail-header-logo" >
- <img alt="" width="130" height="92" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkViZW5lXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgODQxLjg5IDU5NS4yOCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgODQxLjg5IDU5NS4yOCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBmaWxsPSIjMTM0MDk0IiBkPSJNNzYzLjE3MiwyNDguMzU1YzAtMTcuNjM5LTE0LjMzMS0zMS45NTYtMzEuOTctMzEuOTU2Yy0xNy42NTIsMC0zMS45NDEsMTQuMzE2LTMxLjk0MSwzMS45NTYNCgkJczE0LjI4OSwzMS45NywzMS45NDEsMzEuOTdDNzQ4Ljg0MSwyODAuMzI1LDc2My4xNzIsMjY1Ljk5NCw3NjMuMTcyLDI0OC4zNTUgTTczMS4yMDIsMTYzLjI3Mg0KCQljLTQ2Ljk1OCwwLTg1LjA3NiwzOC4xMTItODUuMDksODUuMDYzaDI1LjM0YzAuMDA2LTMyLjk2NiwyNi43NjItNTkuNzQzLDU5Ljc1LTU5Ljc0M2MzMywwLDU5Ljc3NywyNi43ODMsNTkuNzc3LDU5Ljc2NA0KCQljMCwzMi45ODUtMjYuNzYyLDU5Ljc1Ni01OS43NSw1OS43NjJ2MjUuMzRjNDYuOTc4LTAuMDEzLDg1LjA2My0zOC4xMzksODUuMDYzLTg1LjEwM1M3NzguMTkzLDE2My4yNzIsNzMxLjIwMiwxNjMuMjcyIi8+DQoJPHJlY3QgeD0iNDg2LjkxNiIgeT0iMzk5LjMxOCIgZmlsbD0iI0FFMEEwRCIgd2lkdGg9IjMwLjY0MSIgaGVpZ2h0PSIzMC42NDEiLz4NCgk8Zz4NCgkJPHBhdGggZmlsbD0iIzNDNDQ0OCIgZD0iTTUxLjAwMiwzODUuNTY3YzEwLjk1MSw5LjUyNCwyNS4yMzYsMTYuMTksMzguMDkzLDE2LjE5YzE0LjUyMiwwLDIxLjY2NC01LjcxNCwyMS42NjQtMTQuOTk4DQoJCQljMC05Ljc2My04LjgwOC0xMi44NTgtMjIuMzgtMTguNTcxbC0xOS45OTgtOC41NzFjLTE2LjE5LTYuNDI5LTMxLjQyNy0xOS43NjEtMzEuNDI3LTQyLjM3OA0KCQkJYzAtMjUuNzEzLDIzLjA5NS00Ni4xODgsNTUuMjM1LTQ2LjE4OGMxNy44NTYsMCwzNi42NjQsNy4xNDIsNDkuOTk2LDIwLjQ3NWwtMTcuNjE3LDIyLjE0MmMtMTAuMjM5LTcuODU4LTIwLTEyLjM4MS0zMi4zOC0xMi4zODENCgkJCWMtMTEuOTA1LDAtMTkuNzYxLDUuMjM5LTE5Ljc2MSwxNC4wNDdjMCw5LjUyNCwxMC4yMzcsMTIuODU2LDIzLjgwOCwxOC4zMzJsMTkuNzYxLDguMDk1DQoJCQljMTguODA4LDcuNjE5LDMwLjcxMiwyMC4yMzcsMzAuNzEyLDQyLjE0MWMwLDI1LjcxMy0yMS40MjcsNDguMDkzLTU4LjMzLDQ4LjA5M2MtMjAuMjM2LDAtNDEuNjY0LTcuNjE5LTU3LjYxNS0yMi4zOA0KCQkJTDUxLjAwMiwzODUuNTY3eiIvPg0KCQk8cGF0aCBmaWxsPSIjM0M0NDQ4IiBkPSJNMTgzLjM3OCwzMzIuMTAzaC0zMi45ODN2LTI3LjYxNWg5OC45NTJ2MjcuNjE1aC0zMi45ODV2OTcuMDM0aC0zMi45ODNWMzMyLjEwM3oiLz4NCgkJPHBhdGggZmlsbD0iIzNDNDQ0OCIgZD0iTTI2MS4xNTUsMzA0LjQ4N2gzMi45ODN2NjguMjY5YzAsMjIuMjQ2LDUuNzU0LDMwLjMsMTguNzk0LDMwLjNjMTMuMDQsMCwxOS4xNzctOC4wNTUsMTkuMTc3LTMwLjMNCgkJCXYtNjguMjY5aDMxLjgzNHY2NC40MzVjMCw0Mi41NzItMTYuMTA5LDYyLjUxNS01MS4wMSw2Mi41MTVzLTUxLjc3Ny0xOS45NDMtNTEuNzc3LTYyLjUxNVYzMDQuNDg3eiIvPg0KCQk8cGF0aCBmaWxsPSIjM0M0NDQ4IiBkPSJNMzc5LjEyMiwzMDQuNDg3aDM2LjgxOWMzNy45NywwLDY0LjA1LDE3LjY0Myw2NC4wNSw2MS43NWMwLDQ0LjEwNS0yNi4wOCw2Mi44OTktNjIuMTMyLDYyLjg5OWgtMzguNzM3DQoJCQlWMzA0LjQ4N3ogTTQxNC4wMjMsNDAyLjY3MmMxOC4wMjcsMCwzMi4yMTgtNy4yODYsMzIuMjE4LTM2LjQzNWMwLTI5LjE0OS0xNC4xOTEtMzUuMjg2LTMyLjIxOC0zNS4yODZoLTEuOTE2djcxLjcyMUg0MTQuMDIzeiIvPg0KCQk8cGF0aCBmaWxsPSIjM0M0NDQ4IiBkPSJNNTMyLjU1LDI3My45MDZoMzUuMjM2djE1NS4yM0g1MzIuNTVWMjczLjkwNnoiLz4NCgkJPHBhdGggZmlsbD0iIzNDNDQ0OCIgZD0iTTU4NC40NDQsMjczLjkwNmg1Ni42NjNjMzMuODA4LDAsNjAuNzEyLDEyLjM4MSw2MC43MTIsNDkuOTk4YzAsMzYuNDI3LTI3Ljg1Niw1Mi42MTUtNjAuNzEyLDUyLjYxNQ0KCQkJaC0yMS40Mjd2NTIuNjE3aC0zNS4yMzVWMjczLjkwNnogTTYzOC45NjQsMzQ4LjY2NWMxOS4yODUsMCwyOC41NjktOC41NzEsMjguNTY5LTI0Ljc2MWMwLTE2LjE5LTkuOTk4LTIyLjE0Mi0yOC41NjktMjIuMTQyDQoJCQloLTE5LjI4NXY0Ni45MDNINjM4Ljk2NHoiLz4NCgk8L2c+DQo8L2c+DQo8L3N2Zz4NCg==">
+ <img alt="" width="130" height="92" src="cid:studiplogo">
</div>
<p class="studip-mail-sndrec">
<?= sprintf(
diff --git a/vendor/email_message/email_message.php b/vendor/email_message/email_message.php
index dcef90c..a94e996 100644
--- a/vendor/email_message/email_message.php
+++ b/vendor/email_message/email_message.php
@@ -2608,6 +2608,9 @@ class email_message_class
if(IsSet($file['Cache'])
&& $file['Cache'])
$definition['Cache'] = 1;
+ if(IsSet($file['Content-ID'])
+ && $file['Content-ID'])
+ $definition['Content-ID'] = $file['Content-ID'];
return("");
}