Email versturen (Drupal)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Foutmelding: Unable to send e-mail. Please contact the site administrator of the problem persist. In dit geval is er gelukkig nog een foutmelding, meestal is die er namelijk niet
Foutmelding: Probleem tijdens het versturen van e-mail. Neem contact op met de beheerder als het probleem aanhoudt

In diverse situaties verstuurt Drupal e-mail, bv. order-bevestigingen door Übercart of account-bevestigingen. Dat gaat niet altijd vlekkeloos. Het fundamentele probleem is het gebruik van de php-functie mail(), die alleen gebruik kan maken van een locale Sendmail-instantie. Er zijn gelukkig oplossingen.

Vanaf Drupal 7 speelt dit probleem niet meer, omdat er standaard gebruik wordt gemaakt van PHPMailer().

Het probleem: mail()

Een paar email-gerelateerde instellingen in phpinfo()

Drupal gebruikt een wrapper om de PHP-functie mail():

bool mail(string $to, 
          string $subject, 
          string $message [, 
          string $additional_headers [, 
          string $additional_parameters ]] )

mail functioneert als een mailclient voor de locale mailserver. Dus een mailserver die op die machine draait. Meer over de betreffende mailserver kun je achterhalen met phpinfo(). Mail kan alleen overweg met een locale mailserver, en schijnt vrij beroerd te werken. Problematischer: Zover ik weet, kan het alleen overweg met één domein per webserver. Als er meerdere domeinen op een webserver geconfigureerd zijn, moet je gaan spoofen. En veel spamfilters vinden het niet leuk als je dat doet.

Mail-headers

Dit is een deel van de header van zo'n email. Deze email is verstuurd uit naam van een webwinkel. Dit domein staat op een VPS welke gedeeld wordt met een aantal andere domeinen. Er wordt altijd gebruik gemaakt door dezelfde mail-server. In dit geval vallen de waarschuwingen nog mee:

Delivered-To: info@gmail.com
Received-SPF: neutral (google.com: 83.137.149.10 is neither permitted nor denied by best guess record for 
   domain of www-data@example.com) client-ip=83.137.149.10;
Authentication-Results: mx.google.com;
spf=neutral (google.com: 83.137.149.10 is neither permitted nor denied by best guess record for domain of 
   www-data@example.com) smtp.mailfrom=www-data@example.com
Received-SPF: none (no valid SPF record)
X-PHP-Originating-Script: 1000:mail.inc
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8Bit
X-Mailer: Drupal

Troubleshooting

Begin bij het logboek

Je weet wel:

Drupal: Reports > Recent log entries

Als deze entry er niet staat, moet je wellicht module Database logging en/of Syslog aanzetten.

Het logboek houdt alleen bij of email met success is afgeleverd bij de mailserver. Dat zegt dus niet of de mailserver de mail met succes heeft kunnen versturen.

Anders kan het PHP-logboek ook helpen:

less /var/log/php/error.log

Controleer de afzender (site information)

In de voortdurende strijd tegen spam, controleren veel ontvangende mailservers of de verzendende mailserver wel echt bestaat. Dat kan een probleem zijn, bv. als de betreffende website op een ontwikkelserver staat zonder domeinnaam, maar met alleen een IP-adres. Of als de site een echte naam heeft, maar op een ontwikkelserver draait, zonder die domeinnaam.

De afzender staat geconfigureerd onder Site information.

Übercart? Controleer de afzender!

In november 2012 had ik bij het klonen van een Übercart-site vergeten om het afzender-e-mailadres te veranderen. Bevestigingen van nieuwe accounts werden dus wel goed verzonden, maar orderbevestigingen niet.

In Drupal 6 moet je de afzender op twee of drie plekken aanpassen onder Conditionele acties.

Foutmelding: Probleem bij het versturen van e-mail. Neem contact op met de beheerder als het probleem aanhoudt
De oorzaak: Tikfout in het e-mailadres van de afzender. Deze fout bevestigd trouwens dat het e-mailadres van de afzender op meerdere plekken wordt bijgehouden. Anders was het al veel eerder gebleken
Deze fout heeft geen betrekking op Übercart, maar op Drupal in het algemeen. Dus pagina Site information.

Externe SMTP-server gebruiken: Mogelijkheden

Hierboven werd mail() genoemd, en de tekortkomingen die het heeft. Verzending via een externe mailserver, zou een universele oplossing zijn. Mogelijkheden:

  • nail()
  • Swiftmailer
  • Drupal SMTP-module ivm. PHPMailer.

Deze laatste mogelijkheid, blijkt een goede oplossing te zijn. Zie SMTP-module (Drupal) voor details.

Zie ook

Bronnen

php's mail()

Externe mailserver