Skip to content

Instantly share code, notes, and snippets.

@RuslanAsadov
Last active August 12, 2020 21:47
Show Gist options
  • Save RuslanAsadov/f8e4671139f2c33c6cad895cc3cc93a8 to your computer and use it in GitHub Desktop.
Save RuslanAsadov/f8e4671139f2c33c6cad895cc3cc93a8 to your computer and use it in GitHub Desktop.
Attachments mail php
<?php
include 'PHPMailer.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
/*
К форме добавить класс = js-form
<input type="hidden" name="action" value="Название формы которое будет ниже">
везде прописать name и получать ниже как в образце
*/
/*
Вывод сообщения об ошибки для AJAX
*/
function out_er($str = ''){
$data = [
'status' => 'error',
'message' => $str
];
$data = json_encode($data,JSON_UNESCAPED_UNICODE);
echo $data;
die();
}
/*
Вывод сообщения об удаче для AJAX
*/
function out_success($str = ''){
$data = [
'status' => 'success',
'message' => $str
];
$data = json_encode($data,JSON_UNESCAPED_UNICODE);
echo $data;
die();
}
function parse_files_send($files) {
$parsed = [];
foreach($files as $file) {
$uploadfile = tempnam(sys_get_temp_dir(), sha1($file['name']));
$filename = $file['name'];
if (move_uploaded_file($file['tmp_name'], $uploadfile)) {
$parsed[$filename] = $uploadfile;
}
}
return $parsed;
}
/*
Отправка e-mail сообщения администратору
*/
function send_mail($message,$sub = null, $files = []){
//тема сообщения
$sub = is_null($sub) ? "Новая заявка на сайте ".$_SERVER['HTTP_HOST'] : $sub;
//кому отправляем - получаем из доп.опции
$to = get_field('pochta_dlya_priema_zayavok','options');
//от кого сообщение (генерируется автоматически)
$from = "robo@{$_SERVER['HTTP_HOST']}";
$email = new PHPMailer();
$email->IsHTML(true);
$email->SetFrom($from); //Name is optional
$email->Subject = $sub;
$email->Body = $message;
$email->AddAddress( $to );
$email->CharSet = 'UTF-8';
// $email->setLanguage('ru');
// $send = mail(
// $to,
// $sub,
// $message,
// "Content-type:text/html; charset = utf-8\r\nFrom:$from"
// );
$path_files = parse_files_send($files);
foreach($path_files as $filename => $uploadfile) {
$email->addAttachment($uploadfile, $filename);
}
if($email->Send()){
return true;
}else{
return false;
}
}
/*
Формализация двумерного массива в html таблицу
*/
function construct_table($arr){
$str = '<style>table{padding:15px;}</style>'."\r\n".'<table border="1">'."\r\n";
foreach($arr as $row){
$str .= ' <tr>'."\r\n";
foreach($row as $col)
$str .= " <td>$col</td>"."\r\n";
$str .= ' </tr>'."\r\n";
}
$str .= '</table>'."\r\n";
return $str;
}
//название всех форм на сайте. Будет использоваться ниже
$my_ajax_form = [
"form_add_new",
];
function form_add_new(){
$name = trim($_POST["name"]);
$e_mail = trim($_POST["e-mail"]);
$phone = trim($_POST["phone"]);
$message = trim($_POST["message"]);
$class_text = trim($_POST["class"]);
$id_class = trim($_POST["send_from_class_page"]);
$images = [];
$max_img_size = 1073741824;
if($message == '' && empty($_FILES)) {
out_er('Выберите фотографии или напишите в поле "Сообщение" известную вам информацию о классе');
}
if($name == ''){
out_er('Введите ваше ФИО');
}
if($e_mail == '' && $phone == ''){
out_er('Введите вашу почту или телефон');
}
if($id_class !== '' && is_numeric($id_class)) {
$id_class = intval($id_class) ?: null;
$title_from_class = get_the_title($id_class) ?: '';
$link_from_class = get_permalink($id_class) ?: '';
$table = [
['Тип формы',"Дополнить класс"],
['Класс', '<a href="'. $link_from_class .'" target="_blank">'. $title_from_class .'</a>']
];
} else {
if($class_text == '') {
out_er('Укажите отправляемый класс');
}
$table = [
['Тип формы',"Новая информация о классе"],
['Класс',$class_text]
];
}
if(!empty($_FILES)){
foreach($_FILES as $img) {
if($img['size'] <= $max_img_size && ($img['type'] == 'image/jpeg' || $img['type'] == 'image/png' || $img['type'] == 'image/jpg')) {
$images[] = $img;
}
}
if(empty($images)) {
out_er('Пожалуйста, проверьте корректность загружаемых фотографий');
}
}
$table[] = ['ФИО', $name];
$table[] = ['Почта', $e_mail];
$table[] = ['Телефон', $phone];
$table[] = ['Сообщение', $message];
$table = construct_table($table);
if(send_mail($table, "Заявка с сайта (туртасская-сош.рф)", $images)){
out_success('Спасибо за помощь!');
}else{
out_er('Произошла ошибка при отправке. Обновите страницу и попробуйте оставить заявку еще раз.');
}
}
//объявить все формы на сайте (используется массив, объявленный ранее)
foreach($my_ajax_form as $row){ //ADD ALL ACTION
add_action("wp_ajax_$row", "$row");
add_action("wp_ajax_nopriv_$row", "$row");
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment