Author: as
Date: Mon Aug  6 09:01:05 2007
New Revision: 5816

Log:
- Implemented feature request #8436: Added the method validateEmailAddress()
  in ezcMailTools.

Added:
    trunk/Mail/tests/tools/
    trunk/Mail/tests/tools/data/
    trunk/Mail/tests/tools/data/addresses_correct.txt   (with props)
    trunk/Mail/tests/tools/data/addresses_correct_mx.txt   (with props)
    trunk/Mail/tests/tools/data/addresses_incorrect.txt   (with props)
    trunk/Mail/tests/tools/data/addresses_incorrect_mx.txt   (with props)
Modified:
    trunk/Mail/ChangeLog
    trunk/Mail/docs/tutorial/tutorial_tools.php
    trunk/Mail/src/tools.php
    trunk/Mail/tests/tools_test.php

Modified: trunk/Mail/ChangeLog
==============================================================================
--- trunk/Mail/ChangeLog [iso-8859-1] (original)
+++ trunk/Mail/ChangeLog [iso-8859-1] Mon Aug  6 09:01:05 2007
@@ -13,6 +13,8 @@
   specified messages.
 - Implemented feature request #10996: Added support for the SMTP authentication
   methods DIGEST-MD5, CRAM-MD5, NTLM and LOGIN.
+- Implemented feature request #8436: Added the method validateEmailAddress()
+  in ezcMailTools.
 
 
 1.3.1 - Monday 30 July 2007

Modified: trunk/Mail/docs/tutorial/tutorial_tools.php
==============================================================================
--- trunk/Mail/docs/tutorial/tutorial_tools.php [iso-8859-1] (original)
+++ trunk/Mail/docs/tutorial/tutorial_tools.php [iso-8859-1] Mon Aug  6 
09:01:05 2007
@@ -15,11 +15,18 @@
 var_dump( ezcMailTools::parseEmailAddress( $addresses ) );
 var_dump( ezcMailTools::parseEmailAddresses( $addresses ) );
 
+// Validate an email address
+$isValid = ezcMailTools::validateEmailAddress( '[EMAIL PROTECTED]' );
+
+// Validate an email address with MX records check
+$isValid = ezcMailTools::validateEmailAddress( '[EMAIL PROTECTED]', true );
+
 // Create a new mail object
 $mail = new ezcMail();
 $mail->from = $mailAddresses[1];
 $mail->addTo( $mailAddresses[0] );
 $mail->subject = "Top secret";
+
 // Use the lineBreak() method
 $mail->body = new ezcMailText( "Confidential" . ezcMailTools::lineBreak() . 
"DO NOT READ" );
 $mail->generate();

Modified: trunk/Mail/src/tools.php
==============================================================================
--- trunk/Mail/src/tools.php [iso-8859-1] (original)
+++ trunk/Mail/src/tools.php [iso-8859-1] Mon Aug  6 09:01:05 2007
@@ -281,6 +281,160 @@
     }
 
     /**
+     * Returns true if $address is a valid email address, false otherwise.
+     *
+     * By default it will only validate against the same regular expression
+     * used in ext/filter. It follows
+     * [EMAIL PROTECTED] http://www.faqs.org/rfcs/rfc821.html RFC822} and
+     * [EMAIL PROTECTED] http://www.faqs.org/rfcs/rfc821.html RFC2822}.
+     *
+     * If $checkMxRecords is true, then an MX records check will be performed
+     * also, by sending a test mail (RCPT TO) to $address using the MX records
+     * found for the domain part of $address.
+     *
+     * The input email address $address should be trimmed from white spaces
+     * and/or quotes around it before calling this function (if needed).
+     *
+     * An email address has this form:
+     * <code>
+     *   [EMAIL PROTECTED]
+     * </code>
+     *
+     * The localpart has these rules:
+     *  - allowed characters: . + ~ / ' - _ ` ^ $ % & ! ' | {
+     *  - the dot (.) cannot be the first or the last character
+     *  - the double-quote character (") can only surround the localpart (so
+     *    if it appears it must be the first and the last character of 
localpart)
+     *  - spaces are allowed if the localpart is surrounded in double-quotes
+     *  - other ASCII characters (even from the extended-ASCII set) are allowed
+     *    if the localparts is surrounded in double-quotes
+     *  - the double-quotes character (") cannot be escaped to appear in a
+     *    localpart surrounded by double quotes (so "john"doe"@example.com is 
not
+     *    a valid email address)
+     *
+     * The domainpart has the same rules as a domain name, as defined in
+     * [EMAIL PROTECTED] http://www.faqs.org/rfcs/rfc821.html RFC822} and
+     * [EMAIL PROTECTED] http://www.faqs.org/rfcs/rfc821.html RFC2822}.
+     *
+     * See also the test files (in the "Mail/tests/tools/data" directory) for
+     * examples of correct and incorrect email addresses.
+     *
+     * @param string $address
+     * @param bool checkMxRecords
+     * @return bool
+     */
+    public static function validateEmailAddress( $address, $checkMxRecords = 
false )
+    {
+        $pattern = 
'/^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]{2,}))$/';
+
+        if ( preg_match( $pattern, $address ) )
+        {
+            if ( $checkMxRecords )
+            {
+                return self::validateEmailAddressMx( $address );
+            }
+            else
+            {
+                // $address passed through regexp, with no MX checks
+                return true;
+            }
+        }
+        else
+        {
+            // $address did not pass through regexp
+            return false;
+        }
+    }
+
+    /**
+     * Checks if the email address $address is valid based on its MX records.
+     *
+     * Steps:
+     *  - the MX records are fetched for the domain part of $address, along 
with
+     *    their weights
+     *  - the MX records are sorted based on the weights
+     *  - for each MX record a connection is open
+     *  - a test mail (RCPT TO) is tried to be sent to $address
+     *  - if one test mail succeeds, then the address is valid, else invalid
+     *
+     * @param string $address
+     * @return bool
+     */
+    protected static function validateEmailAddressMx( $address )
+    {
+        $timeoutOpen = 3; // for fsockopen()
+        $timeoutConnection = 5; // for stream_set_timeout()
+
+        list( $local, $domain ) = explode( '@', $address );
+        if ( !empty( $domain ) )
+        {
+            if ( getmxrr( $domain, $hosts, $weights ) )
+            {
+                for ( $i = 0; $i < count( $hosts ); $i++ )
+                {
+                    $mx[$hosts[$i]] = $weights[$i];
+                }
+
+                asort( $mx );
+                $mx = array_keys( $mx );
+            }
+            elseif ( checkdnsrr( $domain, 'A' ) )
+            {
+                $mx[0] = gethostbyname( $domain );
+            }
+            else
+            {
+                $mx = array();
+            }
+
+            if ( ( $numberOfMx = count( $mx ) ) > 0 )
+            {
+                $smtp = array(
+                               "HELO smtp.ez.no",
+                               "MAIL FROM: <[EMAIL PROTECTED]>",
+                               "RCPT TO: <{$address}>",
+                               "QUIT",
+                             );
+
+                for( $i = 0; $i < $numberOfMx; $i++ )
+                {
+                    if ( $socket = @fsockopen( $mx[$i], 25, $errno = 0, 
$errstr = 0, $timeoutOpen ) )
+                    {
+                        $response = fgets( $socket );
+                        stream_set_timeout( $socket, $timeoutConnection );
+                        $meta = stream_get_meta_data( $socket );
+                        if( !$meta['timed_out'] && !preg_match( '/^2\d\d[ 
-]/', $response ) )
+                        {
+                            return false;
+                        }
+                        foreach ( $smtp as $command )
+                        {
+                            fputs( $socket, "{$command}\r\n" );
+                            $response = fgets( $socket, 4096 );
+                            if( !$meta['timed_out'] && preg_match( '/^5\d\d[ 
-]/', $response ) )
+                            {
+                                return false;
+                            }
+                        }
+                        fclose( $socket );
+                        return true;
+                    }
+                    elseif ( $i === $numberOfMx - 1 )
+                    {
+                        // none of the mail servers could be contacted
+                        return false;
+                    }
+                }
+            }
+            else
+            {
+                // no mail servers found
+                return false;
+            }
+        }
+    }
+
+    /**
      * Returns an unique message ID to be used for a mail message.
      *
      * The hostname $hostname will be added to the unique ID as required by 
RFC822.

Added: trunk/Mail/tests/tools/data/addresses_correct.txt
==============================================================================
--- trunk/Mail/tests/tools/data/addresses_correct.txt (added)
+++ trunk/Mail/tests/tools/data/addresses_correct.txt [iso-8859-1] Mon Aug  6 
09:01:05 2007
@@ -1,0 +1,165 @@
+# Enter email addresses which should be validated as "correct".
+#
+# Enter one email address per line.
+#
+# An email address has this form:
+#     [EMAIL PROTECTED]
+#
+# Valid email addresses should follow RFC822 and RFC2822.
+#
+# Comments are entered as "# comment", and comments are useful for disabling
+# an email address for testing purposes.
+
+# domain part as hostname
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+
+# domain part as IP address
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+
+# localpart
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+|@example.com
[EMAIL PROTECTED]
+/@example.com
+'@example.com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+&@example.com
[EMAIL PROTECTED]
+
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+john|[EMAIL PROTECTED]
[EMAIL PROTECTED]
+john/[EMAIL PROTECTED]
+john'[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+john&[EMAIL PROTECTED]
[EMAIL PROTECTED]
+
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+johndoe|@example.com
[EMAIL PROTECTED]
+johndoe/@example.com
+johndoe'@example.com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+johndoe&@example.com
[EMAIL PROTECTED]
+
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+john/[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+|johndoe|@example.com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+'johndoe'@example.com
+"[[ johndoe ]]"@example.com
+"john.'doe'"@example.com
+
+"john doe"@example.com
+"john\doe"@example.com
+"john?doe"@example.com
+"john,doe"@example.com
+"[EMAIL PROTECTED]"@example.com
+"john=doe"@example.com
+"john<doe"@example.com
+"john>doe"@example.com
+"john;doe"@example.com
+"john:doe"@example.com
+"john¢doe"@example.com
+"john±doe"@example.com
+"john³doe"@example.com
+"johnµdoe"@example.com
+"john¶doe"@example.com
+"john·doe"@example.com
+"john¸doe"@example.com
+"john¹doe"@example.com
+"john°doe"@example.com
+"john½doe"@example.com
+"john»doe"@example.com
+"john§doe"@example.com
+"john®doe"@example.com
+"john¯doe"@example.com
+"john¬doe"@example.com
+"john¼doe"@example.com
+"johnþdoe"@example.com
+"john¡doe"@example.com
+"john£doe"@example.com
+"john¤doe"@example.com
+"john¥doe"@example.com
+"johnÞdoe"@example.com
+"john¦doe"@example.com
+"johnªdoe"@example.com
+"john¨doe"@example.com
+"john©doe"@example.com
+"john¿doe"@example.com
+"john¾doe"@example.com
+"john¼doe"@example.com
+"john«doe"@example.com
+

Propchange: trunk/Mail/tests/tools/data/addresses_correct.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/Mail/tests/tools/data/addresses_correct_mx.txt
==============================================================================
--- trunk/Mail/tests/tools/data/addresses_correct_mx.txt (added)
+++ trunk/Mail/tests/tools/data/addresses_correct_mx.txt [iso-8859-1] Mon Aug  
6 09:01:05 2007
@@ -1,0 +1,14 @@
+# Enter email addresses which should be validated as "correct with MX".
+#
+# Enter one email address per line.
+#
+# An email address has this form:
+#     [EMAIL PROTECTED]
+#
+# Valid email addresses should follow RFC822 and RFC2822.
+#
+# Comments are entered as "# comment", and comments are useful for disabling
+# an email address.
+
[EMAIL PROTECTED]
[EMAIL PROTECTED]

Propchange: trunk/Mail/tests/tools/data/addresses_correct_mx.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/Mail/tests/tools/data/addresses_incorrect.txt
==============================================================================
--- trunk/Mail/tests/tools/data/addresses_incorrect.txt (added)
+++ trunk/Mail/tests/tools/data/addresses_incorrect.txt [iso-8859-1] Mon Aug  6 
09:01:05 2007
@@ -1,0 +1,213 @@
+# Enter email addresses which should be validated as "incorrect".
+#
+# Enter one email address per line.
+#
+# An email address has this form:
+#     [EMAIL PROTECTED]
+#
+# Valid email addresses should follow RFC822 and RFC2822.
+#
+# Comments are entered as "# comment", and comments are useful for disabling
+# an email address.
+
+# domain part as hostname
+johndoe
+johndoe@
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED],com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]'ample.com
[EMAIL PROTECTED]"ample.com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]|e.com
[EMAIL PROTECTED]
[EMAIL PROTECTED] ample.com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED] m
[EMAIL PROTECTED]
+johndoe@(example).com
[EMAIL PROTECTED]
+johndoe@"example".com
+johndoe@'example'.com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED],,,
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]()
[EMAIL PROTECTED]""
[EMAIL PROTECTED]''
[EMAIL PROTECTED]||
[EMAIL PROTECTED]
+johndoe@|example.com
+johndoe@,example.com
[EMAIL PROTECTED]
+@
[EMAIL PROTECTED]
+
+# domain part as IP address
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+johndoe@(127.0.0.1)
[EMAIL PROTECTED]    
+johndoe@"127.0.0.1"
+johndoe@'127.0.0.1'
+johndoe@|127.0.0.1|
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+
+# localpart
+example.com
[EMAIL PROTECTED]
+
[EMAIL PROTECTED]
+,@example.com
[EMAIL PROTECTED]
+"@example.com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+<@example.com
+>@example.com
+:@example.com
+;@example.com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+johndoe,@example.com
[EMAIL PROTECTED]
+johndoe"@example.com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+johndoe<@example.com
+johndoe>@example.com
+johndoe:@example.com
+johndoe;@example.com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+john [EMAIL PROTECTED]
+
+john,[EMAIL PROTECTED]
+john"[EMAIL PROTECTED]
[EMAIL PROTECTED]@example.com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+john<[EMAIL PROTECTED]
+john>[EMAIL PROTECTED]
+john;[EMAIL PROTECTED]
+john:[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
+
+- johndoe [EMAIL PROTECTED]
[EMAIL PROTECTED]
+(johndoe)@example.com
+<johndoe>@example.com

Propchange: trunk/Mail/tests/tools/data/addresses_incorrect.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: trunk/Mail/tests/tools/data/addresses_incorrect_mx.txt
==============================================================================
--- trunk/Mail/tests/tools/data/addresses_incorrect_mx.txt (added)
+++ trunk/Mail/tests/tools/data/addresses_incorrect_mx.txt [iso-8859-1] Mon Aug 
 6 09:01:05 2007
@@ -1,0 +1,14 @@
+# Enter email addresses which should be validated as "incorrect with MX".
+#
+# Enter one email address per line.
+#
+# An email address has this form:
+#     [EMAIL PROTECTED]
+#
+# Valid email addresses should follow RFC822 and RFC2822.
+#
+# Comments are entered as "# comment", and comments are useful for disabling
+# an email address.
+
[EMAIL PROTECTED]
[EMAIL PROTECTED]

Propchange: trunk/Mail/tests/tools/data/addresses_incorrect_mx.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/Mail/tests/tools_test.php
==============================================================================
--- trunk/Mail/tests/tools_test.php [iso-8859-1] (original)
+++ trunk/Mail/tests/tools_test.php [iso-8859-1] Mon Aug  6 09:01:05 2007
@@ -20,7 +20,6 @@
  */
 class ezcMailToolsTest extends ezcTestCase
 {
-
     /**
      * Tests if ezcMailTools::composeEmailAddress works as it should
      * @todo test if no 'email' is given.
@@ -237,6 +236,57 @@
         $this->assertEquals( '[EMAIL PROTECTED]', $add[1]->email );
     }
 
+    public function testValidateEmailAddressCorrect()
+    {
+        $data = file_get_contents( dirname( __FILE__ ) . 
'/tools/data/addresses_correct.txt' );
+        $addresses = split( "\n", $data );
+        foreach ( $addresses as $address )
+        {
+            if ( strlen( trim( $address ) ) > 1 && $address{0} !== '#' )
+            {
+                $this->assertEquals( true, ezcMailTools::validateEmailAddress( 
$address ), "Failed asserting that {$address} is correct." );
+            }
+        }
+    }
+
+    public function testValidateEmailAddressCorrectMX()
+    {
+        $data = file_get_contents( dirname( __FILE__ ) . 
'/tools/data/addresses_correct_mx.txt' );
+        $addresses = split( "\n", $data );
+        foreach ( $addresses as $address )
+        {
+            if ( strlen( trim( $address ) ) > 1 && $address{0} !== '#' )
+            {
+                $this->assertEquals( true, ezcMailTools::validateEmailAddress( 
$address, true ), "Failed asserting that {$address} is correct with MX." );
+            }
+        }
+    }
+
+    public function testValidateEmailAddressIncorrect()
+    {
+        $data = file_get_contents( dirname( __FILE__ ) . 
'/tools/data/addresses_incorrect.txt' );
+        $addresses = split( "\n", $data );
+        foreach ( $addresses as $address )
+        {
+            if ( strlen( trim( $address ) ) > 1 && $address{0} !== '#' )
+            {
+                $this->assertEquals( false, 
ezcMailTools::validateEmailAddress( $address ), "Failed asserting that 
{$address} is incorrect." );
+            }
+        }
+    }
+
+    public function testValidateEmailAddressIncorrectMX()
+    {
+        $data = file_get_contents( dirname( __FILE__ ) . 
'/tools/data/addresses_incorrect_mx.txt' );
+        $addresses = split( "\n", $data );
+        foreach ( $addresses as $address )
+        {
+            if ( strlen( trim( $address ) ) > 1 && $address{0} !== '#' )
+            {
+                $this->assertEquals( false, 
ezcMailTools::validateEmailAddress( $address, true ), "Failed asserting that 
{$address} is incorrect with MX." );
+            }
+        }
+    }
 
     /**
      * Tests if generateContentId works as it should.


-- 
svn-components mailing list
[email protected]
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to