2016-07-27 11 views
0

PHPMailerの私のアドレスバリデーターに問題があります。誰かが有効なもので私を助けることができますか?私のPHPバージョンは5.6.19であり、PHPMailerのバージョンは5.2.16なので、基本的に選択されたライブラリはpcre8です。ちっぽけなエンコード:有効なPCRE8ライブラリPHPMailerバージョン5.2.16およびPHPバージョン5.6.19

return (boolean)preg_match(
       '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' . 
       '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' . 
       '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' . 
       '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' . 
       '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' . 
       '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' . 
       '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' . 
       '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' . 
       '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD', 
       $address 
      ); 

send.php:

<?php 
ini_set('display_errors', true); 
    error_reporting(E_ALL); 
    require_once('class.phpmailer.php'); 
    $to=isset($_POST['verify'])?$_POST['verify']:false; 
    $subject="Email verification"; 
    $message='<p>Welcome to Our service this is an email verification procedure, Please click <a href="#">here</a> to go back.'; 

//$to= "[email protected]"; 
    $mail = new PHPMailer(); 
    $mail->isSMTP(); // telling the class to use SMTP 

// SMTP Configuration 
$mail->SMTPSecure='ssl'; 
$mail->SMTPAuth = true;     // enable SMTP authentication 
$mail->Host = "smtp.gmail.com "; // SMTP server 
$mail->Username = "[email protected]"; 
$mail->Password = "mypassword";    
$mail->Port = 465; // optional if you don't want to use the default 

$mail->From = "<[email protected]>"; 
$mail->FromName = "Admin"; 
$mail->Subject = $subject; 

//$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test 
    $mail->isHTML(true); 
    $mail->Body=$message; 
    $mail->msgHTML($message); 


    $mail->addAddress($to); 
    if(!$mail->Send()) 
    { 
    $response = "Message error!".$mail->ErrorInfo; 
echo $response; 
    // echo $to; 
} 


    else { 
$response = "Message sent!"; 
    echo $response; 
} 


?> 

ありがとう!

+0

これはかなり正規表現です。 PHPで電子メールを検証する際の他のスレッドを見てきましたか? http://stackoverflow.com/questions/12026842/how-to-validate-an-email-address-in-php – chris85

+0

これは、正規表現を使用して電子メールアドレスの検証に関する一般的な質問ではありません。それはPHPMailer内の検証メカニズムに関するものです。 – Synchro

+0

@シンクロこの違いはどうですか? PHPMailerは検証のために正規表現を使用しているようですが、質問は文字通りこの検証のための有効な正規表現を求めています。 –

答えて

0

理論的に正規表現を使って電子メールアドレスを正確に検証することはできませんが(確かにその有名な質問が示すように)、それは主により複雑な(この文脈ではほとんど無関係です) RFC821のより実用的かつはるかに単純な要件ではなく、RFC822に準拠しています。しかし実際には、それは十分にうまく機能して価値がある。これは、例えば、PHP filter_var関数のFILTER_VALIDATE_EMAILフラグが(PHPMailerのpcre8パターンと同じ著者によって)使用されている理由です。

あなたはlong-standing PHPMailer bugがPHPでPCREと何か関係があると思われますが、PHPとPCREのバージョンが同じでも矛盾していて誰にも影響しないので、解決されていません。 pcre8パターンでは、PCREのそれ以降のバージョンでのみ使用可能な機能がいくつか使用されていますが、古い精度の低いpcreパターンではこれらの機能は使用されず、同じ問題が発生しません。あなたは、このクラスのプロパティを設定することによって、その内部の検証のために、そのパターンを使用するようにphpmailerのを伝えることができます。

PHPMailer::$validator = 'pcre'; 

はまた、あなたが呼び出し可能に、同じクラスのプロパティを設定することで、独自の検証関数を注入することができ、例えばこれは考えるようになります有効なすべてのアドレス:

PHPMailer::$validator = function($email) { return true; }; 

更新:それは常にあなたのコードを見ることができます!

$mail->From = "<[email protected]>"; 

これは有効な送信元アドレスではないため、おそらくエラーの原因です。 - あなたはオートローダーを使用していないと、SMTPクラスをロードしていない

第二
$mail->setFrom('[email protected]', 'Admin'); 

、あなたのコードがphpmailerの5.2.16に失敗する必要があります:あなたはsetFrom()代わりFromFromNameを設定するを使用している場合、この問題の通知になるだろう、それはクラスを見つけることができなくなり、あなたのためにそれをロードしません。送信しようとするまでにコードが失敗している可能性がありますので、その問題は認識していません。とにかく作曲家を使うことをお勧めします。

+0

私はまだ動作しませんでした、私はすべてのパターンのケースを試したが、うまくいきませんでした、私はfilter_varに検証機能を変更しましたが、 'あなたはリストで1人の受信者を提供する必要があります。 –

+0

その場合、問題は検証パターンではなく、他の場所で問題になる可能性があります。おそらく、厄介なコードの処理に関係します。あなたの質問の残りのコードを投稿できますか? – Synchro

+0

PHPMailerクラスまたは送信コードですか? –

関連する問題