Mail::send()
\nn\t3::Mail()->send($paramOverrides = []);
Send an e-mail.
$html = \nn\t3::Template()->render('MailTemplate', ['varKey'=>'varValue'], 'tx_extname_plugin');
\nn\t3::Mail()->send([
'html' => $html,
'plaintext' => Optional: text version
'fromEmail' => Sender email
'fromName' => Sender name
'toEmail' => Recipient email(s)
'ccToEmail' => CC recipient email(s)
'bccToEmail' => BCC recipient email(s)
'replyToEmail' => Reply to recipient's email
'replyToName' => Reply to name
'subject' => Subject
'attachments' => [...],
'emogrify' => Convert CSS styles to inline styles (default: `true`)
'absPrefix' => Convert relative paths to absolute paths (default: `true`)
'headers' => ['List-Unsubscribe' => ', <https://www.unsubscribe.com>'],
]);
Copied!
Embed images with ```
File attachments with ```
| @return void
Source Code
public function send ( $paramOverrides = [] ) {
\nn\t3::autoload();
// Defaults mergen mit Parametern
$params = [
'emogrify' => true,
'absPrefix' => true,
];
ArrayUtility::mergeRecursiveWithOverrule( $params, $paramOverrides);
$mail = GeneralUtility::makeInstance(MailMessage::class);
$html = $params['html'] ?? '';
$pathSite = \nn\t3::Environment()->getPathSite();
$recipients = \nn\t3::Arrays($params['toEmail'] ?? '')->trimExplode();
$fromEmail = array_shift(\nn\t3::Arrays($params['fromEmail'] ?? '')->trimExplode());
if ($replyToEmail = $params['replyToEmail'] ?? false) {
$mail->replyTo( new \Symfony\Component\Mime\Address($replyToEmail, $params['replyToName'] ?? '') );
}
if ($ccToEmail = $params['ccToEmail'] ?? false) {
$ccToEmail = \nn\t3::Arrays($ccToEmail)->trimExplode();
$mail->setCc( $ccToEmail );
}
if ($bccToEmail = $params['bccToEmail'] ?? false) {
$bccToEmail = \nn\t3::Arrays($bccToEmail)->trimExplode();
$mail->setBcc( $bccToEmail );
}
$mail->from( new \Symfony\Component\Mime\Address($fromEmail, $params['fromName'] ?? '') );
$mail->to(...$recipients);
$mail->subject($params['subject'] ?? '');
// Inline-Media im HTML-Code finden (<img data-embed="1" src="..." />)
$dom = new \DOMDocument();
@$dom->loadHTML($html);
// XPATH Cheat-Sheet: https://devhints.io/xpath
$xpath = new \DOMXPath($dom);
$nodes = $xpath->query('//*[@data-embed]');
$attachedFiles = [];
foreach ($nodes as $node) {
if ($img = $node->getAttribute('src')) {
$node->removeAttribute('data-embed');
$cid = 'img-' . md5($pathSite . $img);
$node->setAttribute('src', 'cid:'.$cid);
$mail->embedFromPath( $pathSite . $img, $cid );
}
if ($file = $node->getAttribute('href')) {
if (!isset($attachedFiles[$pathSite . $file])) {
$absPath = \nn\t3::File()->absPath( $file );
$mail->attachFromPath( $absPath );
$attachedFiles[$absPath] = true;
}
}
}
// Zusätzlich Anhänge?
$attachments = \nn\t3::Arrays($params['attachments'] ?? '')->trimExplode();
foreach ($attachments as $path) {
if (!isset($attachedFiles[$pathSite . $path])) {
$absPath = \nn\t3::File()->absPath( $path );
$mail->attachFromPath( $absPath );
$attachedFiles[ $absPath ] = true;
}
}
$html = $dom->saveHTML();
// Relative Pfade im Quelltext mit absoluten Pfaden ersetzen
if ($params['absPrefix'] ?? false) {
$html = \nn\t3::Dom()->absPrefix( $html );
}
// CSS in Inline-Styles umwandeln
if ($params['emogrify'] ?? false) {
$html = CssInliner::fromHtml($html)->inlineCss()->render();
}
$plaintext = $params['plaintext'] ?? strip_tags($html);
if ($html) {
$mail->html($html);
$mail->text($plaintext);
} else {
$mail->text($plaintext);
}
$returnPath = $params['returnPath_email'] ?? \TYPO3\CMS\Core\Utility\MailUtility::getSystemFromAddress();
if (strpos($returnPath, 'no-reply') === false) {
$mail->setReturnPath( $returnPath );
}
// zsätzliche Header?
if ($headers = $params['headers'] ?? false) {
$mailHeaders = $mail->getHeaders();
foreach ($headers as $k=>$v) {
$mailHeaders->addTextHeader($k, $v);
}
}
$sent = $mail->send();
if (!$sent) {
/*
\nn\t3::Log()->error('nnhelpers', 'Mail not sent', $recipients);
$fp = fopen('mail_error.log', 'a');
$to = join(',', $recipients);
fputs($fp, date('d.m.Y H:i:s')." {$to}\n\n\n");
fclose($fp);
$helpMail = $this->params['errorMail_email'];
$mail->setReturnPath( $helpMail );
$mail->setTo( $helpMail );
$mail->setSubject('Mailversand: FEHLER!');
$mail->send();
//*/
}
return $sent;
}
Copied!