Mir ist mal wieder ein Problem aufgefallen, welches mit Google und seinem Regulationanspruch zusammen hängt. Es ist nämlich so, dass manche WP-Systeme keine Mails an Google-Empfänger verschicken können. Man bekommt dann in der Logdateie eine Fehlermeldung wie:

<ein-user@gmail.com>: host gmail-smtp-in.l.google.com[142.251.175.26] said:
550-5.7.26 This mail is unauthenticated, which poses a security risk to the
550-5.7.26 sender and Gmail users, and has been blocked. The sender must
550-5.7.26 authenticate with at least one of SPF or DKIM. For this message,
550-5.7.26 DKIM checks did not pass and SPF check for
[h2412yxyz.stratoserver.ne 550-5.7.26 t] did not pass with ip:
[85.214.x.y]. The sender should visit 550-5.7.26
https://support.google.com/mail/answer/81126#authentication for 550 5.7.26
instructions on setting up authentication.
s24-20020a632158000000b0055acc7f8088si4258738pgm.301 - gsmtp (in reply to
end of DATA command)

Das hat schon eine gewisse Berechtigung, weil das WordPress-System hier keine sinnvolle Absenderadresse gesetzt hat, sondern www-data als Absender genommen hat. Das ergänzt das Mailsystem dann noch um den Servernamen. Damit schlagen dann die genannten Checks fehl.

Zur Beseitigung des Problems gibt es mehrere Möglichkeiten:

  1. Nutzung eines Plugins wie WP Mail SMTP/ 
  2. Anpassung der functions.php

Das vielgelobte Plugin hat mich genervet, weil es gleich eine Pro-Version anbietet. Ich habe also unter Design -> Theme-Datei-Editor die Datei functions.php (Theme-funktionen) um die folgenden Zeilen erweitert (einfach angehängt):

// Mail Hook mail_from
add_filter( 'wp_mail_from', function ( $original_email_address ) {
return 'testpress@meine-domain.de';
} );

// Mail Hook mail_from_name
add_filter( 'wp_mail_from_name', function ( $original_email_from ) {
return 'Testpress';
} );

//Action Hook phpmailer_init
add_action( 'phpmailer_init', 'my_phpmailer_init' );
function my_phpmailer_init( $phpmailer ) {
$phpmailer->Sender = $phpmailer->From;
}

Die beiden Mail-Hooks setzten die Absender-Adresse auf einen gewünschten Wert, wobei der Hook eigentlich eine funcion einbindet, die hier jeweils gleich integriert ist. In vielen Beschreibungen ist das auch getrennt (https://wordpress.org/support/topic/change-sender-name-and-email-address-wordpress/) .
Diese Einstellungen reichen aber nicht aus, weil damit die Adresse im Envelope (Umschlag) nicht geändert wird und das ist die entscheidende Stelle. Dafür gibt es einen Action-Hook, über den man die Initialisierung des Mailers vornehmen kann. Hier ändern wir nur den Wert für Sender und zwar auf den gerade davor gesetzten Wert von From.

Auch wenn innerhalb der WordPress Options, eventuelle durch eine Erweiterung,  eine Mailadresse gesetzt ist, wie z.B. wpmembers_email_wpfrom, so wird die erst durch die se Initialisierung aktiv.

Damit sollten jetzt auch Mails an z.B. Google-Adressen funktionieren, sofern der eingestellte Absender grundsätzlich entsprechende Mails verschicken kann.

Damit die Änderung nicht bei nächsten Update des Themes überschieben wird, sollte man ein Child-Theme anlegen, in dem diese Ergänzung realisiert wird.

Weitere Informationen:

https://developer.wordpress.org/reference/hooks/wp_mail_from/
https://developer.wordpress.org/reference/hooks/wp_mail_from_name/
https://developer.wordpress.org/reference/hooks/phpmailer_init/

 

WordPress benutzt etwas wie einen indirekten Cron-Job. Bei jedem Seitenaufruf durch einen Benutzer wird nachgeschaut, ob etwas zu tun ist und dann ggf. die Seite http://<meine Domain>/wp-cron.php auf. Was dabei irritierend wirkt ist die Tatsache, dass dabei die Serveradresse als aufrufende Adresse in den Logdateien auftaucht.

Man kann aber auf richtige Cron-Jobs umstellen. Dazu fügt man folgende Zeile in die wp-config.php ein:

define(‚DISABLE_WP_CRON‘, ‚true‘);

und zwar möglichst am Ende direkt vor der Zeile

/* That’s all, stop editing! Happy blogging. */

Dann muss man noch einen Cronjob erstellen nach dem Muster:

-2,32   *       *       *       *    cd /<pfad zu WordPress>/wordpress; php -q wp-cron.php

Nachdem Ghostery nun in meinem Firefox alle kommerziellen Webwanzen blockt habe ich begonnen selber mit Webwanzen zu experimentieren. Dafür gibt es das Programm Piwik, das man auf einem eigenen Server installieren und dann in die eigenen Seiten einbinden kann. Damit bekommt man ausführliche Hinweise über die Nutzung der Seiten, ohne Daten aus der Hand zu geben. Alles läuft auf eigenen Rechnern.

In die Webseiten, die ausgewertet werden sollen, muss man nur folgenden Code integrieren (und natürlich anpassen):

<!-- Piwik -->
 <script type="text/javascript">
 var pkBaseURL = (("https:" == document.location.protocol) ? "https://mein-server.de/piwik/" : "http://mein-server.de/piwik/");
 document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
 </script><script type="text/javascript">
 try {
 var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 2);
 piwikTracker.trackPageView();
 piwikTracker.enableLinkTracking();
 } catch( err ) {}
 </script><noscript><p><img  src="http://mein-server.de/piwik/piwik.php?idsite=2" style="border:0"  alt="" /></p></noscript>
 <!-- End Piwik Tag -->

Für die Integration in Content Management Systeme findet sich unter http://piwik.org/faq/plugins/ eine Reihe von Plugins. Leider ist deren Nutzung nicht immer unproblematisch.

Für die Mediawiki-Integration findet sich unter http://www.mediawiki.org/wiki/Extension:Piwik_Integration eine passende Software. Man muss nur beim Download aufpassen. Hier wird man nach der benutzten Mediawiki-Version gefragt. Wählt man hier z.B. wahrheitsgemäß 1.15.x so bekommt man eine alte, bei mir nicht funktionsfähige Version. Man sollte hier als Mediawiki-Version unbedingt Development version (trunk) auswählen. Dann lädt man momentan die funktionsfähige Version Piwik-trunk-r72455.tar.gz .

Auch bei WordPress ist die Integration nicht unbedingt problemlos. Das Plugin Piwik Analytics ist über die Plugin-Verwaltung zu installieren und vermutlich auch funktionsfähig. Ich benutze aber momentan ein Template, bei dem in der Footer-Datei der Aufruf von wp_footer() fehlt. In diese Funktion klingt sich das Plugin wohl ein. Da in der footer.php zu meinem Template nur HTML-Code steht habe ich den Piwik-Code hier direkt eingebunden, damit funktioniert Piwik auch hier, zumindest solange ich das Template nicht wechsle.

Für Typo3 gibt es unter http://typo3.org/extensions/repository/view/piwik/current/ ebenfalls eine passend Extension. Diese muss ich noch ausprobieren. Bisher habe ich den Piwik-Code einfach mit in das Root-Template aufgenommen:

page.headerData.199 = TEXT
page.headerData.199.value (
 <!-- Piwik -->
 <script type="text/javascript">
 var pkBaseURL = (("https:" == document.location.protocol) ? "https://mein-server.de/piwik/" : "http://mein-server.de/piwik/");
 document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
 </script><script type="text/javascript">
 try {
 var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 1);
 piwikTracker.trackPageView();
 piwikTracker.enableLinkTracking();
 } catch( err ) {}
 </script><noscript><p><img src="http://mein-server.de/piwik/piwik.php?idsite=1" style="border:0" alt="" /></p></noscript>
 <!-- End Piwik Tag -->
)

Damit erscheint der Code im Header-Bereich der Seite und nicht wie in der Anleitung beschrieben am Ende des Body-Bereiches, aber auch das funktioniert bisher.

Inzwischen habe ich auch die Extension piwiki aus dem Typo3-Repository ausprobiert und zwar in der Version 2.0.0. Die Extension muss nur installiert und aktiviert werden, dann folgen noch vier Zeilen im Root-Template:

config.tx_piwik {
  piwik_idsite = 1
  piwik_host   = http://mein-server.de/piwik/
}

Entgegen der Beschreibung muss hier wirklich http:// mit angegeben werden, sonst entstehen relative Verweise. Bevor man die Installation testen kann, muss man sich unbedingt vom Backend abmelden. Solange man im Backend angemeldet ist erfolgt nämlich keine Integration des Piwik-Codes.

Weitere Informationen zur Integration von Piwik in Typo3 finden sich bei Mittwald.