Gültigkeit von Emailadresse

Joe

Erfahrenes Mitglied
Hallo Tutorials,

ich habe folgende Testadresse test.test@gmail.com , leider wird dieser als ungültig gefiltert. Wie kommt das?
PHP:
function checkMailSyntax($email) {
		$email = htmlspecialchars($email); // eMail-Adresse

		if(!filter_var($email, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\./', $email))
			return FALSE;
		list($localPart, $domainPart) = explode('@', $email, 2);
  
		// Domain existiert nicht => Ungültig
		if(@!fsockopen($domainPart, 80))
			return FALSE;
  
		return TRUE; 
	}
	if (checkMailSyntax($Email)==false) {
		return 'Keine gueltige EMailaddresse.';
	}

Grüße Joe.
 
PHP:
function checkMailSyntax($email) {
		$email = htmlspecialchars($email); // eMail-Adresse

		if(!filter_var($email, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\./', $email))
			return FALSE;
Hier kommt mir die Klammerung ziemlich komisch vor. Vielleicht meintest du eher
PHP:
if(!(filter_var($email, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\./', $email)))
PHP:
		// Domain existiert nicht => Ungültig
		if(@!fsockopen($domainPart, 80))
                         return FALSE;

Das stimmt so nicht. Erstens muß ein Mailserver nicht Port 80 offen haben, 25 reicht völlig. Zweitens wird fsockopen vermutlich einen A-Record auf die IP auflösen, ein Mailserver braucht aber keinen A-Record, sondern lediglich einen MX-Record. (MX-Only-Domains)
 
  • Gefällt mir
Reaktionen: Joe
Danke Thinker,

Das Problem ist sogar weitreichender. Die Funktion oben ist leicht modifiziert und kommt direckt von einen Tutorial hier.

Habe das nun abgeändert:
PHP:
	function checkMailSyntax($Email) {
		return filter_var($Email, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\./', $Email);
	}
	if (checkMailSyntax($Email)==false) {
		return 'Keine gueltige EMailaddresse.';
	}

Nun hat Swiftmailer x Errors geworfen.
Tja Grund ist simpel und ergreifend eine abgeschaltete Mail()-Funktion. Da meine Domain kurzzeitig bei Denic.de zwischen parkte wurde wohl nach den Umzug vergessen die Mail Funktion freizuschalten.
Schlimm nur das ich gerade jetzt die Seite stark beworben publik gemacht habe und keine Registrierung möglich war.

Gut kann ich jetzt nur auf schnellen Support meines Hosters hoffen. Das Problem ist damit gelöst.

Gruß Joe.
 
@Saftmeister
Wärest du so nett mir die Funktionsweise von checkdnsrr() etwas zu erläutern?
Ich hatte bisher nix von Typen wie A, MX, NS, SOA, PTR, CNAME, AAAA, A6, SRV, NAPTR, TXT oder ANY gehört.

Was macht die Funktion in etwa? Oder was haben diese Typen mit Mails zu tun?

LG Joe.
 
Unterdessen muss ich mich grad fragen was noch alles an Funktionen durch meinen Umzug abgeschaltet wurde.
Die mail() Funktion und auch fsockopen() wurde wieder freigegeben. Dennoch wirft Swiftmailer noch Errors, so das ich anehmen muss das ich den Support meines Hosters noch um weitere Freischaltungen bitten muss.

Hier brauche ich eure Hilfe denn ich weiß nicht welche Funktionen hier wichtig sind und freigeschalten werden müssen.
Der Support ist leider auch nur menschlich und kann mit meiner Mail und diesen Errors auch nichts anfangen.
Offensichtlich ist hier noch irgendwas gesperrt, denn vor dem Umzug lief das alles hervorragend.

Die Fehlermeldungen:
Code:
Warning: stream_set_blocking() expects parameter 1 to be resource, null given in /var/www/web128032/html/Swift-4.2.2/lib/classes/Swift/Transport/StreamBuffer.php on line 265

Warning: stream_set_timeout() expects parameter 1 to be resource, null given in /var/www/web128032/html/Swift-4.2.2/lib/classes/Swift/Transport/StreamBuffer.php on line 269

Fatal error: 
Uncaught exception 'Swift_TransportException' with message 'Expected response code 220 but got code "", with message ""' 
in /var/www/web128032/html/Swift-4.2.2/lib/classes/Swift/Transport/AbstractSmtpTransport.php:386 
Stack trace: 
#0 /var/www/web128032/html/Swift-4.2.2/lib/classes/Swift/Transport/AbstractSmtpTransport.php(291): 
	Swift_Transport_AbstractSmtpTransport->_assertResponseCode('', Array) 
#1 /var/www/web128032/html/Swift-4.2.2/lib/classes/Swift/Transport/AbstractSmtpTransport.php(119): 
	Swift_Transport_AbstractSmtpTransport->_readGreeting() 
#2 /var/www/web128032/html/Swift-4.2.2/lib/classes/Swift/Mailer.php(80): 
	Swift_Transport_AbstractSmtpTransport->start() 
#3 /var/www/web128032/html/includes/register1.php(203): Swift_Mailer->send(Object(Swift_Message)) 
#4 /var/www/web128032/html/index.php(42): include('/var/www/web128...') 
#5 {main} thrown in /var/www/web128032/html/Swift-4.2.2/lib/classes/Swift/Transport/AbstractSmtpTransport.php on line 386

Es scheint so zu sein das gewisse Funktionen nicht richtig arbeiten bzw nicht freigeschalten sind (macht der Hoster aus Sicherheitsgründen), wenn ich dem Support allerdings nicht sagen kann was er freischalten muss dann kapiert er schlicht nicht was ich ihm sagen will. Traurig aber leider wahr.

Habt ihr Ideen was an Funktionen gesperrt sein könnte?

Grüße Joe.
 
Zuletzt bearbeitet:
Hallo Joe,

Um dir die Fehlermeldung kurz zu erläutern:
Code:
Warning: stream_set_blocking() expects parameter 1 to be resource, null given in /.../StreamBuffer.php on line 265

Also in Zeile 265 muss irgendwo die Funktion stream_set_blocking() aufgerufen werden, soweit klar - und zwar mit Parametern, also stream_set_blocking(parameter1, parameter2, ...)
Jetzt sagt er dir, dass er beim ersten Parameter einen vom Typ "resource" erwartet, aber einen Parameter vom Typ "null" bekommt.
--> Die Quelle von diesem besagten ersten Parameter muss irgendwie Probleme machen, da eben der falsche Typ bei dem Aufruf übergeben wird - hier musst du deine Fehlersuche also ansetzen: "Woher kommt Parameter1?"
 
Hallo ducko,

So richtig erklärt sich mir immer noch nicht was da klemmt.
PHP:
    private function _establishSocketConnection()
    {
        $host = $this->_params['host'];
        if (!empty($this->_params['protocol'])) {
            $host = $this->_params['protocol'] . '://' . $host;
        }
        $timeout = 15;
        if (!empty($this->_params['timeout'])) {
            $timeout = $this->_params['timeout'];
        }
        $options = array();
        if (!empty($this->_params['sourceIp'])) {
            $options['socket']['bindto']=$this->_params['sourceIp'].':0';
        }
        $this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
        if (false === $this->_stream) {
            throw new Swift_TransportException(
                'Connection could not be established with host ' . $this->_params['host'] .
                ' [' . $errstr . ' #' . $errno . ']'
                );
        }
        if (!empty($this->_params['blocking'])) {
///line 265            stream_set_blocking($this->_stream, 1);        ///line 265
        } else {
            stream_set_blocking($this->_stream, 0);
        }
        stream_set_timeout($this->_stream, $timeout);
        $this->_in =& $this->_stream;
        $this->_out =& $this->_stream;
    }

Vermutlich entsteht der Fehler schon vorher im Script. Irgendeine Funktion ist vermutlich nicht freigeschalten vom Hoster allerdings kann mein Hoster mit der Fehlermeldung auch nix anfangen.

In der Hoffnung das doch jemand drüber schaut hier die komplette
StreamBuffer.php
PHP:
<?php

/*
 * This file is part of SwiftMailer.
 * (c) 2004-2009 Chris Corbyn
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * A generic IoBuffer implementation supporting remote sockets and local processes.
 *
 * @package    Swift
 * @subpackage Transport
 * @author     Chris Corbyn
 */
class Swift_Transport_StreamBuffer extends Swift_ByteStream_AbstractFilterableInputStream implements Swift_Transport_IoBuffer
{
    /** A primary socket */
    private $_stream;

    /** The input stream */
    private $_in;

    /** The output stream */
    private $_out;

    /** Buffer initialization parameters */
    private $_params = array();

    /** The ReplacementFilterFactory */
    private $_replacementFactory;

    /** Translations performed on data being streamed into the buffer */
    private $_translations = array();

    /**
     * Create a new StreamBuffer using $replacementFactory for transformations.
     *
     * @param Swift_ReplacementFilterFactory $replacementFactory
     */
    public function __construct(Swift_ReplacementFilterFactory $replacementFactory)
    {
        $this->_replacementFactory = $replacementFactory;
    }

    /**
     * Perform any initialization needed, using the given $params.
     *
     * Parameters will vary depending upon the type of IoBuffer used.
     *
     * @param array $params
     */
    public function initialize(array $params)
    {
        $this->_params = $params;
        switch ($params['type']) {
            case self::TYPE_PROCESS:
                $this->_establishProcessConnection();
                break;
            case self::TYPE_SOCKET:
            default:
                $this->_establishSocketConnection();
                break;
        }
    }

    /**
     * Set an individual param on the buffer (e.g. switching to SSL).
     *
     * @param string $param
     * @param mixed  $value
     */
    public function setParam($param, $value)
    {
        if (isset($this->_stream)) {
            switch ($param) {
                case 'timeout':
                    if ($this->_stream) {
                        stream_set_timeout($this->_stream, $value);
                    }
                    break;

                case 'blocking':
                    if ($this->_stream) {
                        stream_set_blocking($this->_stream, 1);
                    }

            }
        }
        $this->_params[$param] = $value;
    }

    public function startTLS()
    {
        return stream_socket_enable_crypto($this->_stream, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
    }

    /**
     * Perform any shutdown logic needed.
     */
    public function terminate()
    {
        if (isset($this->_stream)) {
            switch ($this->_params['type']) {
                case self::TYPE_PROCESS:
                    fclose($this->_in);
                    fclose($this->_out);
                    proc_close($this->_stream);
                    break;
                case self::TYPE_SOCKET:
                default:
                    fclose($this->_stream);
                    break;
            }
        }
        $this->_stream = null;
        $this->_out = null;
        $this->_in = null;
    }

    /**
     * Set an array of string replacements which should be made on data written
     * to the buffer.
     *
     * This could replace LF with CRLF for example.
     *
     * @param string[] $replacements
     */
    public function setWriteTranslations(array $replacements)
    {
        foreach ($this->_translations as $search => $replace) {
            if (!isset($replacements[$search])) {
                $this->removeFilter($search);
                unset($this->_translations[$search]);
            }
        }

        foreach ($replacements as $search => $replace) {
            if (!isset($this->_translations[$search])) {
                $this->addFilter(
                    $this->_replacementFactory->createFilter($search, $replace), $search
                    );
                $this->_translations[$search] = true;
            }
        }
    }

    /**
     * Get a line of output (including any CRLF).
     *
     * The $sequence number comes from any writes and may or may not be used
     * depending upon the implementation.
     *
     * @param integer $sequence of last write to scan from
     *
     * @return string
     *
     * @throws Swift_IoException
     */
    public function readLine($sequence)
    {
        if (isset($this->_out) && !feof($this->_out)) {
            $line = fgets($this->_out);
            if (strlen($line)==0) {
                $metas = stream_get_meta_data($this->_out);
                if ($metas['timed_out']) {
                    throw new Swift_IoException(
                        'Connection to ' .
                            $this->_getReadConnectionDescription() .
                        ' Timed Out'
                    );
                }
            }

            return $line;
        }
    }

    /**
     * Reads $length bytes from the stream into a string and moves the pointer
     * through the stream by $length.
     *
     * If less bytes exist than are requested the remaining bytes are given instead.
     * If no bytes are remaining at all, boolean false is returned.
     *
     * @param integer $length
     *
     * @return string|boolean
     *
     * @throws Swift_IoException
     */
    public function read($length)
    {
        if (isset($this->_out) && !feof($this->_out)) {
            $ret = fread($this->_out, $length);
            if (strlen($ret)==0) {
                $metas = stream_get_meta_data($this->_out);
                if ($metas['timed_out']) {
                    throw new Swift_IoException(
                        'Connection to ' .
                            $this->_getReadConnectionDescription() .
                        ' Timed Out'
                    );
                }
            }

            return $ret;
        }
    }

    /** Not implemented */
    public function setReadPointer($byteOffset)
    {
    }

    // -- Protected methods

    /** Flush the stream contents */
    protected function _flush()
    {
        if (isset($this->_in)) {
            fflush($this->_in);
        }
    }

    /** Write this bytes to the stream */
    protected function _commit($bytes)
    {
        if (isset($this->_in)
            && fwrite($this->_in, $bytes))
        {
            return ++$this->_sequence;
        }
    }

    // -- Private methods

    /**
     * Establishes a connection to a remote server.
     */
    private function _establishSocketConnection()
    {
        $host = $this->_params['host'];
        if (!empty($this->_params['protocol'])) {
            $host = $this->_params['protocol'] . '://' . $host;
        }
        $timeout = 15;
        if (!empty($this->_params['timeout'])) {
            $timeout = $this->_params['timeout'];
        }
        $options = array();
        if (!empty($this->_params['sourceIp'])) {
            $options['socket']['bindto']=$this->_params['sourceIp'].':0';
        }
        $this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
        if (false === $this->_stream) {
            throw new Swift_TransportException(
                'Connection could not be established with host ' . $this->_params['host'] .
                ' [' . $errstr . ' #' . $errno . ']'
                );
        }
        if (!empty($this->_params['blocking'])) {
            stream_set_blocking($this->_stream, 1);
        } else {
            stream_set_blocking($this->_stream, 0);
        }
        stream_set_timeout($this->_stream, $timeout);
        $this->_in =& $this->_stream;
        $this->_out =& $this->_stream;
    }

    /**
     * Opens a process for input/output.
     */
    private function _establishProcessConnection()
    {
        $command = $this->_params['command'];
        $descriptorSpec = array(
            0 => array('pipe', 'r'),
            1 => array('pipe', 'w'),
            2 => array('pipe', 'w')
            );
        $this->_stream = proc_open($command, $descriptorSpec, $pipes);
        stream_set_blocking($pipes[2], 0);
        if ($err = stream_get_contents($pipes[2])) {
            throw new Swift_TransportException(
                'Process could not be started [' . $err . ']'
                );
        }
        $this->_in =& $pipes[0];
        $this->_out =& $pipes[1];
    }

    private function _getReadConnectionDescription()
    {
        switch ($this->_params['type']) {
            case self::TYPE_PROCESS:
                return 'Process '.$this->_params['command'];
                break;

            case self::TYPE_SOCKET:
            default:
                $host = $this->_params['host'];
                if (!empty($this->_params['protocol'])) {
                    $host = $this->_params['protocol'] . '://' . $host;
                }
                $host.=':'.$this->_params['port'];

                return $host;
                break;
        }
    }
}
 
Zuletzt bearbeitet:
Hm habe rausgefunden das proc_open() deaktiviert ist.. kann es daran liegen?

Edit:
stream_socket_client() ist ebenfalls deaktiviert.
 
Zuletzt bearbeitet:
Problem ist behoben.

Verantwortlich für diesen Trace war mail(),fsockopen() und stream_socket_client() , nachdem mein Hoster diese Funktionen freigeschalten hat kann ich wieder normal Emails versenden.

proc_open() wurde aus Sicherheitsgründen nicht freigeschalten und obwohl diese Funktion eindeutig im Script drinnen ist wird sie bei mir jedenfalls nicht benötigt. Ich nehme an das es hierfür im Script einen Fallback gibt.

Grüße Joe.
 
Zuletzt bearbeitet:
Zurück