474 lines
15 KiB
PHP
474 lines
15 KiB
PHP
<?php
|
|
|
|
/*-------------------------------------------------
|
|
|
|
Form Processor Plugin
|
|
by SemiColonWeb
|
|
|
|
---------------------------------------------------*/
|
|
|
|
|
|
/*-------------------------------------------------
|
|
PHPMailer Initialization
|
|
---------------------------------------------------*/
|
|
|
|
use PHPMailer\PHPMailer\PHPMailer;
|
|
use PHPMailer\PHPMailer\Exception;
|
|
|
|
require 'phpmailer/src/Exception.php';
|
|
require 'phpmailer/src/PHPMailer.php';
|
|
require 'phpmailer/src/SMTP.php';
|
|
|
|
|
|
/*-------------------------------------------------
|
|
Receiver's Email
|
|
---------------------------------------------------*/
|
|
|
|
$toemails = array();
|
|
|
|
$toemails[] = array(
|
|
'email' => 'your-email@website.com', // Your Email Address
|
|
'name' => 'Your Name' // Your Name
|
|
);
|
|
|
|
|
|
/*-------------------------------------------------
|
|
Sender's Email
|
|
---------------------------------------------------*/
|
|
|
|
$fromemail = array(
|
|
'email' => 'no-reply@website.com', // Company's Email Address (preferably currently used Domain Name)
|
|
'name' => 'Company Name' // Company Name
|
|
);
|
|
|
|
|
|
/*-------------------------------------------------
|
|
reCaptcha
|
|
---------------------------------------------------*/
|
|
|
|
// Add this only if you use reCaptcha with your Contact Forms
|
|
$recaptcha_secret = ''; // Your reCaptcha Secret
|
|
|
|
|
|
/*-------------------------------------------------
|
|
hCaptcha
|
|
---------------------------------------------------*/
|
|
|
|
// Add this only if you use hCaptcha with your Contact Forms
|
|
$hcaptcha_secret = ''; // Your hCaptcha Secret
|
|
|
|
|
|
/*-------------------------------------------------
|
|
PHPMailer Initialization
|
|
---------------------------------------------------*/
|
|
|
|
$mail = new PHPMailer();
|
|
|
|
/* Add your SMTP Codes after this Line */
|
|
|
|
|
|
// End of SMTP
|
|
|
|
|
|
/*-------------------------------------------------
|
|
Form Messages
|
|
---------------------------------------------------*/
|
|
|
|
$message = array(
|
|
'success' => 'We have <strong>successfully</strong> received your Message and will get Back to you as soon as possible.',
|
|
'error' => 'Email <strong>could not</strong> be sent due to some Unexpected Error. Please Try Again later.',
|
|
'error_bot' => 'Bot Detected! Form could not be processed! Please Try Again!',
|
|
'error_unexpected' => 'An <strong>unexpected error</strong> occured. Please Try Again later.',
|
|
'captcha_invalid' => 'Captcha not Validated! Please Try Again!',
|
|
'captcha_error' => 'Captcha not Submitted! Please Try Again.'
|
|
);
|
|
|
|
|
|
/*-------------------------------------------------
|
|
SPAM Protection Settings
|
|
---------------------------------------------------*/
|
|
|
|
$spam_keywords = array(
|
|
'viagra',
|
|
'cialis',
|
|
'levitra'
|
|
);
|
|
|
|
$allowed_urls = 1;
|
|
|
|
|
|
/*-------------------------------------------------
|
|
Form Processor
|
|
---------------------------------------------------*/
|
|
|
|
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
|
|
|
|
$prefix = !empty( $_POST['prefix'] ) ? $_POST['prefix'] : '';
|
|
$submits = $_POST;
|
|
$botpassed = false;
|
|
|
|
|
|
$message_form = !empty( $submits['message'] ) ? $submits['message'] : array();
|
|
$message['success'] = !empty( $message_form['success'] ) ? $message_form['success'] : $message['success'];
|
|
$message['error'] = !empty( $message_form['error'] ) ? $message_form['error'] : $message['error'];
|
|
$message['error_bot'] = !empty( $message_form['error_bot'] ) ? $message_form['error_bot'] : $message['error_bot'];
|
|
$message['error_unexpected'] = !empty( $message_form['error_unexpected'] ) ? $message_form['error_unexpected'] : $message['error_unexpected'];
|
|
$message['captcha_invalid'] = !empty( $message_form['captcha_invalid'] ) ? $message_form['captcha_invalid'] : $message['captcha_invalid'];
|
|
$message['captcha_error'] = !empty( $message_form['captcha_error'] ) ? $message_form['captcha_error'] : $message['captcha_error'];
|
|
|
|
|
|
/*-------------------------------------------------
|
|
Bot Protection
|
|
---------------------------------------------------*/
|
|
|
|
if( isset( $submits[ $prefix . 'botcheck' ] ) ) {
|
|
$botpassed = true;
|
|
}
|
|
|
|
if( !empty( $submits[ $prefix . 'botcheck' ] ) ) {
|
|
$botpassed = false;
|
|
}
|
|
|
|
if( $botpassed == false ) {
|
|
echo '{ "alert": "error", "message": "' . $message['error_bot'] . '" }';
|
|
exit;
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------
|
|
SPAM Protection
|
|
---------------------------------------------------*/
|
|
|
|
function spam_keyword_check( $submitted, $spamwords ) {
|
|
if( is_array( $submitted ) ) {
|
|
return false;
|
|
}
|
|
if( !is_array( $spamwords ) ) $spamwords = array( $spamwords );
|
|
foreach( $spamwords as $spamstring ) {
|
|
if( ( $position = stripos( $submitted, $spamstring ) ) !== false ) return $position;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function spam_url_check( $submitted ) {
|
|
if( is_array( $submitted ) ) {
|
|
return false;
|
|
}
|
|
|
|
$pattern = "/(http|https)\:\/\/(www\.)?[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
|
|
|
|
if( preg_match_all( $pattern, $submitted, $urls ) ) {
|
|
return count($urls);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
foreach( $submits as $spam_submit ) {
|
|
if( spam_keyword_check( $spam_submit, $spam_keywords ) || spam_url_check( $spam_submit ) > $allowed_urls ) {
|
|
// A successful message is displayed to the submitter that makes him think that the Form has been sent so that he cannot modify the keywords to prevent SPAM
|
|
echo '{ "alert": "success", "message": "' . $message['success'] . '" }';
|
|
exit;
|
|
}
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------
|
|
reCaptcha
|
|
---------------------------------------------------*/
|
|
|
|
if( isset( $submits['g-recaptcha-response'] ) && !isset( $submits['h-captcha-response'] ) ) {
|
|
|
|
$recaptcha_data = array(
|
|
'secret' => $recaptcha_secret,
|
|
'response' => $submits['g-recaptcha-response']
|
|
);
|
|
|
|
$recap_verify = curl_init();
|
|
curl_setopt( $recap_verify, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify" );
|
|
curl_setopt( $recap_verify, CURLOPT_POST, true );
|
|
curl_setopt( $recap_verify, CURLOPT_POSTFIELDS, http_build_query( $recaptcha_data ) );
|
|
curl_setopt( $recap_verify, CURLOPT_SSL_VERIFYPEER, false );
|
|
curl_setopt( $recap_verify, CURLOPT_RETURNTRANSFER, true );
|
|
$recap_response = curl_exec( $recap_verify );
|
|
|
|
$g_response = json_decode( $recap_response );
|
|
|
|
if ( $g_response->success !== true ) {
|
|
echo '{ "alert": "error", "message": "' . $message['captcha_invalid'] . '" }';
|
|
exit;
|
|
}
|
|
}
|
|
|
|
|
|
/*-------------------------------------------------
|
|
hCaptcha
|
|
---------------------------------------------------*/
|
|
|
|
if( isset( $submits['h-captcha-response'] ) ) {
|
|
|
|
$hcaptcha_data = array(
|
|
'secret' => $hcaptcha_secret,
|
|
'response' => $submits['h-captcha-response']
|
|
);
|
|
|
|
$hcap_verify = curl_init();
|
|
curl_setopt( $hcap_verify, CURLOPT_URL, "https://hcaptcha.com/siteverify" );
|
|
curl_setopt( $hcap_verify, CURLOPT_POST, true );
|
|
curl_setopt( $hcap_verify, CURLOPT_POSTFIELDS, http_build_query( $hcaptcha_data ) );
|
|
curl_setopt( $hcap_verify, CURLOPT_SSL_VERIFYPEER, false );
|
|
curl_setopt( $hcap_verify, CURLOPT_RETURNTRANSFER, true );
|
|
$hcap_response = curl_exec( $hcap_verify );
|
|
|
|
$h_response = json_decode( $hcap_response );
|
|
|
|
if ( $h_response->success !== true ) {
|
|
echo '{ "alert": "error", "message": "' . $message['captcha_invalid'] . '" }';
|
|
exit;
|
|
}
|
|
}
|
|
|
|
|
|
$template = !empty( $submits['template'] ) ? $submits['template'] : 'html';
|
|
$html_title = !empty( $submits['html_title'] ) ? $submits['html_title'] : 'Form Response';
|
|
$forcerecap = ( !empty( $submits['force_recaptcha'] ) && $submits['force_recaptcha'] != 'false' ) ? true : false;
|
|
$replyto = !empty( $submits['replyto'] ) ? explode( ',', $submits['replyto'] ) : false;
|
|
|
|
if( $forcerecap ) {
|
|
if( !isset( $submits['g-recaptcha-response'] ) ) {
|
|
echo '{ "alert": "error", "message": "' . $message['captcha_error'] . '" }';
|
|
exit;
|
|
}
|
|
}
|
|
|
|
/*-------------------------------------------------
|
|
Auto-Responders
|
|
---------------------------------------------------*/
|
|
|
|
$autores = ( !empty( $submits['autoresponder'] ) && $submits['autoresponder'] != 'false' ) ? true : false;
|
|
$ar_subject = !empty( $submits['ar_subject'] ) ? $submits['ar_subject'] : 'Thanks for your Email';
|
|
$ar_title = !empty( $submits['ar_title'] ) ? $submits['ar_title'] : 'Its so good to hear from You!';
|
|
$ar_message = !empty( $submits['ar_message'] ) ? $submits['ar_message'] : 'Autoresponder Message';
|
|
|
|
preg_match_all('#\{(.*?)\}#', $ar_message, $ar_matches);
|
|
if( !empty( $ar_matches[1] ) ) {
|
|
foreach( $ar_matches[1] as $ar_key => $ar_value ) {
|
|
$ar_message = str_replace( '{' . $ar_value . '}' , ( is_array($submits[ $ar_value ]) ? implode( ', ', $submits[ $ar_value ] ) : $submits[ $ar_value ] ), $ar_message );
|
|
}
|
|
}
|
|
|
|
$ar_footer = !empty( $submits['ar_footer'] ) ? $submits['ar_footer'] : 'Copyrights © ' . date('Y') . ' <strong>SemiColonWeb</strong>. All Rights Reserved.';
|
|
|
|
$mail->Subject = !empty( $submits['subject'] ) ? $submits['subject'] : 'Form Response from your Website';
|
|
$mail->SetFrom( $fromemail['email'] , $fromemail['name'] );
|
|
|
|
if( !empty( $replyto ) ) {
|
|
if( count( $replyto ) > 1 ) {
|
|
$replyto_e = $submits[ $replyto[0] ];
|
|
$replyto_n = $submits[ $replyto[1] ];
|
|
$mail->AddReplyTo( $replyto_e , $replyto_n );
|
|
} elseif( count( $replyto ) == 1 ) {
|
|
$replyto_e = $submits[ $replyto[0] ];
|
|
$mail->AddReplyTo( $replyto_e );
|
|
}
|
|
}
|
|
|
|
foreach( $toemails as $toemail ) {
|
|
$mail->AddAddress( $toemail['email'] , $toemail['name'] );
|
|
}
|
|
|
|
/*-------------------------------------------------
|
|
All Processing for Fields starting with
|
|
Underscore must be done before this line of code
|
|
---------------------------------------------------*/
|
|
|
|
$underscore = array();
|
|
|
|
foreach( $submits as $name => $value ) {
|
|
if( strpos($name, '_') === 0 ) {
|
|
$underscore[] = $name;
|
|
}
|
|
}
|
|
|
|
$unsets = array( 'prefix', 'subject', 'replyto', 'template', 'html_title', 'message', 'autoresponder', 'ar_subject', 'ar_title', 'ar_message', 'ar_footer', $prefix . 'botcheck', 'g-recaptcha-response', 'h-captcha-response', 'force_recaptcha', $prefix . 'submit' );
|
|
|
|
$unsets = $unsets + $underscore;
|
|
|
|
foreach( $unsets as $unset ) {
|
|
unset( $submits[ $unset ] );
|
|
}
|
|
|
|
$fields = array();
|
|
|
|
foreach( $submits as $name => $value ) {
|
|
if( empty( $value ) ) {
|
|
continue;
|
|
}
|
|
|
|
$name = str_replace( $prefix , '', $name );
|
|
$name = function_exists('mb_convert_case') ? mb_convert_case( $name, MB_CASE_TITLE, "UTF-8" ) : ucwords($name);
|
|
|
|
if( is_array( $value ) ) {
|
|
$value = implode( ', ', $value );
|
|
}
|
|
|
|
$fields[$name] = nl2br( filter_var( $value, FILTER_SANITIZE_SPECIAL_CHARS ) );
|
|
}
|
|
|
|
$files = $_FILES;
|
|
|
|
foreach( $files as $file => $filevalue ) {
|
|
if( is_array( $filevalue['name'] ) ) {
|
|
$filecount = count( $filevalue['name'] );
|
|
|
|
for( $f = 0; $f < $filecount; $f++ ) {
|
|
if ( isset( $_FILES[ $file ] ) && $_FILES[ $file ]['error'][ $f ] == UPLOAD_ERR_OK ) {
|
|
$mail->IsHTML(true);
|
|
$mail->AddAttachment( $_FILES[ $file ]['tmp_name'][ $f ], $_FILES[ $file ]['name'][ $f ] );
|
|
}
|
|
}
|
|
} else {
|
|
if ( isset( $_FILES[ $file ] ) && $_FILES[ $file ]['error'] == UPLOAD_ERR_OK ) {
|
|
$mail->IsHTML(true);
|
|
$mail->AddAttachment( $_FILES[ $file ]['tmp_name'], $_FILES[ $file ]['name'] );
|
|
}
|
|
}
|
|
}
|
|
|
|
$response = array();
|
|
|
|
foreach( $fields as $fieldname => $fieldvalue ) {
|
|
if( $template == 'text' ) {
|
|
$response[] = $fieldname . ': ' . $fieldvalue;
|
|
} else {
|
|
$fieldname = '<tr>
|
|
<td style="font-size: 16px; line-height: 24px; font-weight: bold; padding: 0 0 5px 0;" align="left">' . $fieldname . '</td>
|
|
</tr>';
|
|
$fieldvalue = '<tr>
|
|
<td style="font-size: 16px; line-height: 24px; color: #777777; padding: 0 15px 30px 0;" align="left">' . $fieldvalue . '</td>
|
|
</tr>';
|
|
$response[] = $fieldname . $fieldvalue;
|
|
}
|
|
}
|
|
|
|
$referrer = $_SERVER['HTTP_REFERER'] ? '<br><br><br>This Form was submitted from: ' . $_SERVER['HTTP_REFERER'] : '';
|
|
|
|
$html_before = '<table border="0" cellpadding="0" cellspacing="0" height="100%" width="100%" bgcolor="#eeeeee" style="width: 100%; height: 100%; padding: 50px 0 50px 0;">
|
|
<tr>
|
|
<td align="center" valign="top">
|
|
<table border="0" cellpadding="0" cellspacing="0" width="84%" bgcolor="#ffffff" style="width: 84%;">
|
|
<tr>
|
|
<td align="center" valign="top">
|
|
';
|
|
|
|
$html_after = '</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table>';
|
|
|
|
if( $template == 'text' ) {
|
|
$body = implode( "<br>", $response ) . $referrer;
|
|
} else {
|
|
$html = $html_before . '<!-- / Header -->
|
|
<table border="0" cellpadding="0" cellspacing="0" width="84%" style="width: 84%;">
|
|
<tr>
|
|
<td style="padding: 30px 0 30px 0; border-bottom: solid 1px #eeeeee; font-size: 30px; font-weight: bold; text-decoration: none; color: #000000;" align="left">
|
|
' . $html_title . '
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<!-- / Sub-Header -->
|
|
<table border="0" cellpadding="0" cellspacing="0" width="84%" style="width: 84%; padding: 60px 0 30px 0;"">
|
|
' . implode( '', $response ) . '
|
|
</table>
|
|
|
|
<!-- / Footer -->
|
|
<table border="0" cellpadding="0" cellspacing="0" width="100%" align="center">
|
|
<tr>
|
|
<td align="center">
|
|
<table border="0" cellpadding="0" cellspacing="0" width="84%" align="center" style="border-top: 1px solid #eeeeee; width: 84%;">
|
|
<tr>
|
|
<td style="color: #d5d5d5; text-align: center; font-size: 12px; padding: 30px 0 30px 0; line-height: 22px;">' . strip_tags( $referrer ) . '</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
' . $html_after;
|
|
|
|
$body = $html;
|
|
}
|
|
|
|
if( $autores && !empty( $replyto_e ) ) {
|
|
$autoresponder = new PHPMailer();
|
|
|
|
/* Add your Auto-Responder SMTP Codes after this Line */
|
|
|
|
|
|
// End of Auto-Responder SMTP
|
|
|
|
$autoresponder->SetFrom( $fromemail['email'] , $fromemail['name'] );
|
|
if( !empty( $replyto_n ) ) {
|
|
$autoresponder->AddAddress( $replyto_e , $replyto_n );
|
|
} else {
|
|
$autoresponder->AddAddress( $replyto_e );
|
|
}
|
|
$autoresponder->Subject = $ar_subject;
|
|
|
|
$ar_body = $html_before . '<!-- / Header -->
|
|
<table border="0" cellpadding="0" cellspacing="0" width="84%" style="width: 84%;">
|
|
<tr>
|
|
<td style="padding: 30px 0 30px 0; border-bottom: solid 1px #eeeeee; font-size: 30px; font-weight: bold; text-decoration: none; color: #000000;" align="left">
|
|
' . $ar_title . '
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<!-- / Sub-Header -->
|
|
<table border="0" cellpadding="0" cellspacing="0" width="84%" style="width: 84%; padding: 60px 0 30px 0;"">
|
|
<tr>
|
|
<td style="font-size: 16px; line-height: 26px; color: #777777; padding: 0 15px 30px 0;" align="left">' . $ar_message . '</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<!-- / Footer -->
|
|
<table border="0" cellpadding="0" cellspacing="0" width="100%" align="center">
|
|
<tr>
|
|
<td align="center">
|
|
<table border="0" cellpadding="0" cellspacing="0" width="84%" align="center" style="border-top: 1px solid #eeeeee; width: 84%;">
|
|
<tr>
|
|
<td style="color: #d5d5d5; text-align: center; font-size: 12px; padding: 30px 0 30px 0; line-height: 22px;">' . $ar_footer . '</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
' . $html_after;
|
|
|
|
$autoresponder->MsgHTML( $ar_body );
|
|
$autoresponder->CharSet = "UTF-8";
|
|
}
|
|
|
|
$mail->MsgHTML( $body );
|
|
$mail->CharSet = "UTF-8";
|
|
$sendEmail = $mail->Send();
|
|
|
|
if( $sendEmail == true ):
|
|
|
|
if( $autores && !empty( $replyto_e ) ) {
|
|
$send_arEmail = $autoresponder->Send();
|
|
}
|
|
|
|
echo '{ "alert": "success", "message": "' . $message['success'] . '" }';
|
|
else:
|
|
echo '{ "alert": "error", "message": "' . $message['error'] . '<br><br><strong>Reason:</strong><br>' . $mail->ErrorInfo . '" }';
|
|
endif;
|
|
|
|
} else {
|
|
echo '{ "alert": "error", "message": "' . $message['error_unexpected'] . '" }';
|
|
}
|
|
|