[eS_BeMail] Update meiner Erweiterung BE_Mail
Hallo liebe Community,
nachdem ich in den letzten Tagen zwei neue Erweiterungen veröffentlicht habe, ist es an der Zeit meine erste Erweiterung BE_Mail einem Update zu unterziehen. Über Feedback zum Update würde ich mich wie immer sehr freuen.
Am grundsätzlichen Zweck der Erweiterung hat sich nichts geändert. Man kann mit ihr bei der Arbeit im Backend kurz Mal eben Nachrichten schreiben. Neu ist, dass man jetzt nicht mehr nur an einen Backend-User schreiben kann. Man kann nun an beliebig viele Backend-User, Frontend-Member und frei einzugebende Mailadressen gleichzeitig mailen.
Die bereits versendeten Mails werden in einer Liste angezeigt. Damit diese nicht zu groß wird, kann man Nachrichten auch versenden, ohne sie zu speichern. Neu in der Übersicht ist, dass Mails nun kopiert werden können. So können sie an andere Empfänger gesendet werden, ohne die Mail an die ursprünglichen Empfänger zu verlieren. Außerdem ist es möglich, Mails zu bearbeiten und erneut zu senden (hierbei wird die alte Nachricht überschrieben).
Ihr findet das Update im ER unter: http://www.contao.org/erweiterungsli...050009.de.html
Viele Grüße,
eS_IT
überarbeitete Datei esBeMail.php
Nachfolgend eine neue Version der kompletten Datei esBeMail.php, die insgesamt deutlich vereinfacht werden konnte:
PHP-Code:
class esBeMail extends Backend {
private $email = null;
/**
* Description:
* Die Methode sendAll() sendet eine Mail an alle uebergebenen Adressen.
*
* @author Patrick Froch (e@sy Solutions IT) <patrick.froch@easySolutionsIT.de>
* @since 21.05.2011
*/
public function sendAll(DataContainer $dc) {
$this->import('BackendUser', 'User');
$this->email = new Email();
$subject = $this->Input->post('subject');
$content = $this->Input->postRaw('content');
$this->email->from = $this->User->email;
$this->email->replyTo($this->User->email);
//array_merge: in numerischen Arrays überschreibt ein späterer Wert nicht den früheren
$adrs = array_merge( array_filter($this->Input->post('mailBE')),
array_filter($this->Input->post('mailFE')),
array_filter(explode("\n", $this->Input->post('mail'))) );
// Ergebnis: ein Array, daher prozedural weiter, ehemalige Methode sendMail() ist entbehrlich
if(count($adrs)) {
foreach($adrs AS $address) {
// to do: E-Mail-Validierung, z. B.
// $validierungsmuster = ...
// if(preg_match($validierungsmuster, $address)) { ..
// Mail versenden
$this->email->subject = $subject;
$this->email->html = $content;
$this->email->sendTo($address);
// } else ... z.B. Sammeln der Adressen, die nicht validiert werden konnten
}
// ggfs. E-Mail-Mitteilung über die nicht validierten E-Mail-Adressen an $this->user (s.o.)
}
// "Absenden ohne Speichern"
if($this->Input->post('save')) {
// Datensatz entfernen, ehemalige Methode deleteDS() ist entbehrlich
$this->Database->prepare("DELETE FROM `tl_es_bemail` WHERE `id` =?")->execute($dc->id);
// Rückkehr zur Listenansicht
$this->showList();
}
}
/**
* Description:
* Weiterleitung auf die UEbersicht wenn "Absenden ohne Speichern" gewaehlt wurde.
*
* @author Patrick Froch (e@sy Solutions IT) <patrick.froch@easySolutionsIT.de>
* @since 21.05.2011
*/
private function showList(){
if(version_compare(VERSION . '.' . BUILD, '2.9.0', '<')) {
$path = $this->Environment->base . 'typolight/main.php?do=tl_es_bemail';
} else {
$path = $this->Environment->base . 'contao/main.php?do=tl_es_bemail';
}
$this->redirect($path, 301);
}
}
Mein Vorschlag, für das Array mail den MultiTextWizard zum Einsatz zu bringen, ist hier noch nicht berücksichtigt, lässt sich aber ohne große Mühe integrieren.
MfG
Ulrike
[Edit:]
Oops, da war ich ein paar Minuten zu spät.
Trotzdem lohnt sich ein Blick auf den obigen Code wg. des Verzichts auf die Methode deleteDS().
Und noch zwei Kleinigkeiten:
Schönere Ausgabe des Datums:
PHP-Code:
public function setDate(){
return date($GLOBALS['TL_CONFIG']['dateFormat']);
}
Ersetzen des dt. Worts 'Uhr' durch Sprach-Variable:
PHP-Code:
public function setTime(){
return date('H:i:s') . ' '. $GLOBALS['TL_LANG']['tl_es_bemail']['o_clock'];
}
Und ab sofort halte ich mich wieder heraus!
Fragen zum TinyMCE in der Erweiterung eS_BeMail
Hallo eS_IT,
zuerst einmal Danke für die tolle Erweiterung.
Ich habe eine Frage bezüglich des TinyMCE, der in eS_BeMail eingebunden ist. Ich habe für diesen Punkt schon einen eigenen Beitrag eröffnet, deshalb hier der Link zu diesem Beitrag:
https://www.contao-community.de/show...ungen-anpassen
Danke für Deine Hilfe
Schmidty
Fatal Error bei Contao Vers. 2.11.5
Hallo, super Erweiterung, nur leider nicht lauffähig unter 2.11.5 - oder ist dies ein Problem wenn die Erweiterung gemeinsam mit eS_ResetPassword eingesetzt wird ?
Code:
Warning: array_merge() [function.array-merge]: Argument #1 is not an array in /websoeba/www.webwerkstatt.org/avac/system/modules/es_bemail/esBeMail.php on line 62
#0 [internal function]: __error(2, 'array_merge() [...', '/websoeba/www.w...', 62, Array)
#1 /websoeba/www.webwerkstatt.org/avac/system/modules/es_bemail/esBeMail.php(62): array_merge(NULL, Array, Array)
#2 /websoeba/www.webwerkstatt.org/avac/system/drivers/DC_Table.php(1845): esBeMail->sendAll(Object(DC_Table))
#3 /websoeba/www.webwerkstatt.org/avac/system/modules/backend/Backend.php(287): DC_Table->edit()
#4 /websoeba/www.webwerkstatt.org/avac/contao/main.php(120): Backend->getBackendModule('tl_es_bemail')
#5 /websoeba/www.webwerkstatt.org/avac/contao/main.php(230): Main->run()
#6 {main}
Warning: filter_var_array() expects parameter 1 to be array, null given in /websoeba/www.webwerkstatt.org/avac/system/modules/es_bemail/esBeMail.php on line 65
#0 [internal function]: __error(2, 'filter_var_arra...', '/websoeba/www.w...', 65, Array)
#1 /websoeba/www.webwerkstatt.org/avac/system/modules/es_bemail/esBeMail.php(65): filter_var_array(NULL, 274)
#2 /websoeba/www.webwerkstatt.org/avac/system/drivers/DC_Table.php(1845): esBeMail->sendAll(Object(DC_Table))
#3 /websoeba/www.webwerkstatt.org/avac/system/modules/backend/Backend.php(287): DC_Table->edit()
#4 /websoeba/www.webwerkstatt.org/avac/contao/main.php(120): Backend->getBackendModule('tl_es_bemail')
#5 /websoeba/www.webwerkstatt.org/avac/contao/main.php(230): Main->run()
#6 {main}
Warning: array_filter() expects parameter 1 to be array, null given in /websoeba/www.webwerkstatt.org/avac/system/modules/es_bemail/esBeMail.php on line 65
#0 [internal function]: __error(2, 'array_filter() ...', '/websoeba/www.w...', 65, Array)
#1 /websoeba/www.webwerkstatt.org/avac/system/modules/es_bemail/esBeMail.php(65): array_filter(NULL)
#2 /websoeba/www.webwerkstatt.org/avac/system/drivers/DC_Table.php(1845): esBeMail->sendAll(Object(DC_Table))
#3 /websoeba/www.webwerkstatt.org/avac/system/modules/backend/Backend.php(287): DC_Table->edit()
#4 /websoeba/www.webwerkstatt.org/avac/contao/main.php(120): Backend->getBackendModule('tl_es_bemail')
#5 /websoeba/www.webwerkstatt.org/avac/contao/main.php(230): Main->run()
#6 {main}
Fatal error: Uncaught exception Swift_RfcComplianceException with message Address in mailbox given [] does not comply with RFC 2822, 3.6.2. thrown in /websoeba/www.webwerkstatt.org/avac/plugins/swiftmailer/classes/Swift/Mime/Headers/MailboxHeader.php on line 308
#0 /websoeba/www.webwerkstatt.org/avac/plugins/swiftmailer/classes/Swift/Mime/Headers/MailboxHeader.php(238): Swift_Mime_Headers_MailboxHeader->_assertValidAddress('')
#1 /websoeba/www.webwerkstatt.org/avac/plugins/swiftmailer/classes/Swift/Mime/Headers/MailboxHeader.php(96): Swift_Mime_Headers_MailboxHeader->normalizeMailboxes(Array)
#2 /websoeba/www.webwerkstatt.org/avac/plugins/swiftmailer/classes/Swift/Mime/Headers/MailboxHeader.php(60): Swift_Mime_Headers_MailboxHeader->setNameAddresses(Array)
#3 /websoeba/www.webwerkstatt.org/avac/plugins/swiftmailer/classes/Swift/Mime/SimpleHeaderFactory.php(60): Swift_Mime_Headers_MailboxHeader->setFieldBodyModel(Array)
#4 /websoeba/www.webwerkstatt.org/avac/plugins/swiftmailer/classes/Swift/Mime/SimpleHeaderSet.php(75): Swift_Mime_SimpleHeaderFactory->createMailboxHeader('To', Array)
#5 /websoeba/www.webwerkstatt.org/avac/plugins/swiftmailer/classes/Swift/Mime/SimpleMessage.php(306): Swift_Mime_SimpleHeaderSet->addMailboxHeader('To', Array)
#6 /websoeba/www.webwerkstatt.org/avac/system/libraries/Email.php(409): Swift_Mime_SimpleMessage->setTo(Array)
#7 /websoeba/www.webwerkstatt.org/avac/system/modules/es_bemail/esBeMail.php(68): Email->sendTo(NULL)
#8 /websoeba/www.webwerkstatt.org/avac/system/drivers/DC_Table.php(1845): esBeMail->sendAll(Object(DC_Table))
#9 /websoeba/www.webwerkstatt.org/avac/system/modules/backend/Backend.php(287): DC_Table->edit()
#10 /websoeba/www.webwerkstatt.org/avac/contao/main.php(120): Backend->getBackendModule('tl_es_bemail')
#11 /websoeba/www.webwerkstatt.org/avac/contao/main.php(230): Main->run()
#12 {main}
Du meinst wahrscheinlich be_email, nicht be_mail
Zitat:
Zitat von
Simone
Hallo eS-IT,
erstmal vielen Dank für diese Erweiterung, die bestimmt eine geschickte Sache ist.
Ich habe zunächst versucht diese in der Version 2.11.5 zu installieren und bin dann nach Fehlermeldung zurück auf die Version 2.10.4., da ich von einem Versionsproblem ausging.
Allerdings bekomme ich unter 2.10.4 genau die gleiche Meldung beim Klick auf "Neue Mail"
Fatal error: Uncaught exception Exception with message Query error: Unknown column 'alternate_email_2' in 'field list' (SELECT name, email, alternate_email, alternate_email_2, funktion FROM tl_user WHERE email != "" ORDER BY funktion) thrown in .../system/libraries/Database.php on line 689
Der Fehler stimmt, diese Felder gibt es in der tl_user nicht. Was stimmt nun nicht, die Installation? Die Version?
Ich wäre sehr dankbar, wenn Du mir einen Tipp hättest.
- Simone
Hallo Simone,
leider kann ich Dir bei Deinem Problem nicht helfen. Das ist nicht meine Erweiterung. markocupic hielt es für sinnvoll, seine Erweiterung fass genau so zu nennen wie meine. Wahrscheinlich hat ihm der Titel so gut gefallen:D. Meine heiß be_mail, seine be_email. Leider musst Du Dich an Ihn wenden, oder Du probierst meine aus ;).
Viele Grüße,
eS_IT
Log für versendete emails?
Hallo eS-IT,
manchmal kommt es vor das ich emails längere Zeit vorbereitet habe.
Und dann passiert es mir auch, das ich nicht mehr genau weis ob ich diese mail bereits versendet habe oder nicht.
Gibt es einen logfile?
Oder irgend was anders wo kann ich sehen ob eine e-mail bereits versendet wurde?
Gruss dtptiger