permalink: /contact.php mail:

subject:
intro:

{%- capture mail-intro -%}You received a message on <a href='{{ site.url }}'>your website</a>.{%- endcapture -%} <?php

$contact_name = $contact_email = $contact_message = $token = $contact_ip = “”;

if ($_SERVER == “POST”) {

if (has_required_data($_POST)) {
    $contact_name = urldecode(filter_var(
        $_POST["name"],
        FILTER_SANITIZE_FULL_SPECIAL_CHARS));
    $contact_email = urldecode(filter_var(
        $_POST["email"],
        FILTER_SANITIZE_EMAIL));
    $contact_message = urldecode(filter_var(
        $_POST["message"],
        FILTER_SANITIZE_FULL_SPECIAL_CHARS));
    $token = filter_var(
        $_POST["token"],
        FILTER_SANITIZE_URL);
    if (filter_var(
        $_SERVER['REMOTE_ADDR'],
        FILTER_VALIDATE_IP)) {
        $contact_ip = $_SERVER['REMOTE_ADDR'];
    }

    if (is_recaptcha_valid($token)) {
        send_mail($contact_name, $contact_email, $contact_message, $contact_ip);
    } else {
        send_mail($contact_name, $contact_email, "Tried to contact you, but his recaptcha is not valid.", $contact_ip);
    }
}

}

function has_required_data($request) {

return (
    (
        isset($request['name'])
        && isset($request['email'])
        && isset($request['message'])
        && isset($request['token']))
    && (
        !empty($request['name'])
        && !empty($request['email'])
        && !empty($request['message'])
        && !empty($request['token'])));

}

function is_recaptcha_valid($token) {

$validation_url = "https://www.google.com/recaptcha/api/siteverify";
$data = array('secret' => '{{ site.recaptcha.secretkey }}', 'response' => $token);
$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($data)));
$context  = stream_context_create($options);
$result = json_decode(file_get_contents($validation_url, false, $context));

return (
    ($result !== FALSE)
    && isset($result->success)
    && $result->success);

}

function send_mail ($name, $email, $message, $ip) {

return mail(
    "{{ site.email }}",
    "{{ page.mail.subject | default: 'Contact request' }}",
    (
        "{{ page.mail.intro | default: mail-intro }}<br>\r\n"
        ."Ip: ".$ip."<br><br>\r\n"
        ."Name: ".$name."<br><br>\r\n"
        ."Email: ".$email."<br><br>\r\n"
        ."Message: ".$message."<br><br>\r\n"),
    (
        "From: ".$name
        ." <".$email.">\r\n"
        ."MIME-Version: 1.0\r\n"
        ."Content-type: text/html\r\n"));

}

?>