Hallo,
Ich habe eine Ext. Kontaktformular erstellt mit Extension Builder. Felder, Frontendt, Backend funktionier schon mal. Jetzt möchte ich die eingetragenen Daten sprich: Vorname, Nachnahme, Email ect. an meine gewünschte E-Mail senden. Dazu muss natürlich überprüft werden, dass in dem E-Mail Feld auch eine gültige E-Mail eingetragen wurde.
Ja, ich habe Forum durchsucht und Google benutzt. Auch jegliche Dokumentationen und Bücher gelesen. Schlauer bin ich nicht geworden.
Ich möchte wissen, wie ich vorgehen muss und wie sowas funktioniert. Fertige Scripts bringen nichts, da ich net verstehe was dort geschieht.
Und bitte keine Antworten wie: benutzte doch dafür eine fertige Extension, warum machst du das? oder so was.
Grob verstehe ich schon, dass in dem ext controller functionen gemacht werden müssen, mehr aber auch nicht.
Ich habe eine Dokumentation gefunden aber ich verstehe nicht wie ich es umsetzten soll: https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Mail/Index.html
Hier ist mein Script bis jetzt:
/**
* action create
*
* @param \EbextHC\Ebexthc\Domain\Model\Contact $newContact
* @return void
*/
public function createAction(\EbextHC\Ebexthc\Domain\Model\Contact $newContact) {
$this->contactRepository->add($newContact);
$mail = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage');
$mail->setSubject('Your subject');
$mail->setTo(array('test@test.com' => 'Test'));
$mail->setBody('Here is the message itself');
$mail->addPart('<q>Here is the message itself</q>', 'text/html');
$mail->send();
}
Fehler nach dem Absenden: Oops, an error occurred! Unable to connect with TLS encryption
Was ich auch nicht verstehe, wohin dies eingetragen werden muss:
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport'] = 'smtp';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_server'] = 'smtp.googlemail.com:587';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_encrypt'] = 'tls';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_username'] = 'meine@mail.com';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_smtp_password'] = 'password';
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['defaultMailFromAddress'] = 'meine@mail.com';
$GLOBALS hab ich jetzt in einer Datei "AdditionalConfiguration.php" eingetragen und unter "typo3conf/" gespeichert.
dazu hab ich jetzt zwischen setSubject und setTo dies hinzugefügt: $mail->setFrom(array('test@test.de' => 'test name'));
Jetzt bekomme ich folgende Fehlermeldung:
Oops, an error occurred!
Failed to authenticate on SMTP server with username "meine@mail.de" using 2 possible authenticators
Dazu bekam ich von Google eine Email, dass jemand versucht hat bei mir einzuloggen: Anmeldeversuch verhindert
Also "AdditionalConfiguration.php" wird damit benötigt um Lokal einen Email Versand zu testen. Auf einem Live System wird diese Datei nicht benötigt.
/**
* action create
*
* @param \EbextHC\Ebexthc\Domain\Model\Contact $newContact
* @return void
*/
public function createAction(\EbextHC\Ebexthc\Domain\Model\Contact $newContact) {
$this->contactRepository->add($newContact);
$mail =
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage');
// Betreff
$mail->setSubject('Kontaktformular');
// absender
$mail->setFrom(array('test@test.de' => 'test name'));
// sendet an eine gewünschte email adresse
$mail->setTo(array('meine@mail.com' => 'Eugen'));
// nachricht
$mail->setBody('Here is the message itself');
$mail->addPart('<q>Here is the message itself</q>', 'text/html');
$mail->send();
// weiterleitung auf eine "Thank you for required" Seite.
$this->forward('thanks');
Soweit funktioniert der Versand und ich bekomme die Emails.
!Dazu musste ich aber eine neue Email Adresse bei Google erstellen, weil mit der alten Adresse es nicht funktioniert hat und es kam zum dieses wie oben genanten Fehler. Evt. liegt an den Email Google Einstellungen.
Jetzt möchte ich natürlich, dass das ganze Formular abgesendet wird und auf eine gültige Email Adresse überprüft wird.
... und auf eine gültige Email Adresse überprüft wird.
Das machst du ganz einfach bei der entsprechenden Property in deinem Model Contact,
etwa so:
/**
* This is the email of the contact
* @var \string
* @validate NotEmpty, EmailAddress
*/
protected $email;
TIP: besorg dir dieses Buch und erspare dir viele unnötige Fehlversuche ;-)
Also, ich hab auch nicht anderes stehen gerade... geht aber trotzdem nicht.
/**
* email
*
* @var string
* @validate NotEmpty, EmailAddress
*/
protected $email = '';
jenses schrieb
TIP: besorg dir dieses Buch und erspare dir viele unnötige Fehlversuche ;-)
Vielen Dank für Buch Empfehlung, werd ich mir zu legen, bis jetzt hab ich mit TYPO3 Ext. von O'Reilly gearbeitet.
ich komme nicht weiter...
ok.
/**
* email
*
* @var string
* @validate NotEmpty, EmailAddress
*/
protected $email = '';
Das war richtig, warum es bei mir nicht ging, lag an den DB Cache!!! Ganz wichtig der muss gelöscht werden. -.-
Weiter gehts mit: das Ganze Formular an E-Mail senden.
also:
/**
* action create
*
* @param \EbextHC\Ebexthc\Domain\Model\Contact $newContact
* @return void
*/
public function createAction(\EbextHC\Ebexthc\Domain\Model\Contact $newContact) {
$view = $this->objectManager->get('TYPO3\\CMS\\Fluid\\View\\StandaloneView');
// Nachricht HTML
$view->setFormat('html');
$view->setTemplatePatchAndFilename(GeneralUtility::getFileAbsFileName('EXT:ebexthc/Resources/Private/Templates/Email/Email.html'));
$view->setPartialRootPath(GeneralUtility::getFileAbsFileName('EXT:ebexthc/Resources/Private/Partials/'));
$view->setLayoutRootPath(GeneralUtility::getFileAbsFileName('EXT:ebexthc/Resources/Private/Layouts/'));
$view->assign('email', $email);
// neuer eintrag in DB
$this->contactRepository->add($newContact);
$mail = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage');
// Bettref
$mail->setSubject("Neue Anfrage ".$newContact->getroom());
//Absender Array
$sender = array($newContact->getEmail()=>$newContact->getFirstname()." ".$newContact->getLastname());
// Absender
$mail->setFrom($sender);
// Empänger
$mail->setTo(array('meine@mail.com' => 'Eugen'));
// Nachricht
$mail->setBody($view->render(), "text/html");
// senden
$mail->send();
// danke seite
$this->forward('thanks');
Ich hab das Problem, das nach Absenden eine weiße Seite erscheint. Und ich komme einfach nicht weiter..
Also:
/**
* action create
*
* @param \EbextHC\Ebexthc\Domain\Model\Contact $newContact
* @return void
*/
public function createAction(\EbextHC\Ebexthc\Domain\Model\Contact $newContact) {
$view = $this->objectManager->get('TYPO3\\CMS\\Fluid\\View\\StandaloneView');
// Nachricht
$view->setFormat('html');
$view->setTemplatePatchAndFilename(GeneralUtility::getFileAbsFileName('EXT:ebexthc/Resources/Private/Templates/Email/Email.html'));
$view->setPartialRootPath(GeneralUtility::getFileAbsFileName('EXT:ebexthc/Resources/Private/Partials/'));
$view->setLayoutRootPath(GeneralUtility::getFileAbsFileName('EXT:ebexthc/Resources/Private/Layouts/'));
$view->assign('email', $email);
// neuer eintrag in DB
$this->contactRepository->add($newContact);
$mail = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage');
// Bettref
$mail->setSubject("Neue Anfrage ".$newContact->getroom());
//Absender Array
$sender = array($newContact->getEmail()=>$newContact->getFirstname()." ".$newContact->getLastname());
// Absender
$mail->setFrom($sender);
// Empänger
$mail->setTo(array('meine@mail.com' => 'Eugen'));
// Nachricht
$mail->setBody($view->render(), "text/html");
// senden
$mail->send();
// danke seite
$this->forward('thanks');
Mein Code bis jetzt, komme nicht weiter, weil nach Absenden eine weiße Seite erscheint.
Okay, gefunden. Ich hatte ein paar Tipp Fehler und es fehlte eine Zeile ganz oben.
use \TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* action create
*
* @param \EbextHC\Ebexthc\Domain\Model\Contact $newContact
* @return void
*/
public function createAction(\EbextHC\Ebexthc\Domain\Model\Contact $newContact) {
$view = $this->objectManager->get('TYPO3\\CMS\\Fluid\\View\\StandaloneView');
// Nachricht
$view->setFormat('html');
$view->setTemplatePathAndFilename(GeneralUtility::getFileAbsFileName('EXT:ebexthc/Resources/Private/Templates/Email/Email.html'));
$view->setPartialRootPath(GeneralUtility::getFileAbsFileName('EXT:ebexthc/Resources/Private/Partials/'));
$view->setLayoutRootPath(GeneralUtility::getFileAbsFileName('EXT:ebexthc/Resources/Private/Layouts/'));
$view->assign('email', $email);
$view->assign('contact', $newContact);
// neuer eintrag in DB
$this->contactRepository->add($newContact);
$mail = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Mail\\MailMessage');
// Betreff
$mail->setSubject("Neue Anfrage ".$newContact->getroom());
//Absender Array
$sender = array($newContact->getEmail()=>$newContact->getFirstname()." ".$newContact->getLastname());
// Absender
$mail->setFrom($sender);
// Empänger
$mail->setTo(array('meine@mail.com' => 'Eugen'));
// Nachricht
$mail->setBody($view->render(), "text/html");
// senden
$mail->send();
// danke seite
$this->redirect('thanks');
unter ebexthc/Resources/Private/Templates/Email/Email.html liegt mein Template.
Leider sendet er noch keine Daten mit, dafür aber x beliebigen Text oder HTML Code..