Из моего расширения extbase 6.2 я хочу отправить разные электронные письма.
В классе контроллера я написал функцию почты, которая выглядит следующим образом:
(не заметить не @param
для $attachment
- см моего вопроса в конце)Создание вложения для 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";
}
}
В функции, которая вызывает функцию почты, когда я пытался создать вложение как это, но он не сказал: Fatal error: Class 'Swift_Attachment' not found in.../...Controller.php
$attachment = \Swift_Attachment::newInstance()
->setFilename('Termine.html')
->setContentType('text/html')
->setBody($emailView->render());
Тогда я вызываю функцию почты, как это:
$this->redirect('mail', null, null, array(
$to,
$subject,
$email_prefix,
$msg,
$email_suffix,
$attachment));
Мои вопросы:
- Как я могу успешно создать объект типа
Swift_Attachment
в контроллере моего расширения Extbase (без созданияMailMessage
объекта заранее и создать вложение внутри него)? - Что следует положить после
@param
как тип переменной$attachment
в моей почтовой функции для этого?
- EDIT -
Итак, по-видимому, никто не делает это, потому что это не должно быть.
Теперь я использовал подход Рене, сочетающий его с масштабируемым ответом Димитрия для нескольких приложений. Мой @param теперь array
, потому что мне нужно создать фактическое вложение после создания экземпляра MailMessage
- спасибо!
Я думаю, что есть проблема, подобная Джигалю в его ответе - у меня нет экземпляра '$ email ' но потому, что я хочу сначала создать экземпляр приложения. И, согласно его ответу, класс 'Swift_Attachment' загружается при создании класса' MailMessage'. Поэтому мне интересно, как создать экземпляр без класса mail, иначе idk, как я могу проверить ваш тип @param. Я нахожу ваше вперед и защищенное предложение очень полезным, спасибо! –
Черт, чем я не правильно прочитал ответ ... Другим способом может быть обход содержимого, имени файла и mimetype функции, чтобы инициализировать его после создания почты. Я отредактировал мой ansewer. –