Last active
February 22, 2022 11:26
-
-
Save ArtemSites/7845576b486bfef68898ddfe2f4b3a1a to your computer and use it in GitHub Desktop.
Универсальный mail script - отправка формы с сайта (jQuery) | Universal mail script - submitting a form from a site (jQuery)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dependencies: | |
* jquery-3.4.1 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// action="/index.php?route=common/order336" method="post" | |
class ControllerCommonOrder336 extends Controller | |
{ | |
private $error = []; | |
public function index() | |
{ | |
$json = array(); | |
$all_right = true; | |
if ($this->request->server['REQUEST_METHOD'] == 'POST') { | |
$text = ''; | |
if (!isset($json['error'])) { | |
$html = '<h3>Запрос с сайта ' . $_SERVER['SERVER_NAME'] . '</h3>'; | |
if (isset($_REQUEST['lesson'])) { | |
$html .= '<p><b>Предмет: </b> ' . $this->request->post['lesson'] . '</p>'; | |
} | |
if (isset($_REQUEST['input_name'])) { | |
$html .= '<p><b>Имя: </b> ' . $this->request->post['input_name'] . '</p>'; | |
} | |
if (isset($_REQUEST['input_tel'])) { | |
$html .= '<p><b>Телефон: </b> ' . $this->request->post['input_tel'] . '</p>'; | |
} | |
if (isset($_REQUEST['input_mail'])) { | |
$html .= '<p><b>E-mail: </b> ' . $this->request->post['input_mail'] . '</p>'; | |
if (!filter_var($_REQUEST['input_mail'], FILTER_VALIDATE_EMAIL)) { | |
$json['error'] = 'not_valid_email'; | |
$all_right = false; | |
} | |
} | |
if (!isset($_REQUEST['input_checkbox'])) { | |
$json['error'] = 'not_accepted'; | |
$all_right = false; | |
} | |
if (isset($_REQUEST['g-recaptcha-response'])) { | |
if ($this->request->post['g-recaptcha-response'] === '') { | |
$json['error'] = 'no_g_recaptcha'; | |
$all_right = false; | |
} | |
} | |
if ($all_right) { | |
$mail = new Mail(); | |
$mail->protocol = $this->config->get('config_mail_protocol'); | |
$mail->parameter = $this->config->get('config_mail_parameter'); | |
$mail->hostname = $this->config->get('config_smtp_host'); | |
$mail->username = $this->config->get('config_smtp_username'); | |
$mail->password = $this->config->get('config_smtp_password'); | |
$mail->port = $this->config->get('config_smtp_port'); | |
$mail->timeout = $this->config->get('config_smtp_timeout'); | |
$mail->setTo($this->config->get('config_email')); | |
$mail->setFrom($this->config->get('config_email')); | |
$mail->setSender($this->request->post['input_name']); | |
$mail->setSubject(html_entity_decode('Запрос ' . $this->request->post['input_name'], ENT_QUOTES, 'UTF-8')); | |
$mail->setHtml($html); | |
$mail->setText(html_entity_decode($text, ENT_QUOTES, 'UTF-8')); | |
$mail->send(); | |
$json['success'] = true; | |
} | |
} | |
$this->response->setOutput(json_encode($json)); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<form action="/index.php?route=common/order336" class="advice__form" method="POST" id="adviceForm"> | |
<input type="hidden" name="form" value="specialist_call"> | |
<input type="text" name="input_name" class="input input_gray" placeholder="Имя"> | |
<input type="tel" name="input_tel" class="input input_gray js-phone" placeholder="Телефон"> | |
<input type="email" name="input_mail" class="input input_gray" placeholder="Email"> | |
<button type="submit" class="btn btn_blue advice__btn">Проконсультироваться</button> | |
<label class="checkbox js_checkbox_advice"> | |
<input type="checkbox" name="input_checkbox" class="checkbox__checkbox js_checkbox"> | |
<div class="checkbox__nesting"> | |
<span class="checkbox__square"></span> | |
<p class="checkbox__text s-light-hel equipment-checkbox__text"> | |
Я согласен(а) на обработку моих <a href="/konfedencialnost" class="confedent-link" target="_blank" title="Прочитать документ">Персональных данных</a> | |
</p> | |
</div> | |
</label> | |
<?php echo $captcha; ?> | |
</form> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$(function() { | |
setSendingForm($('.catalogs-form')); | |
function setSendingForm($targetForm) { | |
var $artModal = $('<div class="art-modal"></div>'); //create modal | |
var $artModalPellicle = $('<div class="art-modal-pellicle"></div>'); //create modal pellicle | |
$('html').append($artModalPellicle); | |
var selectorModalBtnClose = '.art-modal-close, .art-btn-modal-close'; | |
var selectorContentOfSuccess = '#artModalSuccess'; //селектор сообщения об успешной отправки | |
var selectorContentOfErrorSendingAjax = '#artModalError'; //селектор сообщения об ошибке отправки ajax | |
var selectorContentOfErrorRecaptcha = '#artModalErrorBot'; //селектор сообщения об ошибке проверки recaptcha | |
var selectorContentOfErrorEmail = '#artModalErrorEmail'; | |
var selectorContentOfNotAccepted = '#artModalErrorNotAccepted'; | |
$targetForm.submit(function(event) { | |
event.preventDefault(); | |
function viewModal(selectorOfModal) { | |
$(selectorOfModal).addClass('--show'); | |
$artModal.append($(selectorOfModal)); | |
$('html').append($artModal); | |
$artModalPellicle.show(); | |
$artModal.css('display', 'inline-flex'); | |
} | |
$.ajax({ | |
type: $targetForm.attr('method'), | |
url: $targetForm.attr('action'), | |
data: $targetForm.serialize(), | |
success: function(response) { | |
console.log(response); | |
if (response === 'success: mail function send success') { | |
viewModal(selectorContentOfSuccess); | |
$targetForm[0].reset(); | |
} else if (response === 'error: required input is empty') { | |
viewModal(artModalErrorEmpty); | |
} else if (response === '{"error":"no_g_recaptcha"}') { | |
viewModal(selectorContentOfErrorRecaptcha); | |
} else if (response === '{"error":"not_valid_email"}') { | |
viewModal(selectorContentOfErrorEmail); | |
} else if (response === '{"error":"not_accepted"}') { | |
viewModal(selectorContentOfNotAccepted); | |
} | |
}, | |
error: function(response) { | |
viewModal(selectorContentOfErrorSendingAjax); | |
} | |
}); | |
$(document).on('click keyup', function(e) { | |
if ($(e.target).is($artModalPellicle) || e.which === 27 || $(e.target).is(selectorModalBtnClose)) { | |
$('.art-modal-inner.--show').removeClass('--show'); | |
$artModal.hide(); | |
$artModalPellicle.hide(); | |
} | |
}); | |
}); | |
} | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<? | |
// $ar_required_input_names = ['Название организации', 'Адрес', 'ФИО', 'Телефон']; //массив имен обязательных полей | |
if (trim($_REQUEST["user_name_b"]) === '' && trim($_REQUEST["user_email_b"]) === '' && trim($_REQUEST["user_city_b"]) === '') { //check for spamming a robot | |
$method = $_SERVER['REQUEST_METHOD']; | |
$cc = true; //change color | |
$project_name = trim($_REQUEST["project_name"]); | |
$sender_email = trim($_REQUEST["sender_email"]); | |
$manager_emails = trim($_REQUEST["manager_emails"]); | |
$bcc_emails = trim($_REQUEST["bcc_emails"]); | |
$form_subject = trim($_REQUEST["form_subject"]); | |
// $password = trim($_REQUEST["password"]); | |
// $confirm_password = trim($_REQUEST["confirm_password"]); | |
foreach ($_REQUEST as $key => $value) { | |
if ( | |
$key != "project_name" //админские настройки | |
&& $key != "sender_email" //служебное поле для задания email скрипта отправки | |
&& $key != "manager_emails" //админские настройки | |
&& $key != "bcc_emails" //админские настройки | |
&& $key != "form_subject" //админские настройки | |
&& $key != "user_name_b" //проверки на бота | |
&& $key != "user_email_b" //проверки на бота | |
&& $key != "user_city_b" //проверки на бота | |
&& $key != "submit" //проверки на кнопку отправить | |
&& $key != "password" //пароль, разумеется не отправляется | |
&& $key != "confirm_password" //пароль, разумеется не отправляется | |
) { | |
// if ($key === 'E-mail') { | |
// if ( !filter_var($value, FILTER_VALIDATE_EMAIL) ) { | |
// echo 'error: e-mail is not valid'; | |
// return false;//не отправляем | |
// } | |
// } | |
// if (in_array($key, $ar_required_input_names) && empty($value)) { //если обязательное поле пусто то ошибка | |
// echo 'error: required input is empty'; | |
// return false; //не отправляем | |
// } | |
if (is_array($value)) { | |
foreach ($value as $k => $v) { | |
$message .= (($c = !$c) ? | |
'<tr>' : '<tr style="background-color: #f8f8f8;">') . " | |
<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>" . str_replace('_', ' ', $key . ' ' . ++$k) . "</b></td> | |
<td style='padding: 10px; border: #e9e9e9 1px solid;'>" . trim($v) . "</td> | |
</tr>"; | |
} | |
} else { | |
$message .= (($c = !$c) ? | |
'<tr>' : '<tr style="background-color: #f8f8f8;">') . " | |
<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>" . str_replace('_', ' ', $key) . "</b></td> | |
<td style='padding: 10px; border: #e9e9e9 1px solid;'>" . trim($value) . "</td> | |
</tr>"; | |
} | |
} | |
} | |
$message = "<table style='width: 100%;'>$message</table>"; | |
function adopt($text) | |
{ | |
return '=?UTF-8?B?' . Base64_encode($text) . '?='; | |
} | |
$headers = "MIME-Version: 1.0" . PHP_EOL . | |
"Content-Type: text/html; charset=utf-8" . PHP_EOL . | |
'From: ' . $sender_email . PHP_EOL . | |
'To: ' . $manager_emails . PHP_EOL . | |
'Bcc: ' . $bcc_emails . PHP_EOL . | |
'Reply-To: ' . $_SERVER['SERVER_NAME'] . PHP_EOL; | |
// if (filter_var($manager_emails, FILTER_VALIDATE_EMAIL)) {//не будет работать с массивом скорее всего | |
if (mail('', adopt($form_subject), $message, $headers)) { | |
echo 'success: mail function send success'; | |
} else { | |
echo 'error: mail function send error'; | |
return false; | |
} | |
// } else { | |
// echo 'error: manager e-mail is not valid!'; | |
// return false; | |
// } | |
} else { | |
echo 'error: check for spamming a bot error'; | |
return false; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.d-n { | |
display: none !important | |
} | |
.p-a { | |
position: absolute !important | |
} | |
.zi-999 { | |
z-index: -999 !important | |
} | |
.art-modal { | |
display: none; | |
justify-content: center; | |
align-items: center; | |
position: fixed; | |
top: 50%; | |
z-index: 999; | |
width: 100%; | |
height: 100%; | |
overflow: hidden; | |
outline: 0; | |
background-color: white; | |
max-width: 440px; | |
left: 50%; | |
transform: translateX(-50%) translateY(-50%); | |
max-height: 250px; | |
text-align: center; | |
border-radius: 5px; | |
box-shadow: 0 0 15px #555; | |
} | |
.art-modal-inner { | |
display: none; | |
height: 85%; | |
padding: 0 1em; | |
width: auto; | |
margin: auto; | |
flex-direction: column; | |
align-items: flex-start; | |
justify-content: space-around; | |
} | |
.art-modal-inner.--show { | |
display: flex; | |
} | |
.art-modal-inner__title { | |
font-family: "Oswald", sans-serif; | |
font-size: 1.6em; | |
text-transform: none; | |
text-align: left; | |
} | |
.art-modal-inner__text { | |
color: #474972; | |
font-family: "Oswald", sans-serif; | |
font-size: 1.2em; | |
text-transform: none; | |
text-align: left; | |
font-weight: 300; | |
} | |
.art-modal-close { | |
position: absolute; | |
right: 0; | |
top: 0; | |
cursor: pointer; | |
padding: 1em; | |
transition-duration: 300ms; | |
} | |
.art-modal-close:hover { | |
transform: rotate(-180deg) scale(1.2); | |
transform-origin: center; | |
} | |
.art-btn-modal-close { | |
margin: 0 auto; | |
max-width: 228px; | |
max-height: 44px; | |
width: 100%; | |
height: 100%; | |
background-color: #595882; | |
color: #fff; | |
border: 1px solid transparent; | |
border-radius: 0.25rem; | |
cursor: pointer; | |
text-transform: uppercase; | |
} | |
.art-modal-pellicle { | |
display: none; | |
position: fixed; | |
left: 0; | |
top: 0; | |
width: 100vw; | |
height: 100vh; | |
background-color: rgba(0, 0, 0, 0.5); | |
z-index: 998; | |
cursor: pointer; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<h2 class="partners-call__title">Станьте нашим партнером уже сегодня</h2> | |
<form action="/mail/sender.php" method="post" id="partnersCall" class="partners-call__form"> | |
<!-- Start Hidden Fields --> | |
<input type="hidden" name="form_subject" value="Заполнена форма на сайте «Каталоги по оборудованию»" autocomplete="off"> | |
<input type="hidden" name="project_name" value="Заполнена форма на сайте «Каталоги по оборудованию»" autocomplete="off"> | |
<input type="hidden" name="sender_email" value="[email protected]" autocomplete="off"> | |
<input type="hidden" name="manager_emails" value="[email protected]" autocomplete="off"> | |
<input type="hidden" name="bcc_emails" value="" autocomplete="off"> | |
<input type="hidden" name="user_name_b" value="" autocomplete="off"> | |
<input type="email" name="user_email_b" value="" class="d-n" autocomplete="off"> | |
<input type="text" name="user_city_b" value="" class="p-a zi-999" style="background-color:transparent;border-color:transparent;color:transparent"> | |
<input type="hidden" class="hidden" autocomplete="off" name="С какой страницы" value="https://<?= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>" /> | |
<input type='hidden' class="hidden" name='Предшествующая страница' value='<?=$_SERVER['HTTP_REFERER']?>'> | |
<!-- END Hidden Fields --> | |
<input type="text" name="Имя" value="" required="required" class="partners-call__item" | |
placeholder="Представьтесь *"> | |
<input type="text" name="Телефон" value="" required="required" class="partners-call__item art-form-tel" | |
placeholder="Укажите номер телефона *"> | |
<!-- E-mail специально так, по этому имени идет валидация в скрипте --> | |
<input type="email" name="E-mail" value="" class="partners-call__item art-form-email" | |
placeholder="Укажите свой e-mail"> | |
<!--Массив значений:--> | |
<input type="checkbox" name="Интересующий_каталог[]" value="Оборудование ISHA"> | |
<input type="checkbox" name="Интересующий_каталог[]" value="Оборудование AKA"> | |
<input class="partners-call__submit btn find-out__btn text-white" type="submit" value="Отправить заявку"> | |
<label for="" class="partners-call__consent">Нажимая на кнопку, вы подтверждаете согласие <a href="" | |
class="partners-call__consent-link">на обработку персональных данных</a></label> | |
</form> | |
<div class="art-modal-inner" id="artModalSuccess"> | |
<span class="art-modal-close">✕</span> | |
<h2 class="art-modal-inner__title">Сообщение отправлено!</h2> | |
<p class="art-modal-inner__text">Спасибо за заявку!<br>Мы с вами свяжемся в ближайшее время.</p> | |
<input class="art-btn-modal-close" type="submit" value="Закрыть"> | |
</div> | |
<div class="art-modal-inner" id="artModalErrorBot"> | |
<span class="art-modal-close">✕</span> | |
<h2 class="art-modal-inner__title">Ошибка!</h2> | |
<p class="art-modal-inner__text art-modal-inner__text_red">Recaptcha невалидна!</p> | |
<input class="art-btn-modal-close" type="submit" value="Закрыть"> | |
</div> | |
<div class="art-modal-inner" id="artModalErrorNotAccepted"> | |
<span class="art-modal-close">✕</span> | |
<h2 class="art-modal-inner__title">Отправка отменена!</h2> | |
<p class="art-modal-inner__text art-modal-inner__text_red">Условия не приняты вами!</p> | |
<input class="art-btn-modal-close" type="submit" value="Закрыть"> | |
</div> | |
<div class="art-modal-inner" id="artModalErrorEmail"> | |
<span class="art-modal-close">✕</span> | |
<h2 class="art-modal-inner__title">Ошибка!</h2> | |
<p class="art-modal-inner__text art-modal-inner__text_red">Вы ввели невалидный email адрес!</p> | |
<input class="art-btn-modal-close" type="submit" value="Закрыть"> | |
</div> | |
<div class="art-modal-inner" id="artModalError"> | |
<span class="art-modal-close">✕</span> | |
<h2 class="art-modal-inner__title">Ошибка отправки!</h2> | |
<input class="art-btn-modal-close" type="submit" value="Закрыть"> | |
</div> | |
<div class="art-modal-inner" id="artModalErrorEmpty"> | |
<span class="art-modal-close">✕</span> | |
<h2 class="art-modal-inner__title">Отправка отменена!</h2> | |
<p class="art-modal-inner__text art-modal-inner__text_red">Одно или несколько обязательных полей не заполнены!</p> | |
<input class="art-btn-modal-close" type="submit" value="Закрыть"> | |
</div> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment