2016-05-06 4 views
2

PHPMailerを使用して連絡先フォームから電子メールを送信しています。 入力フィールドに無効なメールアドレスを入力しても、メールは送信されます。クライアント側とサーバー側の両方の検証を実行したい。電子メールが無効な場合、PHPMailerは送信しません

PHPMailerには無効な電子メールアドレスを確認するためのビルトイン検証システムがありますか?入力された電子メールが無効な場合は、エラーを返し、電子メールを送信しません。

+0

「無効」とはどういう意味ですか? PHPMailerには検証コードがあり、電子メールの送信を許可する前に電子メールアドレスを確認する必要があります。 – Spudley

+0

私の場合、私は 'sdjfygsdfisdf'のようなものを電子メールとして入力することができ、それでも私の受信箱にそれを受け取ります。私は実際の電子メールアドレスではないことを意味します。 – guub

+0

'私の場合、私は 'sdjfygsdfisdf'のようなものを電子メールとして入力することができ、それでも私の受信箱にそれを受け取ります。あなたの受信箱は' sdjfygsdfisdf'で聞きます?? – dognose

答えて

1

電子メールアドレスを検証する最も簡単で正確な方法は、filter_varを使用することです。パッチを当てたPHPMailerに頼るのではなく、PHPMailerに送る前にそれらを検証する関数を書くことができます。

function validateEmailAddr($addr) { 
    // note: do not attempt to write any regex to validate email addresses; 
    // it will invariably be wrong 
    return filter_var($addr, FILTER_VALIDATE_EMAIL); 
} 
+1

しかし、その場合には、ビルドイン検証機能も用意されています。http://phpmailer.github.io/PHPMailer/classes/PHPMailer.html#method_validateAddress –

+0

自分の代わりにphpmailer検証機能を使用するにはどうすればよいですか?私は、PHPMailerの開発者は、私が何よりも何をしているのかを知っていると仮定しています。 – guub

+2

'if(!PHPMailer :: validateAddress($ email)){...有効ではない、メールを送信しないでください} else {... is valid 、send email ...} ' – shamsup

2

あなたは「sdjfygsdfisdf」のようなものを入力して、まだあなたに送信された電子メールを取得する可能性があるという。

これは奇妙です。 PHPMailerで電子メールアドレス( 'to'、 'cc'、 'bcc'、 'replyto')を追加するとaddOrEnqueueAnAddress()関数を実行するため、検証チェックは含まれます。 'from'アドレスを追加すると、異なるコードが使用されますが、検証チェックも行われます。

ここで最も明白なことは、実際にエラーをチェックしてそのエラーをトラップしていないことです。

例外を使用してPHPMailerを使用しているかどうかによって、悪いアドレスを与えるとsetFrom()のような関数からfalseの値が返されることがあります。あなたがその値を無視してとにかく続けていれば、はい、電子メールはまだ送信されます。

エラー処理を追加する必要があります。 falseを返す関数呼び出しを確認します。

私の推奨する提案は、エラーハンドラに例外を使用することです - PHPMailerはフラグを設定するだけでこれを行うことができます。単一の関数呼び出しごとにfalseをチェックする必要がないので、エラー処理がより簡単になります。 trycatchブロックですべてをラップし、最後に1つのエラー処理を行います。

+0

これを例として実証できますか? – guub

+1

それを説明する良いコメントがある完全な例は、ここで見つけることができます:http://stackoverflow.com/a/2386576/352765 – Spudley

関連する問題