Hallo zusammen,
besteht die Möglichkeit, dass der Admin eine Info bekommt - entweder per mail oder im Backend - wenn sich ein Abonnent aus dem Verteiler austrägt?
Danke im Voraus!
Ingo
Hallo zusammen,
besteht die Möglichkeit, dass der Admin eine Info bekommt - entweder per mail oder im Backend - wenn sich ein Abonnent aus dem Verteiler austrägt?
Danke im Voraus!
Ingo
Wie stellst du dir das genau vor?
Ich mein die E-Mail darf aus Datenschutzgründen nur für die Dauer des Abonnements gespeichert werden.
MfG Tristan
Hallo,
ich wärm das mal schnell auf... weil ich die Info ganz interessant finde.
Den Datenschutz-Aspekt verstehe ich.
Interessant wäre aber auch aus meiner Sicht generell, dass sich jemand abgemeldet hat (auch ohne die e-mail).
Z.b. durch einen Eintrag im System-Log bzw. wäre das ja auch als mail an den Admin möglich.
Ähnlich dem Eintrag, beim abonnieren. "Deletet recipient from [Newsletter-Name]".
Wäre das möglich?
lg
Gnarf
Mit dem avisotaUnsubscribe Hook kannst du Abmeldungen "beobachten" und entsprechende Aktionen ausführen.
config.php
MyClass.phpPHP-Code:
$GLOBALS['TL_HOOKS']['avisotaUnsubscribe'][] = array('MyClass', 'hookAvisotaUnsubscribe');
PHP-Code:
class MyClass
{
public function hookAvisotaUnsubscribe($arrRecipient)
{
// do somethink with $arrRecipient
}
}
Da die Frage nach einer Benachrichtigungs-Mail hier ja bereits mehrfach gestellt wurde, aber noch in keinem der Threads eine Lösung steht, hier mal schnell der Hook:
/system/modules/unsubscribenotifier/config/config.phpPHP-Code:
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
$GLOBALS['TL_HOOKS']['avisotaUnsubscribe'][] = array('UnsubscribeNotifier', 'hookAvisotaUnsubscribe');
?>
/system/modules/unsubscribenotifier/UnsubscribeNotifier.phpPHP-Code:
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
class UnsubscribeNotifier
{
public function hookAvisotaUnsubscribe($arrRecipient)
{
$objEmail = new Email();
$objEmail->subject = "Abmeldung: ". $arrRecipient;
$objEmail->from ="absender@email.com";
$objEmail->fromName ="Newsletter | domain.com";
$text .= "Der Nutzer mit der E-Mail-Adresse " .$arrRecipient . " hat sich vom Newsletter abgemeldet.";
$objEmail->text = $text;
$objEmail->sendTo( 'empfaenger@email.com' );
}
}
?>
Viele Grüße, TN
Hallo,
ich hab versucht den Code in php. Dateien mit den entsprechenden Ordnern anzulegen. Übertrage ich den Ordner unsubscribenotifier in system modules per ftp, so werden alle umlaute der gesammten Seite falsch dargestellt und beim Absenden der Kündigung bekomme ich eine weiße Seite. Wie muss ich da genauer vorgehen? Wie muss die Ordnerstruktur genau aussehen?
Hi,
herzlichen Dank für die Anleitung, das funktioniert super! Genau das, was ich wollte.
Allerdings werden in der Benachrichtigungsmail die Daten des Absenders nicht angezeigt. Die email Adresse des Absenders wird mit
arrRecipient['email']
angesprochen, oder welche Angaben man auch immer von ihm sehen möchte.
Christian
Vermutlich, weil der ja bereits gelöscht wurde. Man müsste ihn vorher also nur deaktivieren. Tristan?
Contao in Kiel: kikmedia webdevelopment | Contao-Partnerin | Contao Usergroup Kiel | github | Contao-Community-Alliance | MetaModels-Team
Nein, er wird erst nach dem Hook gelöscht. Schau dir mal mit var_dump($arrRecipient) an, was in dem Array drin steht, eigentlich sollten dort der gesamte Datensatz drin stehen.
Äh, nee sry der Datensatz steht nicht drin, aber alle Felder aus dem Formular sollten drin stehen.
Hallo
Die Mailrückmeldung an den Newsletter Admin funktioniert mit diesem Hook nur mit dem Abmeldelink in der Anmeldemail. Möchte ich mich auf der Website abmelden, wird zwar mein Abonnement gelöscht aber in der Mailrückmeldung an den Admin ist keine "von" Adresse, im Betreff und im Mailbody steht an Stelle der ausgetragenen Mailadresse nur "array".
Da ich denke, dass ein Abonnent die Anmeldemail nicht ewig aufbewahrt, wird er sich wohl später mal online vom Newsletter abmelden wollen und da müsste die Rückmeldung an den Admin auch funtionieren.
Mail:
Betreff: Abmeldung: ArrayInhalt der Class-Datei:Mailbody: Der Abonnent mit der E-Mail-Adresse Array hat sich vom High Adventure Newsletter abgemeldet.
Bitte kann mir da jemand weiter helfen.PHP-Code:
class UnsubscribeNotifier
{
public function hookAvisotaUnsubscribe($arrRecipient)
{
$objEmail = new Email();
$objEmail->subject = "Abmeldung: ". $arrRecipient;
$objEmail->from = $arrRecipient;
$objEmail->fromName = "Newsletter domain.ch";
$text .= "Der Abonnent mit der E-Mail-Adresse " .$arrRecipient . " hat sich vom Newsletter abgemeldet.";
$objEmail->text = $text;
$objEmail->sendTo( 'empfaenger@mail.ch' );
}
}
?>
Vielen Dank schon mal.
Geändert von mamboo (29.10.2013 um 19:22 Uhr)
Grüsse mamboo
Wenn die Variable schon $arrRecipient heißt, wird es wohl auch ein Array sein ;-)
Daher bekommst Du bei Deinen Ausgaben das Wort Array.
Du musst nicht den gesamten Array $arrRecipient ausgeben, sondern nur eine Kponente davon. Wie die heißt: keine Ahnung. Als Schuss in's Bluse würde ich mal $arrRecipient['email'] probieren
Contao-Community-Treff Bayern: http://www.contao-bayern.de
Hallo fiedsch
Ja, das wäre die Komponente. Damit hab ich auch schon rumprobiert aber sobald ich das ändere, funktioniert Rückmeldung auf die Mailabmeldung nicht mehr.
Schreibe ich sie wie folgt um:
erscheint die folgende Fehlermeldung und das Abo wird nicht gelöscht:PHP-Code:
class UnsubscribeNotifier
{
public function hookAvisotaUnsubscribe($arrRecipient)
{
$objEmail = new Email();
$objEmail->subject = "Abmeldung: ". $arrRecipient['email'];
$objEmail->from = $arrRecipient['email'];
$objEmail->fromName = "Newsletter domain.ch";
$text .= "Der Abonnent mit der E-Mail-Adresse " .$arrRecipient['email'] . " hat sich vom Newsletter abgemeldet.";
$objEmail->text = $text;
$objEmail->sendTo( 'empfaenger@mail.ch' );
}
}
?>
Schreibe ich nur das eine oder andere um, werden die Rückmeldemails fehlerhaft oder das Abo wird auch gar nicht gelöscht.Fatal error: Uncaught exception Swift_RfcComplianceException with message Address in mailbox given [u] does not comply with RFC 2822, 3.6.2. thrown in D:\www\www351\plugins\swiftmailer\classes\Swift\Mi me\Headers\MailboxHeader.php on line 308
#0 D:\www\www351\plugins\swiftmailer\classes\Swift\Mi me\Headers\MailboxHeader.php(238): Swift_Mime_Headers_MailboxHeader->_assertValidAddress('u')
#1 D:\www\www351\plugins\swiftmailer\classes\Swift\Mi me\Headers\MailboxHeader.php(96): Swift_Mime_Headers_MailboxHeader->normalizeMailboxes(Array)
#2 D:\www\www351\plugins\swiftmailer\classes\Swift\Mi me\Headers\MailboxHeader.php(60): Swift_Mime_Headers_MailboxHeader->setNameAddresses(Array)
#3 D:\www\www351\plugins\swiftmailer\classes\Swift\Mi me\SimpleMimeEntity.php(573): Swift_Mime_Headers_MailboxHeader->setFieldBodyModel(Array)
#4 D:\www\www351\plugins\swiftmailer\classes\Swift\Mi me\SimpleMessage.php(195): Swift_Mime_SimpleMimeEntity->_setHeaderFieldModel('From', Array)
#5 D:\www\www351\system\libraries\Email.php(467): Swift_Mime_SimpleMessage->setFrom(Array)
#6 D:\www\www351\system\modules\AvisotaCustom\Unsubsc ribeNotifier.php(15): Email->sendTo('ursina.huwiler@...')
#7 D:\www\www351\system\modules\Avisota\ModuleAvisota Subscription.php(468): UnsubscribeNotifier->hookAvisotaUnsubscribe('ursina.huwiler@...', Array)
#8 D:\www\www351\system\modules\Avisota\ModuleAvisota Subscription.php(773): ModuleAvisotaSubscription->unsubscribetoken()
#9 D:\www\www351\system\modules\frontend\Module.php(1 40): ModuleAvisotaSubscription->compile()
#10 D:\www\www351\system\modules\Avisota\ModuleAvisota Subscription.php(548): Module->generate()
#11 D:\www\www351\system\modules\frontend\ContentModul e.php(72): ModuleAvisotaSubscription->generate()
#12 D:\www\www351\system\libraries\Controller.php(489) : ContentModule->generate()
#13 D:\www\www351\system\modules\frontend\ModuleArticl e.php(193): Controller->getContentElement('1743')
#14 D:\www\www351\system\modules\frontend\Module.php(1 40): ModuleArticle->compile()
#15 D:\www\www351\system\modules\frontend\ModuleArticl e.php(71): Module->generate()
#16 D:\www\www351\system\libraries\Controller.php(421) : ModuleArticle->generate(false)
#17 D:\www\www351\system\libraries\Controller.php(294) : Controller->getArticle('401', false, false, 'main')
#18 D:\www\www351\system\modules\frontend\PageRegular. php(100): Controller->getFrontendModule('0', 'main')
#19 D:\www\www351\index.php(200): PageRegular->generate(Object(DB_Mysql_Result))
#20 D:\www\www351\index.php(319): Index->run()
#21 {main}
Was mach ich falsch?
Grüsse mamboo
Wenn du in Deinem Code
schreibst, ist die Absendeadresse "array". Das ist zwar sinnfrei, aber aus Sicht von SwiftMailer eine gültige E-Mail-Adresse.Code:$objEmail->from = $arrRecipient;
stört SwiftMailer als ungültige E-Mail-Adresse -- daher die Fehlermeldung und der Skriptabbruch.Code:$objEmail->from = $arrRecipient['email'];
Ich würde jetzt mal probieren, als Absender die Admin-E-Mail-Adresse einzusetzen (die Mail kommt ja auch nicht wirklich von dem Member) und im Text der Mail den $arrRecipient Array auszugeben, damit Du siehst, wie der genau gegliedert ist und was der Grund für den Fehler ist.
Code:ob_start(); print_r($arrRecipient); $buffer = ob_get_contents(); ob_end_clean(); // und jetzt $buffer dem Text Deiner Mail hinzufügen
Contao-Community-Treff Bayern: http://www.contao-bayern.de
Hi,
ich benötige gerade genau die gleiche Funktion und habe den Hook in meine Seite eingebaut.
Bei mir funktioniert es mit diesem Code, der sich von Deinem nicht unterscheidet.
Grüße MarcoPHP-Code:
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
class UnsubscribeNotifier
{
public function hookAvisotaUnsubscribe($arrRecipient)
{
$objEmail = new Email();
$objEmail->subject = "Abmeldung: ". $arrRecipient['email'];
$objEmail->from = $arrRecipient['email'];
$objEmail->fromName ="Newsletter | domain.com";
$text .= "Der Nutzer mit der E-Mail-Adresse " . $arrRecipient['email'] . " hat sich vom Newsletter abgemeldet.";
$objEmail->text = $text;
$objEmail->sendTo( 'test@test.de' );
}
}
?>
@ Yangdoo
So funktioniert's bei mir nur mit dem Link in der Anmeldemail.
Möchte ich mich mit dem An/Abmeldeformular auf der Website abmelden, funktioniert dieser Script bei mir nicht. Funkt das bei Dir wirklich auch aus dem Formular?
Grüsse mamboo
@ fiedsch
an welcher Stelle muss dieser Code im Script eingefügt werden? Sorry, bin noch kein PHP-Profi.
Sorry, hab's rausgefunden...
ausgabe im Mail:
Wie kann ich jetzt die Mailadresse z.B. in eine Variable packen, damit ich sie an den gewünschten Stellen im Text und Betreff ausgeben lassen kann?PHP-Code:
(
[lists] => Array
(
[0] => 1
)
[email] => email@mail.ch
[firstname] =>
[lastname] =>
[address] =>
[zip_code] =>
[city] =>
[state] =>
[phon] =>
)
Geändert von mamboo (30.10.2013 um 10:29 Uhr)
Grüsse mamboo
Ja, bei mir geht es.
Ich habe Dir meinen Ordner hochgeladen.
Diesen kopierst Du in den Ordner system/module/
unsubscribenotifier.zip
@ Yangdoo
Damit funktioniert die Abmeldung aus dem Formular aber bei Abmeldung mit dem Maillink wird jetzt die obige Fehlermeldung wieder ausgegeben.
@ alle
Es sieht so aus als würde der eine Script für die Mailabmeldung funktionieren und der andere Script für die Abmeldung mittels Formular.
Kann ich das irgendwie abfangen ev. mit einer Abfrageschleife woher die Anweisung kommt?
Grüsse mamboo
Wenn ich bei mir auf den Abmelden Link klicke, wird die Seite der Newsletteranmeldung aufgerufen. In der URL wird die E-Mail mit übergeben aber nicht in das Feld E-Mail eingetragen.
Wenn ich die E-Mail in das Feld eintrage, werde ich abgemeldet und bekomme eine Bestätigung.
das mag so sein mit dem Link aus dem Newsletter - nicht aber mit dem Link aus der Anmelde/Bestätigungsmail.
Grüsse mamboo
Bei mir ist es so mit dem Link aus der Anmelde/Bestätigungsmail. Den Link aus dem Newsletter habe ich noch garnicht getsetet.
Meine Seite läuft mit Contao 2.10.3 und Avisota 1.6.2
Mit dem Link aus der Anmelde/Bestätigungsmail wird der Abonnent direkt gelöscht ohne zuerst die Anmeldeseite aufzurufen.
Welche Version läuft auf Deiner Seite?
Grüsse mamboo
Bei mir läuft:
Contao 2.11.12
Avisota 1.7.2
Dann liegen die unterschiedlichen Funktionen ev. im Versionsunterschied. Ich denke aber, es müsste auch mit V1.6.2 keinen Unterschied machen, ob man sich per E-Maillink oder per Formular abmeldet. Die Rückmeldung sollte in beiden Fällen den selben Script verwenden.
Ich bastle da mal noch ein bisschen dran. Vielleicht hast Du mir ja noch einen Tipp dazu, wie ich das abfangen könnte ev. in einer if-Schleife.
Grüsse mamboo
Hallo
Hat niemand eine Idee zur Lösung dieses Problems? Wäre für jeden Tipp dankbar.
Grüsse mamboo
Also in der 1.6.2 kann ich nicht garantieren, dass es vollständig funktioniert, müsste erst Quellcode wühlen >.<
Ich hatte ein vollständiges Beispiel vor einiger Zeit auf github gepostet, wie man eine Benachrichtigung bei Anmeldung, Aktivierung und Abmeldung erstellt.
Vielleicht hilft dir das weiter?
https://gist.github.com/tristanlins/1883699
Ich denke vor allem diese Weiche ist wichtig für dich:
https://gist.github.com/tristanlins/...tfile1-php-L73
damit bekomme ich nur eine weisse Seite angezeigt :-(
Grüsse mamboo
Fehlermeldungen war/ist eingeschaltet und im Log finde ich keine Fehlermeldungen.
Grüsse mamboo
Dann ist es vermutlich ein Syntax Fehler, der nicht angezeigt wird, wie sieht denn der aktuelle Code aus den du verwendest?
kopiert von Deiner Vorlage auf github, und die E-Mailadressen angepasst... Da ich nur diesen Code meiner Datei habe, musste ich noch die Klasse ergänzen.
PHP-Code:
<?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
class UnsubscribeNotifier
{
public function hookAvisotaUnsubscribe()
{
// unsubscribe by direct link
if (func_num_args() == 2) {
list($strEmail, $arrLists) = func_get_args();
$arrRecipient = \Database::getInstance()
->prepare("SELECT * FROM tl_avisota_recipient WHERE email=?")
->limit(1)
->execute($strEmail)
->fetchAssoc();
}
// unsubscribe via module
else {
list($arrRecipient) = func_get_args();
$arrLists = $arrRecipient['lists'];
}
$objLists = \Database::getInstance()
->execute("SELECT * FROM tl_avisota_recipient_list WHERE id IN (0," . implode(',', $arrLists) . ")");
$strEmail = $arrRecipient['email'];
$arrListNames = $objLists->fetchEach('title');
$arrPersonals = array();
foreach ($arrRecipient as $key => $value) {
$arrPersonals[] = sprintf('%s: %s', $key, $value);
}
$this->sendMessage(
'Newsletter Abmeldung',
sprintf(
"Der Abonnent %s hat sich von den folgenden Liste abgemeldet:\n- %s\n\nSeine persönlichen Daten:\n- %s",
$strEmail,
implode("\n- ", $arrListNames),
implode("\n- ", $arrPersonals)
)
);
}
protected function sendMessage($subject, $body)
{
$objEmail = new Email();
// TODO change your sender
$objEmail->from = 'info@domain.ch';
$objEmail->fromName = 'Avisota Newsletter';
$objEmail->subject = $subject;
$objEmail->text = $body;
// TODO change you recipient
$objEmail->sendTo('mail@mail.ch');
}
}
}
?>
Grüsse mamboo
Du hast eine } zu viel ;-)
Entferne mal die letzte }
oops...
dachte ich müsste die Klasse noch abschliessen.
So funktionierts, jedoch gibt es auch hier einen Unterschied der Mailinhalte.
Bei Abmeldung mit dem Direktlink aus der Anmeldemail werden die persönlihcen Daten angezeigt.
Bei Abmeldung via Formular sind die Felder der persönlichen Daten leer.
Mail aus direct link:
Mail aus modul:Seine pers?nlichen Daten:
- id: 79
- pid: 1
- tstamp: 1383322048
- email: mail@mail.ch
- salutation:
- title:
- firstname: vorname
- lastname: nachname
- gender:
- confirmed: 1
- token:
- addedOn: 1383322048
- addedBy: 0
- addedNotice:
- addedByModule: 101
- addedOnPage: 407
- notification:
- city: wohnort
- address:
- zip_code:
- phon:
- state:
- acceptPrivacy: 1
In beiden fällen sind die Umlaute fehlerhaft.Seine pers?nlichen Daten:
- lists: Array
- email: mail@mail.ch
- firstname:
- lastname:
- address:
- zip_code:
- city:
- state:
- phon:
- acceptPrivacy:
Grüsse mamboo
So, Avisota 2 ist fast fertig konfiguriert.
Nun möchte ich noch per Mail benachrichtigt werden, wenn sich jemand in meinem Avisota-Newsletter angemeldet, bestätigt oder abgemeldet hat.
Für diese Fälle habe ich im Benachrichtigungscenter ein Gateway eingerichtet und je eine Benachrichtigung erstellt.
Leider erhalte ich keine Mails, wenn einer dieser Fälle eintritt. Muss ich noch irgendwo anders etwas einrichtet, damit die Mails ausgelöst werden?
Besten Dank für eure Antwort.
Du hast auch für jede Benachrichtigung eine Sprache angelegt? Das ist in so einer Lightbox, wo man auch den Mail-Text eingibt.
Hallo Tril
Besten Dank für deine treffsichere Antwort. Die Sprache hat in der Tat gefehlt - und ich bin beeindruckt, dass die Mehrsprachigkeit in Avisota 2 so differenziert berücksichtigt wurde. Da sind sicher noch viele weitere Juwelen im Code versteckt, die ich hoffentlich mal (im Handbuch) finden werde
Liebe Grüsse.
Hallo (Tril ?)
Gerne möchte ich nun im Benachrichtigungs-Center eine Mailnachricht ausgeben lassen, in der geschrieben steht, welche Mailadresse abgemeldet wurde. Ist es möglich, dies mit einem Platzhalter z. B. so was wie ein (Twig-)Insert-Tag in den Rohtext der Sprache zu schreiben, in der Art wie:
Die Mail ##email## wurde abbestellt.
So funktioniert es leider nicht, ich erhalte die Meldung:
Die folgenden eingesetzten Tokens werden vom Notification-Typ nicht unterstützt: ##email##.
Der Token Assistent müsste dir eigentlich alle Tokens anzeigen.
Aber hier eine Liste der zur Verfügung stehenden Tokens:
##datetime## Datum/Uhrzeit
##date## Datum
##time## Uhrzeit
##subscription_*## Feld der Subscription, bspw. ##subscription_id##
##mailing_list_*## Feld der MailingList, bspw. ##mailing_list_id##
##recipient_*## Feld des Recipient, bspw. ##recipient_id##
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)