За последние 24 часа нас посетили 16817 программистов и 1641 робот. Сейчас ищут 960 программистов ...

Отправка excel файла на почту

Тема в разделе "Работа с почтой", создана пользователем NikRabe, 15 июн 2019.

Метки:
  1. NikRabe

    NikRabe Новичок

    С нами с:
    15 июн 2019
    Сообщения:
    4
    Симпатии:
    1
    Доброго времени суток всем знатокам и сведующим. Недавно начал изучать и осваивать РНР на более или менее нормальном уровне и применять его на действительной практике, но пока что знаний не хватает.Столкнулся с проблемой при изучении и выполнении боевого задания. Прошу помощи у всех кто может помочь.
    Суть задания следующая: Клиент заходит на страницу сайта. Кликает в необходимый пункт (кнопку) перед ним выпадает форма обратной связи, он заполняет в ней необходимые некоторые поля и нажимает на кнопочку "отправить". И на почту кому требуется приходит заполненный excel файл с информацией забранной с формы на сайте. Порыскав по интернету я познакомился с таки замечательными вещами как PHPExcel и PHPMailer. Прекрасные вещи и думаю я еще не раз к ним вернусь. Как их использовать более или менее разобрался, подключил сделал, настроил по отдельности все работает замечательно.
    С формы все берется, заполняется в файл (PHPExcel) , а на почту улетает файл с сообщением ((тестовое вложение)PHPMailer). Более или менее разобрался, вот только теперь не могу сообразить как мне "склеить" мои 2 эти результата в один. На сколько я примерно себе представил то файл excel шаблон (в который будут заноситься данные из формы) лежит на сервере и обработчик будет его открывать заносить туда данные из формы, но вот только дальше я немного не понимаю где этот файл с которым я работаю и куда и как его прикрепить к письму которое формируется далее и отправляется. Прошу помочь с муками моими, ибо бьюсь над этим уже неделю...
    Мои коды обработчиков так же прилагаю.
    PHP:
    1. <?
    2.  
    3. require 'phpmailer/PHPMailer.php';
    4. require 'phpmailer/SMTP.php';
    5. require 'phpmailer/Exception.php';
    6.  
    7. $client1 = $_POST['name'];//присвоить переменной значение, полученное из формы name=name
    8. $client2 = $_POST['email']; //полученное из формы name=email
    9. $client3 = $_POST['phone']; //полученное из формы name=phone
    10. $client4 = $_POST['message']; //полученное из формы name=message
    11.  
    12.  
    13. /** Error reporting */
    14. /** Include path **/
    15. ini_set('include_path', ini_get('include_path').';/Classes/');
    16. /** PHPExcel */
    17. include 'Classes/PHPExcel.php';
    18. /** PHPExcel_Writer_Excel2007 */
    19. include 'Classes/PHPExcel/Writer/Excel2007.php';
    20. // Create new PHPExcel object
    21. echo date('H:i:s') . " Create new PHPExcel object \n";
    22. $objPHPExcel = PHPExcel_IOFactory::load("excel.xlsx");
    23. /* $objPHPExcel = new PHPExcel(); */
    24. // Set properties
    25. echo date('H:i:s') . " Set properties \n";
    26. $objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
    27. $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
    28. $objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
    29. $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
    30. $objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
    31. // Add some data
    32. echo date('H:i:s') . " Add some data\n";
    33. $objPHPExcel->setActiveSheetIndex(0);
    34. $objPHPExcel->getActiveSheet()->SetCellValue('B2', $client1); // $client1 - заполняет клиент в форме
    35. $objPHPExcel->getActiveSheet()->SetCellValue('B3', $client2);
    36. $objPHPExcel->getActiveSheet()->SetCellValue('B4', $client3);
    37. $objPHPExcel->getActiveSheet()->SetCellValue('B5', $client4);
    38. // Rename sheet
    39. echo date('H:i:s') . " Rename sheet \n";
    40. $objPHPExcel->getActiveSheet()->setTitle('Simple');
    41. // Save Excel 2007 file
    42. echo date('H:i:s') . " Write to Excel2007 format \n";
    43. $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
    44. echo date ('H:i:s'). "Test log";
    45. $objWriter->save(str_replace('.php', '.xlsx', __FILE__));
    46. // Echo done
    47. echo date('H:i:s') . " Done writing file. \r \n";
    48.  
    49. ?>
    //Это обработчик который открывает шаблон excel файла, добавляет в него данные и сохраняет новый файл (кстати заодно хотел бы узнать, а как дать имя сохраняемому файлу, можете подсказать заодно пожалуйста ?)

    PHP:
    1. <?php
    2. // Файлы phpmailer
    3. require 'phpmailer/PHPMailer.php';
    4. require 'phpmailer/SMTP.php';
    5. require 'phpmailer/Exception.php';
    6.  
    7. // Переменные, которые отправляет пользователь
    8. $name = $_POST['name'];
    9. $email = $_POST['email'];
    10. $text = $_POST['text'];
    11.  
    12. // Проверяем валидность EMail
    13. if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    14.  
    15. $mail = new PHPMailer\PHPMailer\PHPMailer();
    16. try {
    17.     $msg = "ok";
    18.     $mail->isSMTP();  
    19.     $mail->CharSet = "UTF-8";                                        
    20.     $mail->SMTPAuth   = true;
    21.  
    22.     // Настройки вашей почты
    23.     $mail->Host       = 'ssl://smtp.yandex.ru'; // SMTP сервера
    24.     $mail->Username   = '********@yandex.ru'; // Логин на почте
    25.     $mail->Password   = '*********'; // Пароль на почте
    26.     $mail->SMTPSecure = 'ssl';
    27.     $mail->Port       = 465;
    28.     $mail->setFrom('********', 'Подпись'); // Адрес самой почты
    29.  
    30.     // Получатель письма
    31.     $mail->addAddress('********@gmail.com');    
    32.  
    33.     // Прикрипление файлов к письму
    34. if (!empty($_FILES['myfile']['name'][0])) {
    35.     for ($ct = 0; $ct < count($_FILES['myfile']['tmp_name']); $ct++) {
    36.         $uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['myfile']['name'][$ct]));
    37.         $filename = $_FILES['myfile']['name'][$ct];
    38.         if (move_uploaded_file($_FILES['myfile']['tmp_name'][$ct], $uploadfile)) {
    39.             $mail->addAttachment($uploadfile, $filename);
    40.         } else {
    41.             $msg .= 'Неудалось прикрепить файл ' . $uploadfile;
    42.         }
    43.     }  
    44. }
    45.  
    46.         // -----------------------
    47.         // Само письмо
    48.         // -----------------------
    49.         $mail->isHTML(true);
    50.    
    51.         $mail->Subject = 'Заголовок письма';
    52.         $mail->Body    = "<b>Имя:</b> $name <br>
    53.        <b>Почта:</b> $email<br><br>
    54.        <b>Сообщение:</b><br>$text";
    55.  
    56.  
    57. // Проверяем отравленность сообщения
    58. if ($mail->send()) {
    59.     echo "$msg";
    60. } else {
    61. echo "Сообщение не было отправлено. Неверно указаны настройки вашей почты";
    62. }
    63.  
    64. } catch (Exception $e) {
    65.     echo "Сообщение не было отправлено. Причина ошибки: {$mail->ErrorInfo}";
    66. }
    67.  
    68. } else {
    69.     echo 'mailerror';
    70. }
    //Это обработчик который я нашел в интернете, он забирает данные с формы и файл прикрипленный к форме обратной связи и этот файл отправляет вместе с данными из формы на почту.

    Помогите объединить эти 2 вещи в одну ибо я уже всю голову сломал как их соединить, чтобы человек заполнял данные в форме, запустил обработчик. Обработчик открыл файл - заполнил файл и отправил этот файл на E-mail. Спасибо всем заранее за помощь и просветление :)
     
  2. NikRabe

    NikRabe Новичок

    С нами с:
    15 июн 2019
    Сообщения:
    4
    Симпатии:
    1
    Нашел решение, всё сделал, работает как нужно. Тема более не актуальна, вопрос закрыт)
     
  3. valentinnew

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

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    Форум - это не только способ получить ответ автору темы, но тем, кто будет сталкиваться с вопросом позже. Поделись, пожауйста, решением)