Von meiner extbase 6.2-Erweiterung möchte ich verschiedene E-Mails senden.
In einer Controller-Klasse schrieb ich eine E-Mail-Funktion, die wie folgt aussieht:
(keine @param
für $attachment
bemerken - meine Frage am Ende sehen)Erstellen eines Anhangs für MailMessage
/**
*
* @param string $to
* @param string $subject
* @param string $email_prefix
* @param string $msg
* @param string $email_suffix
*/
public function mailAction($to, $subject, $email_prefix, $msg, $email_suffix, $attachment = null) {
try {
$from = \TYPO3\CMS\Core\Utility\MailUtility::getSystemFrom();
$body = $email_prefix
. PHP_EOL . PHP_EOL
. $msg
. PHP_EOL . PHP_EOL
. $email_suffix;
$htmlBody = nl2br($body);
$toEmail = $to;
$mail = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage');
$mail->setFrom($from)
->setTo(array($toEmail))
->setSubject($subject)
->setBody($htmlBody, 'text/html');
$mail->addPart($body, 'text/plain');
if ($attachment) {
$mail->attach($attachment);
}
if (empty($toEmail) || strpos($toEmail, '@') === FALSE) {
$this->addFlashMessage('Die Mail konnte nicht verschickt werden! Keine Email-Adresse des Empfängers', '', \TYPO3\CMS\Core\Messaging\FlashMessage::ERROR
);
} else {
if ($mail->send()) {
$this->addFlashMessage('Die Mail für wurde verschickt!', '');
} else {
$this->addFlashMessage('Die Mail konnte nicht verschickt werden!', '', \TYPO3\CMS\Core\Messaging\FlashMessage::ERROR
);
}
}
$this->redirect('list');
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
}
In einer Funktion, die die Mail-Funktion I ruft versuchte die Schaffung eine Anlage wie diese, aber es sagen fehlgeschlagen: Fatal error: Class 'Swift_Attachment' not found in.../...Controller.php
$attachment = \Swift_Attachment::newInstance()
->setFilename('Termine.html')
->setContentType('text/html')
->setBody($emailView->render());
Dann rufe ich die E-Mail-Funktion wie folgt aus:
$this->redirect('mail', null, null, array(
$to,
$subject,
$email_prefix,
$msg,
$email_suffix,
$attachment));
Meine Fragen:
- Wie kann ich ein Objekt vom Typ
Swift_Attachment
in einer Steuerung meiner extbase Erweiterung erfolgreich erstellen (ohneMailMessage
Objekt vorher zu schaffen und die Anlage in der es zu schaffen)? - Was soll ich nach
@param
als die Art meiner$attachment
Variable in meine Mail-Funktion für dieses zu arbeiten?
- EDIT -
Ok, also offenbar nicht niemand, weil es zu sein, nicht gemeint.
Ich habe jetzt Renes Ansatz kombiniert mit Dimitri skalierbare Antwort für mehrere Anhänge. Mein @param ist jetzt array
, weil ich den tatsächlichen Anhang nach der Instanziierung MailMessage
erstellen muss - danke!
Ich denke, da ist das Problem, wie Jigal in seiner Antwort sagte - ich habe nicht das $ email Objekt instanziiert noch, weil ich den Anhang zuerst instanziieren möchte. Und nach seiner Antwort wird die Klasse 'Swift_Attachment' geladen, wenn die Klasse' MailMessage' instanziiert wird. Also frage ich mich, wie man es ohne die Mail-Klasse instanziiert, sonst IDK wie ich deinen @Param-Typ testen könnte. Ich finde Ihren vorwärts und geschützten Vorschlag sehr hilfreich, danke! –
Verdammt, als ich die Antwort nicht richtig gelesen ... Eine andere Möglichkeit könnte sein, den Inhalt, den Dateinamen und den MIME-Typ an die Funktion zu übergeben, um sie nach der Mail-Erstellung zu initialisieren. Ich habe meine Antwort bearbeitet. –