Postfix als Entwickler verwenden

Für ein aktuelles Projekt von mir ist es wichtig, dass mein Debian Home Server E-Mails versenden kann. Diese sollen jedoch zu Testzwecken, unabhängig vom angegebenen Absender und Empfänger, immer an eine bestimmte E-Mail-Adresse geschickt werden. Das hat den Vorteil, dass ich ganz viele verschiedene E-Mail-Adressen verwenden kann und dabei niemand mit Mails belästigt wird, die er nicht haben möchte. Spam mag niemand!

Hierbei ist zu beachten, dass man im Normalfall keine E-Mails von einem Home Server aus versenden sollte. Warum das so ist? Nicht ein einziger E-Mail-Anbieter würde sie annehmen. Das liegt ganz einfach daran, dass ein Home-Server, beziehungsweise der Internet-Anschluss in einer Wohnung, keine statische IP-Adresse verwendet (aus nicht-DSL-Bereichen) und ebenfalls keinen gültigen Hostnamen besitzt. Somit gilt man unter keinen Umständen als legitimer und seriös arbeitender Versender von E-Mails.

Um das Problem zu lösen, versenden wir daher unsere E-Mails mit dem MTA (Mail-Transfer-Agent) Postfix per SMTP über einen der vielen legitimen und seriösen Anbieter, die es im Internet so gibt. In meinem Fall ist dies GMX.

Installation

Als Erstes installieren wir Postfix.

sudo apt-get install postfix

Anschließend öffnet sich ein Dialogfeld, in dem wir einige grundsätzliche Einstellungen vornehmen müssen. Bei der ersten Frage, nach der Art der Konfiguration, wählen wir „Satellitensystem“ aus, gehen per Tab-Taste auf „Ok“ und bestätigen dies mit der Enter-Taste.

postfix konfiguration satellitensystem

Im nächsten Schritt wird der System-E-Mail-Name abgefragt. Hier habe ich den vorausgefüllten Namen meines Servers belassen.

postfix konfiguration domainname

Nun werden wir nach dem SMTP-Relay-Server gefragt. Hier kommt der SMTP-Server eures Anbieters rein. In meinem Fall „mail.gmx.net“.

postfix konfiguration smtp relay server

Sollte man während dieser Eingaben bei der Postfix Konfiguration einen Fehler gemacht haben und dies erst später bemerken, kann mit dem folgenden Befehl die Konfiguration erneut gestartet werden.

sudo dpkg-reconfigure postfix

Einrichtung

Die weiteren Schritte bei der Einrichtung von Postfix müssen per Hand durchgeführt werden. Dafür bearbeiten wir als Erstes die Konfigurationsdatei mit dem Befehl:

sudo nano /etc/postfix/main.cf

Am Ende dieser Datei müssen die folgenden Zeilen eingefügt werden:

smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
sender_canonical_maps = regexp:/etc/postfix/sender_canonical  
recipient_canonical_maps = regexp:/etc/postfix/recipient_canonical  
smtp_tls_security_level = encrypt

Hierdurch legen wir fest, dass der SMTP Anbieter eine Authentifizierung benötigt, die Verbindung über eine sichere TLS Verbindung erfolgen soll und in welcher Datei die Zugangsdaten stehen. Des Weiteren verweisen wir auf zwei Dateien, durch die beim Versand einer E-Mail zum einen der Absender und zum anderen der Empfänger verändert wird.

Jetzt kümmern wir uns als Erstes um die Zugangsdaten. Dafür erstellen wir mit dem ersten Befehl eine neue Datei und bearbeiten diese Datei mit dem zweiten Befehl.

sudo touch /etc/postfix/sasl_password
sudo nano /etc/postfix/sasl_password

Dort wird eine neue Zeile eingefügt. ADRESSE und PASSWORT müssen selbstverständlich durch eure Daten ersetzt werden.

mail.gmx.net ADRESSE@gmx.de:PASSWORT

Nun legen wir fest, wer der Absender aller E-Mails sein soll, indem wir eine neue Datei anlegen und diese bearbeiten.

sudo touch /etc/postfix/sender_canonical
sudo nano /etc/postfix/sender_canonical

Hier fügen wir die folgende Zeile ein. ADRESSE müsst Ihr erneut ersetzen.

/.+/ ADRESSE@gmx.de

Dasselbe machen wir mit der Empfänger-Adresse, an die alle E-Mails geschickt werden sollen.

sudo touch /etc/postfix/recipient_canonical
sudo nano /etc/postfix/recipient_canonical

In diese Datei kommt die folgende Zeile. ADRESSE muss wieder ausgetauscht werden. Wenn die Empfänger-Adresse dieselbe wie die vom Absender sein soll, ist die Zeile identisch mit der aus der vorherigen Datei.

/.+/ ADRESSE@gmx.de

Um die veränderte Konfiguration von Postfix zu übernehmen, müssen aus unseren neuen Dateien Datenbanken erstellt werden. Dies machen wir mit diesen Befehlen:

sudo postmap hash:/etc/postfix/sasl_password
sudo postmap /etc/postfix/recipient_canonical
sudo postmap /etc/postfix/sender_canonical

Abschließend starten wir Postfix neu.

sudo service postfix restart

Um zu testen, ob alles funktioniert, könnt Ihr mit dem folgenden Befehl eine E-Mail verschicken.

echo Das ist ein Test! | mail -s Test EMPFÄNGERADRESSE

Diese E-Mail erhaltet Ihr jetzt mit dem von euch festgelegtem Absender an eure festgelegte E-Mail-Adresse. Unabhängig davon, wer eine E-Mail verschickt oder wer diese erhalten soll. Um als Entwickler verschiedene Funktionen zu testen, ist dies genau das richtige.

Mir ist bewusst, dass es viel kleinere und einfacherer Lösungen gibt, um dies zu realisieren. Zum Beispiel mit sSMTP oder Nullmailer. Bei beiden hatte ich aber massive Probleme mein Passwort zu hinterlegen und habe hierfür auch keine funktionierende Lösung finden können. Das Problem war, dass meine Passwörter sehr sicher sind und aus vielen Zeichen bestehen, die auch Sonderzeichen beinhalten. Mit diesen Sonderzeichen können beide Programme scheinbar nicht umgehen. Nur hierfür mein Passwort zu ändern und überall anpassen zu müssen sehe ich nicht ein. Ganz davon abgesehen, dass das Passwort dann etwas unsicherer wäre. Des Weiteren können bei sSMTP auch E-Mails verloren gehen, wenn keine Internetverbindung bestehen sollte. Das liegt daran, dass es leider keine Warteschlange gibt und E-Mails nach dem Versenden gelöscht werden. Selbst dann, wenn es einen Fehler bei der Übermittlung gab.

Von |2024-12-17T21:09:25+01:0015. Oktober 2016|Alle, Beiträge, Server|0 Kommentare

Umdenken bei der Verwendung von Werbeblockern

Werbeblocker, auch Adblocker genannt, werden heutzutage viel eingesetzt um auf Webseiten störende Werbung zu entfernen. Gewöhnlich geschieht dies mithilfe eines Plug-ins für Webbrowser. Die beiden größten Anbieter hierfür sind Adblock Plus (über 50 Millionen Nutzer*) sowie Adblock (über 40 Millionen Nutzer*).

Ich benutze so ein Plugin inzwischen schon lange. Damit angefangen habe ich weil es viele Webseiten mit der Werbung schlichtweg übertrieben haben. An jeder Stelle kamen Pop-Up Fenster hoch und die Inhalte konnte man teilweise nur noch schwer lesen. Um einzelne Besitzer von Webseiten für die kostenlosen Inhalte zu unterstützen, habe ich diese dann manuell freigegeben. Sei es bei kleinen Webseiten, Blogs oder bei großen Webseiten wie Youtube und Twitch.

Leider ist mir in den letzten Monaten jedoch immer wieder aufgefallen das ich das bei viel zu wenig Webseiten mache und eigentlich auch nur bei Seiten die ich häufig besuche. Das finde ich falsch. Denn gerade die kleinen Webseiten haben die Unterstützung besonders nötig. Zudem hat sich in den letzten Jahren einiges geändert. Es gibt nur noch verhältnismäßig wenig Webseiten die es wirklich übertreiben. Und da finde ich meine jetzige Herangehensweise nicht mehr Zeitgemäß und auch nicht richtig.

Aus diesem Grund habe ich mich auf die Suche nach einer Lösung gemacht. Fündig geworden bin ich bei dem oben genannten Plugin Adblock. In den Einstellungen „Eigene Filter“ kann man einstellen „Werbung auf allen Seiten anzeigen, außer auf diesen Domains…“. Sobald man hier eine Webseite eingetragen hat auf der man die Werbung blockieren möchte, wird auf allen anderen Seiten die Werbung angezeigt.

adblock werbung auf allen seiten anzeigen außer auf

Falls man nun auf einer Webseiten landen sollte die es mit der Werbung übertreibt, kann man diese schnell und mit nur zwei Klicks zu der oben genannten Liste hinzufügen.

adblock auf seite aktivieren

Ich bin gespannt wie meine Erfahrungen mit dieser Umstellung sein werden. Ich bin mir aber ziemlich sicher das ich es nicht bereuen werde. Mein schlechtes Gewissen ist auf jedenfall weg. :)

Kleine Info zum Schluss: Im Schnitt haben 65% der Besucher meiner Seite Werbung blockiert. Mich stört das nicht da diese Webseite ein Hobby von mir ist. Ich finde es aber interessant und wollte es euch nicht vorenthalten. :)

*) Nach eigenen Angaben in den Beschreibungen der Plug-ins -> Siehe hier für Adblock Plus und hier für Adblock

Von |2022-08-23T21:49:47+02:0017. Mai 2016|Alle, Beiträge, In eigener Sache|0 Kommentare

Meine WordPress Plugins 2016

Es gibt in diesem Eintrag inzwischen eine neue Auflistung meiner Plugins!

Es gibt aktuell 42.827 WordPress Plugins von denen ich auf meiner Webseite 12 Stück verwende. Hier zeige ich euch welche dies sind und wofür ich sie einsetze.

Akismet

Akismet bietet einen sehr zuverlässiges Weg um Spam erkennen. Sobald ein Kommentar als Spam eingestuft wurde, wird dieser nicht auf der Webseite angezeigt. Der Schutz funktioniert äußerst zuverlässig. In den vielen Jahren in denen ich das Plugin bereits verwende, hatte ich bisher nur einen einzigen Kommentar der falsch erkannt wurde. Falls dies mal passieren sollte, kann man den Kommentar manuell freigeben und Akismet wird hierüber automatisch informiert.

Akismet Privacy Policies

Um dem deutschen Datenschutz beim Einsatz von Akismet gerecht zu werden, verwende ich Akismet Privacy Policies. Mithilfe dieses Plugins muss man beim Kommentieren auf meiner Webseite der Verarbeitung der eingegebenen Daten zustimmen. Weitere Informationen zu diesem Thema findet Ihr auf der Webseite von WordPress Deutschland.

Akismet Privacy Policies einverstanden checkbox

Broken Link Checker

In meinen Beiträgen verlinke ich relativ viele Webseiten. Dadurch kann man bei Unklarheiten gleich nachschauen was gemeint ist beziehungsweise wovon ich schreibe. Alleine in diesem Beitrag gibt es 30 Links. Da mit der Zeit einige Webseiten wieder aus dem Internet verschwinden oder Inhalte entfernt werden, verwende ich dieses Plugin um Benachrichtigt zu werden falls etwas mit einem Link auf meiner Webseite nicht stimmt. Auf der einen Seite wäre das sehr unschön für jemanden der einen Beitrag von mir liest und etwas nachschauen möchte. Auf der anderen Seite ist das aus der Sicht von SEO (Search Engine Optimization englisch für Suchmaschinenoptimierung) eine Katastrophe. Denn zu viele ungültige Links führen zu einer Abwertung beim SERP (Search Engine Result Pages englisch für: Seiten, auf denen die Suchergebnisse dargestellt werden).

Contact Form 7

Kurz und knapp: In meinem Impressum gibt ich ein Kontaktformular. Das Plugin Contact Form 7 verwende ich um dieses zu erstellen.

Contact Form 7 Kontaktformular

Cookie Law Info

Um der Cookie-Richtlinie der EU gerecht zu werden (oder doch Google?) gibt es auf meiner Webseite einen Hinweistext über die Verwendung von Cookies. Wenn Ihr meine Webseite nutzt, stimmt Ihr der Verwendung zu. Um diesen Hinweis zu platzieren und zu steuern verwende ich das Plugin Cookie Law Info. Die Rechtsanwaltskanzlei Schwenke hat auf Ihrer Webseite einen umfangreichen Beitrag über das Thema geschrieben.

Cookie Law Info Hinweis ausblenden

Crayon Syntax Highlighter

Es gibt immer wieder mal Beiträge von mir, in denen ich euch Teile von Code zeige. Zum Beispiel Ein WordPress Plugin Multisite Kompatibel machen. Damit der Code auch schön aussieht und gut strukturiert ist, verwende ich den Crayon Syntax Highlighter.

Crayon Syntax Highlighter Code Beispiel PHP

Easy Code Placement

Hierbei handelt es sich um ein von mir geschriebenes WordPress Plugin. Ich verwende Easy Code Placement um Werbung von Google AdSense dort zu platzieren wo ich es möchte – ohne den Code meiner Webseite anpassen zu müssen. Man kann hierfür das WordPress Text Widget verwenden oder einfach einen Shortcode auf einer Seite oder in einem Beitrag einfügen um den Code einzufügen. Das Plugin ist sehr flexibel und man kann unendlich viele Codes verwalten. Weitere Informationen findet Ihr hier.

Google XML Sitemaps

Um es Google und anderen Suchmaschinen zu erleichtern meine Webseite zu erfassen, verwende ich das Plugin Google XML Sitemaps. Dieses legt eine virtuelle Sitemap Datei an um den Suchmaschinen mitzuteilen wie die Inhalte meiner Webseite strukturiert sind. Außerdem werden durch diese Datei wertvolle Metadaten über meine Inhalte mitgeteilt. Dieses Plugin ist wie „Broken Link Checker“ aus SEO-Gründen im Einsatz.

MailPoet Newsletters

Das Plugin MailPoet Newsletters, früher hieß es Wysija Newsletters, sendet beim Veröffentlichen eines neuen Beitrages automatisch eine E-Mail an die Abonnenten meiner Webseite. Es ist einfach zu konfigurieren aber hat dennoch alle wichtigen Optionen die man braucht. Auch bietet es die in Deutschland benötigte Funktion des Double-Opt-In an (eine Anmeldung muss nochmals bestätigt werden).

MailPoet Newsletters email Beispiel

Optimize Database after Deleting Revisions

Das Plugin Optimize Database after Deleting Revisions hatte ich vor ein paar Jahren bereits an dieser Stelle einmal vorgestellt. Seitdem hat sich nur ein wenig an den Einstellungen geändert. Es funktioniert aber zuverlässig wie eh und je. Das Plugin verwende ich um regelmäßig meine WordPress MySQL Datenbank zu entmüllen und zu optimieren. Seit dem ersten Lauf habe ich bereits über 10Mb Datenmüll aus der Datenbank entfernt.

Subscribe to Comments Reloaded

Damit keiner eine Antwort auf seinen Kommentar verpasst, habe ich das Plugin Subscribe to Comments Reloaded im Einsatz. Wie bereits das Plugin „MailPoet Newsletters“, bietet auch dieses Plugin die in Deutschland benötigte Funktion des Double-Opt-In an. Man kann entweder vor dem Absenden eines neuen Kommentares die Option aktivieren oder aber auch ohne einen Kommentar die E-Mail-Benachrichtigungen abonnieren.

Subscribe to Comments Reloaded checkbox

TinyMCE Advanced

TinyMCE Advanced habe ich euch an dieser Stelle bereits einmal vorgestellt. Mit diesem Plugin kann man für den WYSIWYG (What You See Is What You Get englisch für: Was du siehst, ist das, was du bekommst) Editor von WordPress praktische Funktionen aktivieren.

WYSIWYG Editor WordPress

Welche Plugins verwendet Ihr denn so? Kennt Ihr Plugins die man noch unbedingt haben muss?

Von |2023-03-09T20:51:54+01:006. Februar 2016|Alle, Beiträge, WordPress|1 Kommentar

Ein Salat

Die Kategorie Küche hatte bisher genau einen Beitrag. Mit diesem kommt nach langer Zeit ein zweiter dazu. Warum? Ich möchte euch einen Salat zeigen den ich mir sehr gerne mache. Die Zutaten (inklusive der Verarbeitung) sind:

  • Ein ganzer Eisbergsalat (mundgerechte Stücke)
  • Zwei große Tomaten (kleine Würfel)
  • Eine Gurke (geschält, der länge nach halbiert und dünne Scheiben)
  • Etwas Salz und ordentlich Pfeffer
  • Großzügig Petersilie
  • 200ml Joghurt Dressing
  • 500g Hähnchenbrustfilet (angebraten und mundgerechte Stücke)

Das ganze ergibt eine große Schüssel. Je nachdem wie lange der Salat reichen soll beziehungsweise für wie viele Personen er ist, kann man die Mengen natürlich anpassen.

Von |2020-08-15T20:52:35+02:005. Februar 2016|Alle, Beiträge, Küche|5 Kommentare

Ein WordPress Plugin Multisite kompatibel machen

In letzter Zeit wurde ich mehrfach gefragt, ob mein WordPress Plugin (Easy Code Placement) Multisite / Netzwerk fähig ist. Da dies bisher nicht der Fall war, hatte ich mich schlau gemacht, was hierfür nötig ist. Eigentlich ist dies relativ einfach umzusetzen. Jedoch sind die Informationen, die ich gefunden habe, sehr undurchsichtig, nicht vollständig und meistens auf Englisch. Letzteres ist für mich kein Problem. Aber um anderen das Ganze einfacher zu gestalten, folgt nun meine Anleitung hierzu.

Wie funktioniert ein WordPress Multisite Netzwerk?

Multisite wurde mit der WordPress Version 3.0 eingeführt. Diese Funktion gibt einem die Möglichkeit, verschiedene WordPress Webseiten mit einer einzigen WordPress Installation zu erstellen. Wenn ein Multisite Netzwerk erstellt wird, werden verschiedene Tabellen in der Datenbank angelegt, die von allen Webseiten genutzt werden. Zusätzlich bekommt jede Webseite ein paar eigene Tabellen in der Datenbank, in denen zum Beispiel die Beiträge und Kommentare gespeichert werden. Diese Tabellen werden unter einer nur einmal vorkommenden blog_id gespeichert, die aus Zahlen besteht. Die Standard WordPress Installation nutzt „wp_“. Eine zweite Multisite Installation zum Beispiel „wp2_“. Mehr Informationen zur WordPress Datenbank gibt es unter https://codex.wordpress.org/Database_Description (Englisch).

datenbankstruktur mysql tabellen

Was muss beachtet beziehungsweise am Plugin angepasst werden?

  • Bei der Installation des Plugins braucht jede Webseite die neuen Tabellen des Plugins
  • Bei dem Hinzufügen einer Webseite müssen die Tabellen für das Plugin angelegt werden
  • Bei dem Löschen einer Webseite müssen die Tabellen des Plugins gelöscht werden
  • Bei der Deinstallation des Plugins müssen von allen Webseite die Tabellen gelöscht werden

Die Installation des Plugins

Normalerweise sieht es wie folgt aus, wenn wir der Datenbank während der Installation des Plugins Tabellen hinzufügen möchten. Bitte beachten: Die database() Funktion wird bei den weiteren Funktionen verwendet und nicht verändert!

function database() {
    global $wpdb;
    //Tabelle die in die Datenbank eingefügt wird
    $table = "CREATE TABLE IF NOT EXISTS ".$wpdb->prefix."options (
        `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
        `option_name` varchar(10) COLLATE utf8_unicode_ci NOT NULL UNIQUE,
        `option_value` varchar(10) COLLATE utf8_unicode_ci NOT NULL
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1";
    $wpdb->query($table);
}

// Hook der WordPress mitteilt das etwas bei der Installation des Plugins zu tun ist
register_activation_hook ( __FILE__, 'database' );

Damit alles auch bei einer Multisite / Netzwerk Installation korrekt funktioniert, müssen wir dies nun anpassen. Den „register_activation_hook“ ändern wir etwas und wir fügen eine neue Funktion hinzu.

function plugin_install($networkwide) {
    global $wpdb;  
    // Prüfen ob es sich um eine Multisite / Netzwerk Installation handelt
    if (is_multisite() && $networkwide) {
        // Multisite / Netzwerk Plugin Installation
        $blog = $wpdb->blogid;
        $blogids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
        // Jeder Webseite die Tabellen in der Datenbank einfügen
        foreach ($blogids as $blogid) {
            switch_to_blog($blogid);
            database();
        }
	switch_to_blog($blog);
    // Normale Plugin Installation
    } else {
    database();
    }
}

// Hook der WordPress mitteilt das etwas bei der Installation des Plugins zu tun ist
register_activation_hook ( __FILE__, 'plugin_install' );

Wenn eine Webseite hinzugefügt wird

Um einer neuen Webseite die benötigten Tabellen hinzuzufügen, brauchen wir Folgendes. Bitte beachten: Der Teil „plugin-ordner-name/plugin-haupt-datei.php“ muss mit euren Plugin-Daten angepasst werden!

function new_blog($blog_id) {
    if ( is_plugin_active_for_network( 'plugin-ordner-name/plugin-haupt-datei.php' ) ) {
        switch_to_blog($blog_id);
        // Neuer Webseite die Tabelle in der Datenbank einfügen
        database();
        restore_current_blog();
    }
}

// Hook der WordPress mitteilt das etwas beim hinzufügen einer neuen Webseite zu tun ist
add_action ( 'wpmu_new_blog', 'new_blog', 99 );

Wenn eine Webseite gelöscht wird

Um beim Löschen einer Webseite die Tabellen von uns aus der Datenbank zu entfernen, müssen wir folgendes hinzufügen.

function deleted_blog($tables) {
    global $wpdb;
    // Tabellen die gelöscht werden sollen
    $tables[] = $wpdb->prefix.'options';
    return $tables;
}

// Hook der WordPress mitteilt das Tabellen beim löschen einer Webseite zu entfernen sind
add_filter ( 'wpmu_drop_tables', 'deleted_blog', 99 );

Die Deinstallation des Plugins

Normalerweise sieht es wie folgt aus, wenn wir während der Deinstallation des Plugins Tabellen löschen möchten. Bitte beachten: Die uninstall() Funktion wird bei der nächsten Funktion verwendet und nicht verändert!

function uninstall() {
    global $wpdb;
    //Tabelle aus der Datenbank löschen
    $wpdb->query("DROP TABLE ".$wpdb->prefix."options");
}

// Hook der WordPress mitteilt das etwas bei der Deinstallation des Plugins zu tun ist
register_uninstall_hook ( __FILE__, 'uninstall' );

Damit alles auch bei einer Multisite / Netzwerk Deinstallation korrekt funktioniert, müssen wir dies jetzt anpassen. Den “register_uninstall_hook” ändern wir etwas und wir fügen eine neue Funktion hinzu.

function plugin_uninstall($networkwide) {
    global $wpdb;  
    // Prüfen ob es sich um eine Multisite / Netzwerk Deinstallation handelt
    if (is_multisite() && $networkwide) {
        // Multisite / Netzwerk Plugin deinstallation
        $blog = $wpdb->blogid;
        $blogids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
        // Von jeder Webseite die Tabellen in der Datenbank löschen
        foreach ($blogids as $blogid) {
            switch_to_blog($blogid);
            uninstall();
        }
	switch_to_blog($blog);
        
    // Normale Plugin deinstallation
    } else {
    uninstall();
    }
}

// Hook der WordPress mitteilt das etwas bei der Deinstallation des Plugins zu tun ist
register_uninstall_hook ( __FILE__, 'plugin_uninstall' );

Von |2024-12-17T21:10:03+01:0021. August 2015|Alle, Beiträge, WordPress|2 Kommentare
Nach oben