Zum Inhalt springen

Fehler nach PowerMail Update

Erstellt am 15. Mai 2008 · 11 Antworten · letzte Antwort am 6. Oktober 2010

Tags: Frage

ulinn ·

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

einpraegsam.​net ·

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

einpraegsam.​net ·

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
		}
	}
ulinn ·

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

stupido ·

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

scheibo ·
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.

scheibo ·
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.

scheibo ·

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.

scheibo ·

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
		}
	}