2015-03-17 6 views
1

Я пытаюсь проверить проверку nocaptcha Google, а затем отправить данные на адрес электронной почты. У меня есть этот PHP код:Как вызвать функцию почты в php в выражении if?

<?php 
function mailsend(){ 
    $name = trim(strip_tags($_POST['firstname'])); 
    $email = trim(strip_tags($_POST['email'])); 
    $message = htmlentities($_POST['bug']); 

    $subject = "Bug report submitted :("; 
    $to = "[email protected]"; 
    $nametitle = "Name:"; 
    $messagetitle = "Message:"; 

    $body = <<<HTML 
$nametitle 
$name 
$messagetitle 
$message 
HTML; 

    $headers = "From: $email\r\n"; 
    $headers = "Content-type: text/html\r\n"; 

    mail($to, $subject, $body, $headers); 
} 
if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // Construct the Google verification API request link. 
    $params = array(); 
    $params['secret'] = 'secret_key'; // Secret key 
    if (!empty($_POST) && isset($_POST['g-recaptcha-response'])) { 
     $params['response'] = urlencode($_POST['g-recaptcha-response']); 
    } 
    $params['remoteip'] = $_SERVER['REMOTE_ADDR']; 

    $params_string = http_build_query($params); 
    $requestURL = 'https://www.google.com/recaptcha/api/siteverify?' . $params_string; 

    // Get cURL resource 
    $curl = curl_init(); 

    // Set some options 
    curl_setopt_array($curl, array(
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_URL => $requestURL, 
    )); 

    // Send the request 
    $response = curl_exec($curl); 
    // Close request to clear up some resources 
    curl_close($curl); 

    $response = @json_decode($response, true); 

    if ($response["success"] == true) { 
     echo '<h3 class="alert alert-success">Your Bug report has been sent sucessfully!</h3>'; 
     mailsend(); 
    } else { 
     echo '<h3 class="alert alert-danger">You have not completed the recaptcha!</h3>'; 
    } 
} 
?> 

Я также с помощью этой формы HTML:

<form class="col s12" action="" method="post"> 
      <div class="row"> 
       <div class="input-field col s6"> 
        <input id="first_name" type="text" class="validate" name="firstname" required> 
        <label for="first_name">First Name</label> 
       </div> 
       <div class="input-field col s6"> 
        <input id="last_name" type="text" class="validate" name="lastname"> 
        <label for="last_name">Last Name</label> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="input-field col s12"> 
        <input id="email" type="email" class="validate" name="email" required> 
        <label for="email">Email</label> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="input-field col s12"> 
        <i class="mdi-editor-mode-edit prefix"></i> 
        <textarea id="icon_prefix2" class="materialize-textarea" name="bug" required></textarea> 
        <label for="icon_prefix2">Please explain your issue clearly here</label> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="input-field col s12"> 
        <div class="g-recaptcha" data-sitekey="site_key"></div> 
       </div> 
      </div> 
      <button class="btn waves-effect waves-light" type="submit" name="action" required>Submit 
       <i class="mdi-content-send right"></i> 
      </button> 
      <span class='msg'><?php echo $msg; ?></span> 
     </form> 

В настоящее время код успешно проверяет ReCaptcha но не отправляет письмо с данными из формы на требуемый адрес электронной почты. Мой вопрос - это лучший способ реализовать nocaptcha recaptcha Google, а затем отправить данные из формы на адрес электронной почты. Заранее спасибо за помощь!

EDIT: Выяснили, как получить эту работу и вставьте код здесь для всех, кому нужна помощь в этом.
РНР:

<?php 

function mailform(){ 
    $name = $_POST['firstname']; 
    $email = $_POST['email']; 
    $message = $_POST['bug']; 
    $from = 'Bug Reporting System'; 
    $to = '[email protected]'; 
    $subject = 'New Bug Report'; 

    $message_formatted = " 
    <h3>New Bug Reported by $from</h3> 
    <h3>From: $name</h3> 
    <h5>Bug:</h5> 
    <p>$message</p> 
    "; 

    $headers = "MIME-Version: 1.0" . "\r\n"; 
    $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n"; 

    mail($to, $subject, $message_formatted, $headers); 
} 

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // Construct the Google verification API request link. 
    $params = array(); 
    $params['secret'] = 'secret_key'; 
    if (!empty($_POST) && isset($_POST['g-recaptcha-response'])) { 
     $params['response'] = urlencode($_POST['g-recaptcha-response']); 
    } 
    $params['remoteip'] = $_SERVER['REMOTE_ADDR']; 

    $params_string = http_build_query($params); 
    $requestURL = 'https://www.google.com/recaptcha/api/siteverify?' . $params_string; 

    // Get cURL resource 
    $curl = curl_init(); 

    // Set options 
    curl_setopt_array($curl, array(
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_URL => $requestURL, 
    )); 

    // Send the request 
    $response = curl_exec($curl); 
    // Close request to clear up some resources 
    curl_close($curl); 

    $response = @json_decode($response, true); 

    if ($response["success"] == true) { 
     echo '<h5 class="alert alert-success">Your Bug report has been sent sucessfully!</h5>'; 
     mailform(); 
    } else { 
     echo '<h5 class="alert alert-danger">You have not completed the recaptcha!</h5>'; 
    } 
}  
?> 

оригинальный HTML форма не должна быть изменена. Я использую структуру Materialize, если вам интересно, почему было много разметки.

+0

У вас есть сообщение об ошибке для вашего кода? Правильно ли настроен сервер для отправки сообщений электронной почты? – Maximus2012

+0

Да, сервер настроен правильно, потому что раньше я использовал сценарий электронной почты. У меня были ошибки в этом коде, прежде чем исправлять их, и у меня не было ошибок с текущим кодом. Единственное, что не так, что письмо не появляется в желаемом почтовом ящике. Графический интерфейс и все остальное отлично работает. –

ответ

1

Это, вероятно, не проблема, но стоит упомянуть. Согласно вашему коду выше, похоже, что вы отправляете электронное письмо на жесткий код [email protected] Я не вижу, где вы устанавливаете адресата на другой адрес, чем тот.

Опять же, возможно, вы отредактировали его на что-то общее, чтобы опубликовать его, но я просто перехожу к тому, что там написано.

+0

Да, спасибо за предложение, я изменил его на нечто общее для публикации. :) –

Смежные вопросы