Thema: Ubuntu – MariaDB – WordPress – Apache – CleanBlogg Theme.
Zum Benachrichtigen von abonnierten Lesern und andere Schritte ist es sinnvoll, dass WordPress Emails an die Leser und besonders den Betreiber des Blogs schicken kann. Leider geht viel davon nicht alleine und die entsprechenden Plugins sind sehr eigenwillig. Hier eine Liste meiner Versuche.
Versionen
- Post SMTP jedenfalls 1.7.2 uns/bis 1.9.5
- Subscribe2 jedenfalls 10.21 uns/bis 10.22.1
Email versenden grundsätzlich
Plugin SMTP (vormals Post Postman SMTP)
Speichert das Email-Passwort verschlüsselt in der Datenbank und nicht lesbar in WordPress-Dateien. Die Emailadresse ist lesbar auch nur in der DB abgelegt. Es läuft das ganze Versenden über diese Ebene: Einstellungen bei im Config-Bereich von WordPress (Einstellungen/Schreiben) und anderen Plugins werden ignoriert.
Im Interface ist der Benutzter Haupt-Email-Account mit SMTP-Zugang definiert, weiters wird der Email-Alias-Absender festgelegt und ein Log über die letzten 250 verschickten Mails ist verfügbar.
Email bei Blog-Updates versenden
Es geht nicht von alleine in WordPress, ein grosses Manko. Und echt mühsam.
Plugin Subscribe2
- Verschickt Mails von zwei Listen: den gemeldeten WordPress-Usern und von einer Plugin-eigenen Liste mit Abonnenten.
- Anmeldung erfolgt über Double-Opt-in, es wird nur die Email-Adresse abgelegt. Abmeldung erfolgt analog durch Angabe der Emailadresse im selben Feld über Double-Opt-out.
- Die Anmeldung auf neue Kategorien erfolgt automatisch.
Nicht optimal:
- Verwendet WP-Cron (wird nur bei Seitenaktivität initiert)
Sprachversionen
Es gibt deutsche Dateien: subscribe2-de_DE.po/subscribe2-de_DE.mo zum Herunterladen bei WordPress. Das Interface nutzt allerdings zeitgleich die de_DE.po/de_DE.mo von WordPress selber.
Wenn ein Widget verwendet wird, dann erscheinen die Bestätigungen wieder im Widget und sind nach dem Neuladen der Seite nicht ohne scrollen sichtbar. Durch Anlegen einer neuen und eigenen Seite kann man das Ändern. Die Seite muss man selber schreiben und unter Subscribe2/Einstellungen/Aussehen anlegen.
Die endgültige Bestätigung, dass man Angemeldet ist, kommt von alleine in einer eigenen Seite. Will man dort den Text ändern, so ist das in den Sprach-Dateien subscribe2-de_DE.po/subscribe2-de_DE.mo unter “You have successfully subscribed!” zu tun:
Du hast dich erfolgreich angemeldet, danke!<br><br>Ab nun bekommst du eine
Benachrichtigung per Email wenn es am Blog Neues gibt. Der Absender ist immer
<b>[EMAILADRESSE]</b>
. Abmelden kann man sich über das selbe Formularfeld auf der Startseite von <a href="http://www.domain.tld/"><b>www.domain.tld</b></a>.
Analog kann man den Text für “You have successfully unsubscribed.” und andere ändern. Sprachdateien (*.po/*.mo) müssen in das Verzeichnis /wordpress/wp-content/languages/plugins/
gespielt werden
Gelöst durch Hardcoden
Das Mail-Subject kann nur für Einzelmails (pro neuem Eintrag) gesetzt werden. Bei den anderen Einstellungen (Digets) wird das ignoriert und es gibt die Standardansage “[Blogname] X mal täglich Sammel-Benachrichtigung”. Das kann man nirgends ändern. Im Code geht es unter plugins/subscribe2/classes/class-s2-core.php bei die Zeile 1556:
//( '' == get_option('blogname') ) ? $subject = "" : $subject = "[" . stripslashes(html_entity_decode(get_option('blogname'), ENT_QUOTES)) . "] "; //$subject .= $display . " " . __('Digest Email', 'subscribe2'); $subject = "Es gibt Neues auf " . get_option('blogname');
Layoutprobleme
In der Sidebar erscheinen die Formular-Elemente einfach linksbündig. Kann man anscheinend nur in der Datei class-s2-frontend.php hart ändern (nach input type
suchen und mit style=\"width:[ZAHL]%\"
anpassen).
Andere Probleme
Manche Einstellungen widersprechen sich und die Ausführung ist nicht garantiert, darunter diese Beispiele, die nicht mit den derzeitigen anderen Einstellungen harmonieren:
- Es gibt die Option nach/beim Posten von Kommentaren zeitgleich den Newsletter zu abonnieren. Das führt aber nirgends hin.
- Die Standard-Einstellung ist anscheinend ein Pop-Up für das An-/Abmelden des Newsletters. Das kann man auch Aktiveren, aber es erscheint nur einen Sekundenbruchteil.
Gesperrte Domains auf einzelne Emails ausweiten
Subscribe2 erlaubt es ganze Domains zu sperren (unter Subscribe2/Settings/Miscellaneous), allerdings nicht einzelne Email-Adrssen. Das ist bei grossen Anbietern wie gmx, gmail, hotmail etc. unpraktisch. Man kann in das Feld Barred Domains auch Emails einsetzen wenn man folgende Zeilen in die Datei /wp-content/plugins/subscribe2/classes/class-s2-frontend.php am Ende der Funktion is_barred() einfügt. Rot die Zusätzlichen Anweisungen, grün die ursprüngliche Funktion.
$barred_domain = '@' . $barred_domain; if ( strtolower( $domain ) === strtolower( trim( $barred_domain ) ) ) { return true; } } if(strtolower(ltrim($barred_domain,'@')) == strtolower($email)){ return true; } } return false; } // end is_barred()
Nun kommt die Fehlermeldung, dass die Email gesperrt ist, mit dem widersinnigen Hinweis für Spammer, dass man es mit einer anderen Email-Adresse versuchen soll. Um bei Spam überhaupt keine Rückmeldung zu liefern geht man ca. auf Zeile 160 und tauscht die Rückmeldung gegen die Erfolgsmeldung aus:
} elseif ( $this->is_barred( $this->email ) ) { #$this->s2form = $this->s2form . $this->barred_domain; $this->s2form = $this->confirmation_sent; } else {
Gescheiterte Newsletter-Versuche und Gründe
Plugin Newsletter
Prüft keine neuen Einträge (braucht ein Zusatzplugin?). Aufwändiges Interface.
Plugin MailPoet
Prüft keine neuen Einträge (braucht ein Zusatzplugin?). Aufwändiges Interface.
Plugin MailChimp
Verlangt Registrierung, Hinweise auf Pro-Version. Prüft wahrscheinlich keine neuen Einträge (braucht ein Zusatzplugin?)
Plugin Email Posts
Interface ist technisch anscheinend gut adaptierbar. Checkt keine neuen Beiträge sonder verschickt nur stur X letzte Beiträge alle paar Stunden/Tage. Braucht einen serverseitigen cron-Job, der eine URL aufruft, mit dem voreingestellte Email-Listen verschickt werden
30 9 * * * wget -O /dev/null "http://www.domain.tld/?elp=cron&guid=[CODE]"
Plugin Tribulant Newsletters
Hat ein brauchbares Test-Mail verschickt, ein Teil ist in der pro-Version verpackt, viel Schnickschnack. Checkt keine neuen Posts (?).
Per Script
Greift aber nur auf serverseitiges mail() zurück, könnte man sicher adaptieren.
function email_members($post_ID) { global $wpdb; $usersarray = $wpdb->get_results("SELECT user_email FROM $wpdb->users;"); $users = implode(",", $usersarray); mail($users, "New WordPress recipe online!", 'A new recipe have been published); return $post_ID; } add_action('publish_post', 'email_members');
No Comments