2017-02-28 13 views
0

私のフォームは意図したとおりに動作していますが、何らかの理由でメールが私のメールアカウントに送信されるだけで、他のメールアカウントには送信されません。私がどこに間違っているのかを見るためには、$ emailを使って2番目の電子メールがどこに行くのかという電子メールアドレスを取得していると仮定していると仮定します。ここで私のPHPはどこですか?複数の人にフォームメールを送信するPHP?

<?php 
    $from = 'Pixel Wars - Press Inquiry'; 
    $to = "[email protected], $email"; 
    $subject = 'Press Inquiry from Pixelwars.com'; 

    function errorHandler ($message) { 
     die(json_encode(array(
      'type'  => 'error', 
      'response' => $message 
     ))); 
    } 

    function successHandler ($message) { 
     die(json_encode(array(
      'type'  => 'success', 
      'response' => $message 
     ))); 
    } 


    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $message = $_POST['message']; 
     $body = "Name: $name\r\n Email: $email\r\n\r\n Message:\r\n $message"; 

     $pattern = '/[\r\n]|Content-Type:|Bcc:|Cc:/i'; 
     if (preg_match($pattern, $name) || preg_match($pattern, $email) || preg_match($pattern, $message)) { 
      errorHandler('Header injection detected.'); 
     } 

     // Check if name has been entered 
     if (!$_POST['name']) { 
      errorHandler('Please enter your name.'); 
     } 

     // Check if email has been entered and is valid 
     if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
      errorHandler('Please enter a valid email address.'); 
     } 

     // Check if message has been entered 
     if (!$_POST['message']) { 
      errorHandler('Please enter your message.'); 
     } 

     // prepare headers 
     $headers = 'MIME-Version: 1.1' . PHP_EOL; 
     $headers .= 'Content-type: text/plain; charset=utf-8' . PHP_EOL; 
     $headers .= "From: $name <$email>" . PHP_EOL; 
     $headers .= "Return-Path: $to" . PHP_EOL; 
     $headers .= "Reply-To: $email" . PHP_EOL; 
     $headers .= "X-Mailer: PHP/". phpversion() . PHP_EOL; 

     // send the email 
     $result = @mail($to, $subject, $body . "\r\n\n" .'------------------ '. "\r\n\n" .'Hello '.$name.' we will contact you as soon as possible about your query.' ."\n". 'Dont forget to keep visiting www.pixelwars.com for more updates and awesome content.' ."\n". 'We will email you back on the provided email below, thank you and have a nice day.' . "\r\n\n" .'-- '.$email, $headers); 
     if ($result) { 
      successHandler('Thank You! we will be in touch'); 
     } else { 
      errorHandler('Sorry there was an error sending your message.'); 
     } 
    } else { 
     errorHandler('Allowed only XMLHttpRequest.'); 
    } 
?> 

、誰もがそれを

+0

の可能性のある重複した[PHPは、複数の電子メールアドレスにメールを送信](http://stackoverflow.com/questions/4506078/ph​​p-send-mail-to-multiple-email-addresses) –

+0

@JamesHunt私はそれが重複しているとは思わない - OPは構文があるが、正しくはない - あなたの参照されている問題は、要件に合ったコードを作成する方法に関する質問である。 –

+0

あなたの問題は、@ chris85が述べたように、 '$ email'変数は存在しないと思います。これらの3つの宣言を文書の先頭に移動してみてください。 –

答えて

4

をクラックすることができます場合は、あなたがそうあなたの2番目のアドレスが設定されていない$toを定義する際に$emailが割り当てられていない事前にありがとうございます。

デモ:https://3v4l.org/QIIJu

ソリューション、後でスクリプト内に$to割り当てを動かします。また、エラー報告を使用すると、未定義の変数通知がスローされます。

<?php 
$from = 'Pixel Wars - Press Inquiry'; 
$subject = 'Press Inquiry from Pixelwars.com'; 
.... 

$to = "[email protected], $email"; 
$result = @mail($to, $subject, $body .... 

$emailが定義されているためです。また、エラー抑制を使用しないでください。それは有用な情報を隠すだけです。表示したくない場合は、エラーを表示せずにログに残してください。

+0

私は、開発中に同意します。エラー報告は大量の時間を節約することができます。しかし、疑わしい場合は、それをエコーアウトしてください。 OPはエコーから、最初の電子メールアドレスの隣に何も印刷されていないことが分かりました。 –

+0

$ emailと一緒にPHPの上部にも名前とメッセージを定義することは賢明でしょうか? –

+0

@Neths未定義の通知が設定されていない場合、それは割り当てのための私の好みの場所です。もしAJAXリクエストでなければ何も起こらなければ、 'if(isset($ _ SERVER ['HTTP_X_REQUESTED_WITH'])&& $ _SERVER ['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){' 。 – chris85

0

あなたは電子メールadrressesのカンマ区切りのリストであることを

$to = "[email protected], [email protected], [email protected]" 

ニーズに$で複数のメールアドレスを追加する必要があります。

mail($email_to, $email_subject, $thankyou); 

おかげ

関連する問題