Hallo!
Ich habe gerade die Extension PowerMail auf die neueste Version (1.2.4) geupdatet (ich nutze T3 4.2). Seitdem erhalte ich beim Abschicken eines Formulars folgenden Fehler:
Fatal error: Call to undefined function checkdnsrr() in /html/typo3conf/ext/powermail/lib/class.tx_powermail_functions_div.php on line 167
Hat jemand von Euch das gleiche Probelm bzw. eine Idee, woran das liegt?
Viele Grüße und vielen Dank für Eure Hilfe!
Uli
Das ist der MX Rekord Check:
checkdnsrr(): Diese Funktion ist auf Windowsplattformen nicht implementiert. Verwenden Sie dort statt dessen die » PEAR-Klasse » Net_DNS.
Schalte mal check mx in den Constants aus und schreib obs klappt
So, habe mir das mal bei mir angesehen: Auch ein Ausschalten über die Constants führt zu der Fehlermeldung.
Hier der Workarround bis zur nächsten Version - Funktion checkMX() in der lib/class.tx_powermail_functions_div.php ersetzen:
// Function checkMX() checks if a domain exists
function checkMX($email,$record = 'MX') {
if (function_exists('checkdnsrr')) { // if function checkdnsrr() exist (not available on windows systems)
list($user,$domain) = split('@',$email); // split email in user and domain
if (checkdnsrr($domain,$record) == 1) return TRUE; // return true if mx record exist
else return FALSE; // return false if not
} else {
return TRUE; // function checkdnsrr() don't exist, so always return TRUE
}
}
Ich habe plugin.powermail.email.checkMX auf 0 gesetzt, bleibt alles beim alten!
ulinn schrieb
Ich habe plugin.powermail.email.checkMX auf 0 gesetzt, bleibt alles beim alten!
Japp, siehe meinen zweiten Eintrag...
Da haben sich unsere Posts wohl gekreuzt. Mit dem Workaround funktioniert alles bestens - auch mit MX-Check!
Vielen Dank für die genial schnelle Hilfe!
Uli
Hallo,
hatte gerade auch das Problem. Wenn ich in den Konstanten plugin.powermail.email.checkMX = 0 setze, geht es.
Allerdings ist das meiner Meinung nach kein Bug von Powermail.
Die Adresse, welche ich zum Testen verwendet habe, enthält zwar einen Bindestrich in der Domain – dass die Validierung nicht funktioniert hat, war aber eher ein Zufall.
Der Wahre Grund ist wohl eher, dass für diese Domain auch gar kein MX Eintrag existiert...
Also kann der MX-Check ja auch nur false liefern!
Grüße, Jan
stupido schrieb
Der Wahre Grund ist wohl eher, dass für diese Domain auch gar kein MX Eintrag existiert...
Also kann der MX-Check ja auch nur false liefern!
Ich hatte das Problem auch gerade und habe folgendes in lib/class.tx_powermail_functions_div.php geändert:
function checkMX($email, $record = 'MX')
in
function checkMX($email, $record = 'NS')
also überprüfe ich nicht nach dem MX-Eintrag, denn scheinbar kann man trotz fehlendem MX-Eintrag Mails empfangen, sondern prüfe auf den NS-Eintrag (Nameserver). Dieser sollte eigentlich immer vorhanden sein.
Hoffe es hilft noch nachfolgenden.
Einfacher und eleganter wäre es wahrscheinlich im Constant Editor checkMX auf 0 zu setzen.
igorshmigor schrieb
Einfacher und eleganter wäre es wahrscheinlich im Constant Editor checkMX auf 0 zu setzen.
Damit wird aber nicht überprüft ob es die Domain überhaupt gibt. Bei mir schon.
Ich hatte jetzt das Problem das auch User mit einer subdomain in ihrer E-Mailadresse das Formular ansenden wollten.
Leider ging dies auch nicht.
Also habe ich die checkMX Funktion folgendermaßen geändert:
function checkMX($email, $record = 'NS') {
if (function_exists('checkdnsrr')) { // if function checkdnsrr() exist (not available on windows systems)
$emailparts = explode('@',$email); // split on @
$emailparts = explode('.', $emailparts['1']);
if(count($emailparts) == 3) {
$emailparts = $emailparts['1'].'.'.$emailparts['2'];
} else {
$emailparts = $emailparts['0'].'.'.$emailparts['1'];
}
if (checkdnsrr($emailparts, $record) == 1) { // if mx record exist
return TRUE; // return true
} else { // mx record don't exist
return FALSE; // return false
}
} else { // function checkdnsrr() don't exist
return TRUE; // so always return TRUE
}
}
Somit wird die Subdomain auch nochmal gesplittet um zu schauen ob es den Nameserver gibt.
Falls es noch jemand braucht, ich habe es noch einmal abgeändert weil es bei uns Kunden gab die eine Mail in dieser form hatten:
info@teil.test.googlemail.com
Hier der angepasste Code:
function checkMX($email, $record = 'NS') {
if (function_exists('checkdnsrr')) { // if function checkdnsrr() exist (not available on windows systems)
$emailparts = explode('@', $email);
$emailparts = explode('.', $emailparts[1]);
$emailparts = $emailparts[sizeof($emailparts)-2].'.'.$emailparts[sizeof($emailparts)-1];
if (checkdnsrr($emailparts, $record) == 1) { // if mx record exist
return TRUE; // return true
} else { // mx record don't exist
return FALSE; // return false
}
} else { // function checkdnsrr() don't exist
return TRUE; // so always return TRUE
}
}