Skip to content
Snippets Groups Projects
Commit e0d83e5e authored by Thomas Hackl's avatar Thomas Hackl
Browse files

Resolve "Darstellung der neuen HTML-Mails für möglichst viele Clients"

Closes #4027

Merge request studip/studip!2879
parent 95b8d817
No related branches found
No related tags found
No related merge requests found
......@@ -35,6 +35,11 @@ class StudipMail
* @var array
*/
private $attachments = [];
/**
* Array of attachments that are related to the content
* @var array
*/
private $related_attachments = [];
/**
* @var array
*/
......@@ -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());
......
......@@ -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)
......
......@@ -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) : ?>
......
......@@ -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(
......
......@@ -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("");
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment