За последние 24 часа нас посетили 22264 программиста и 1158 роботов. Сейчас ищут 713 программистов ...

Проблема при отправке сообщения клиенту, после заполнения формы

Тема в разделе "Работа с почтой", создана пользователем rabix, 17 сен 2018.

  1. rabix

    rabix Новичок

    С нами с:
    17 сен 2018
    Сообщения:
    1
    Симпатии:
    0
    Всем привет вот такой код у меня:
    Нужно чтобы при заполнении формы человеку на почту которую он указал приходило письмо желательно с вложением, но выходит ошибка когда заполняю поля
    $client_email = ''; // поле откуда брать адрес клиента email_field
    $client_message = "Здравствуйте к ку привет"; // текст письма, которое будет отправлено клиенту
    PHP:
    1. <?php ini_set('display_errors','Off');
    2. $email = 'kishiha@mail.ru'; // адрес куда отправлять письмо, можно несколько через запятую
    3. $subject = 'Новое сообщение с сайта '.$_SERVER['HTTP_HOST']; // тема письма с указанием адреса сайта
    4. $message = 'Данные формы:'; // вводная часть письма
    5. $addreply = ''; // адрес куда отвечать (необязательно)
    6. $from = ''; // имя отправителя (необязательно)
    7. $smtp = 1; // отправлять ли через почтовый ящик, 1 - да, 0 - нет, отправлять через хостинг
    8.  
    9. // настройки почтового сервера для режима $smtp = 1 (Внимание: с GMAIL не работает)
    10. $host = 'smtp.yandex.ru'; // сервер отправки писем (приведен пример для Яндекса)
    11. $username = '*******'; // логин вашего почтового ящика
    12. $password = '*******'; // пароль вашего почтового ящика
    13. $auth = 1; // нужна ли авторизация, 1 - нужна, 0 - не нужна
    14. $secure = 'ssl'; // тип защиты
    15. $port = 465; // порт сервера
    16. $charset = 'utf-8'; // кодировка письма
    17.  
    18. // дополнительные настройки
    19. $cc = ''; // копия письма
    20. $bcc = ''; // скрытая копия
    21.  
    22. $client_email = ''; // поле откуда брать адрес клиента email_field
    23. $client_message = "Здравствуйте к ку привет"; // текст письма, которое будет отправлено клиенту
    24. $client_file = ''; // вложение, которое будет отправлено клиенту
    25.  
    26. $export_file = ''; // имя файла для экспорта в CSV
    27. $export_fields = ''; // список полей для экспорта (через запятую)
    28.  
    29. $fields = "";
    30. foreach($_POST as $key => $value){
    31.   if($value === 'on'){ $value = 'Да'; }
    32.   if($key === 'sendto'){
    33.     $email = $value;
    34.   } elseif($key === 'required_fields'){
    35.     $required = explode(',', $value);
    36.   } else {
    37.     if(in_array($key, $required) && $value === ''){ echo 'ERROR_REQUIRED'; die(); }
    38.     if(is_array($value)){
    39.       $fields .= str_replace('_',' ',$key).': <b>'.implode(', ', $value).'</b> <br />';
    40.     }else{
    41.       if($value !== ''){ $fields .= str_replace('_',' ',$key).': <b>'.$value.'</b> <br />'; }
    42.     }
    43.   }
    44. }
    45.  
    46. if($export_file !== ''){
    47.   $vars = explode(',', $export_fields);
    48.   $str_arr[] = '"'.date("d.m.y H:i:s").'"';
    49.   foreach($vars as $var_name) {
    50.     if(isset($_POST[$var_name])){ $str_arr[] = '"'.$_POST[$var_name].'"'; }
    51.   }
    52.   file_put_contents($export_file, implode(';', $str_arr)."\n", FILE_APPEND | LOCK_EX);
    53. }
    54.  
    55. smtpmail($email, $subject, $message.'<br>'.$fields);
    56. if(!empty($client_email)){
    57.   empty($client_message) ? $message .= '<br>'.$fields : $message = $client_message;
    58.   smtpmail($_POST[$client_email], $subject, $message, true);
    59. }
    60.  
    61. function smtpmail($to, $subject, $content, $client_mode = false){
    62.  
    63. global $success, $smtp, $host, $auth, $secure, $port, $username, $password, $from, $addreply, $charset, $cc, $bcc, $client_email, $client_message, $client_file;
    64.  
    65. require_once('./class-phpmailer.php');
    66. $mail = new PHPMailer(true);
    67. if($smtp){ $mail->IsSMTP(); }
    68. try {
    69.   $mail->SMTPDebug  = 0;
    70.   $mail->Host       = $host;
    71.   $mail->SMTPAuth   = $auth;
    72.   $mail->SMTPSecure = $secure;
    73.   $mail->Port       = $port;
    74.   $mail->CharSet    = $charset;
    75.   $mail->Username   = $username;
    76.   $mail->Password   = $password;
    77.  
    78.   if(!empty($username)) $mail->SetFrom($username, $from);
    79.   if(!empty($addreply)) $mail->AddReplyTo($addreply, $from);
    80.  
    81.   $to_array = explode(',', $to); foreach ($to_array as $to){ $mail->AddAddress($to); }
    82.   if(!empty($cc)){ $to_array = explode(',', $cc); foreach ($to_array as $to){ $mail->AddCC($to); }}
    83.   if(!empty($bcc)){ $to_array = explode(',', $bcc); foreach ($to_array as $to){ $mail->AddBCC($to); }}
    84.  
    85.   $mail->Subject = htmlspecialchars($subject);
    86.   $mail->MsgHTML($content);
    87.  
    88.   if($client_mode){
    89.     if(!empty($client_file)) $mail->AddAttachment($client_file);
    90.   }elseif(!$client_mode){
    91.     $files_array = reArrayFiles($_FILES['file']);
    92.     if( $files_array !== false ){
    93.     foreach ($files_array as $file) {
    94.         if(!empty($file['tmp_name'])) $mail->AddAttachment($file['tmp_name'],$file['name']);
    95.     }}
    96.   }
    97.  
    98.   $mail->Send();
    99.   if(!$client_mode) echo('success');
    100.  
    101. } catch (phpmailerException $e) {
    102.   echo $e->errorMessage();
    103. } catch (Exception $e) {
    104.   echo $e->getMessage();
    105. }
    106. }
    107.  
    108. function reArrayFiles(&$file_post) {
    109.     if($file_post === null){ return false; }
    110.     $files_array = array();
    111.     $file_count = count($file_post['name']);
    112.     $file_keys = array_keys($file_post);
    113.     for ($i=0; $i<$file_count; $i++) {
    114.         foreach ($file_keys as $key) {
    115.             $files_array[$i][$key] = $file_post[$key][$i];
    116.         }
    117.     }
    118.     return $files_array;
    119. }
    120. ?>
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    какая ? если ты задал логику "скрыть ошибки":
    ini_set('display_errors','Off');
     
  3. joshadow

    joshadow Активный пользователь

    С нами с:
    24 фев 2015
    Сообщения:
    10
    Симпатии:
    1
    возможно, если Вы можете использовать *nix(linux, bsd и т.д.) площадку, меньший путь сопротивления - это mail() https://php.ru/manual/function.mail.html
    В принципе, работало даже с локального хоста.
     
  4. joshadow

    joshadow Активный пользователь

    С нами с:
    24 фев 2015
    Сообщения:
    10
    Симпатии:
    1
    Рабочей лошадью можно считать HtmlMimeMail5 https://github.com/smxi/php-html-mime-mail Сам не пробовал - но хвалят. Если будете смотреть - обратите внимание на ссылочку в файле README.TXT. Там есть коротенькое описание, правда на английском, но, на мой взгляд, вполне самоочевидное.