За последние 24 часа нас посетили 18563 программиста и 1612 роботов. Сейчас ищут 1978 программистов ...

Как прикрепить файлы в phpmailer?

Тема в разделе "Сделайте за меня", создана пользователем drkrol, 26 авг 2016.

  1. drkrol

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

    С нами с:
    25 авг 2016
    Сообщения:
    38
    Симпатии:
    1
    Здравствуйте. Помогите пожалуйста разобраться с phpmailer.

    Я скачал с гитхаба майлер и залил себе на open server.

    Создал файл send.php с таким содержимым:
    PHP:
    1. <?php
    2.  
    3. require 'PHPMailerAutoload.php';
    4.  
    5. $mail = new PHPMailer;
    6.  
    7. //$mail->SMTPDebug = 3;                              // Enable verbose debug output
    8.  
    9. $mail->isSMTP();                                      // Set mailer to use SMTP
    10. $mail->Host = 'smtp.yandex.ru';  // Specify main and backup SMTP servers
    11. $mail->SMTPAuth = true;                              // Enable SMTP authentication
    12. $mail->Username = '****';                // SMTP username
    13. $mail->Password = '****';                          // SMTP password
    14. $mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted
    15. $mail->Port = 465;                                    // TCP port to connect to
    16.  
    17. $mail->setFrom('****@yandex.ru', 'Mailer');
    18. $mail->addAddress('mail@****.ru', 'Joe User');    // Add a recipient
    19.  
    20. $mail->addAttachment('/var/tmp/file.tar.gz');        // Add attachments
    21. $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
    22. $mail->isHTML(true);                                  // Set email format to HTML
    23.  
    24. $mail->Subject = 'Here is the subject';
    25. $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    26. $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    27.  
    28. if(!$mail->send()) {
    29.     echo 'Message could not be sent.';
    30.     echo 'Mailer Error: ' . $mail->ErrorInfo;
    31. } else {
    32.     echo 'Message has been sent';
    33. }
    Затем создал файл index.html с таким содержимым

    HTML:
    1. <form enctype="multipart/form-data" method="post" id="prodat">
    2. <input type="file" name="fileFF[]" multiple id="fileFF" accept="image/*" >
    3. <input value="Отправить" type="submit" id="submitFF2" class="submitF">
    4. <div class="result">Результат</div>
    5. </form>
    6.  
    7.     <script>
    8.      
    9. $(function(){
    10.   'use strict';
    11. $('#prodat').on('submit', function(e){
    12.     e.preventDefault();
    13.     var fd = new FormData( this );
    14.     $.ajax({
    15.       url: 'send.php',
    16.       type: 'POST',
    17.       contentType: false,
    18.       processData: false,
    19.       data: fd,
    20.       success: function(msg){
    21. if(msg == 'ok')
    22.     $(".result").text("отправлено");
    23.       }
    24.     });
    25.   });
    26. });
    27.     </script>
    Запускаю, прикрепляю, отправляю, письмо получаю, файл не получаю. Ну логично: откуда phpmailer знать, как у меня называется мой прикреплятор (fileFF) . Поэтому нужно что-то еще дописать.
    Подскажите, что нужно еще дописать, чтобы получить файлы?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    PHP:
    1. $mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
    2. $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
    Это для примера?
     
  3. drkrol

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

    С нами с:
    25 авг 2016
    Сообщения:
    38
    Симпатии:
    1
    Я это скопировал с гитхаба. Я менял только smpt сервер. остальное не трогал
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  5. drkrol

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

    С нами с:
    25 авг 2016
    Сообщения:
    38
    Симпатии:
    1
    ну ё*ана! работает!!! Теперь подскажите пожалуйста, какие файлы не нужны в phpmailer. К примеру папки docs, examples, language точно не нужны. А вот extras и test под вопросом. Потом файлы в главное папке: все .json, .md, .dist, я,так понимаю, не нужны. Остаются файлы:
    PHPMailerAutoload.php // нужен
    class.smtp.php // нужен
    get_oauth_token.php // ???
    class.pop3.php // ???
    class.phpmaileroauthgoogle.php // мне не нужен, я так думаю
    class.phpmaileroauth.php // ???
    class.phpmailer.php // ???
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Те что под вопросом, просто можно удалять по одному и проверять работает или нет :D
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    С oauth, pop3, google в имени - не нужны, последний в списке - нужен 100%
     
  8. drkrol

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

    С нами с:
    25 авг 2016
    Сообщения:
    38
    Симпатии:
    1
    В итоге:
    class.smtp.php
    class.phpmailer.php
    PHPMailerAutoload.php
    и мой файл send.php с настройками (который, наверно, тоже можно засунуть какой-нибудь class.smtp.php или PHPMail....php)
    send.php таков:
    PHP:
    1. <?php
    2. require 'PHPMailerAutoload.php';
    3.  
    4. $mail = new PHPMailer;
    5.  
    6. //$mail->SMTPDebug = 3;                            
    7.  
    8. $mail->isSMTP();                                    
    9. $mail->Host = 'smtp.yandex.ru';  // Если используем яндекс
    10. $mail->SMTPAuth = true;                            
    11. $mail->Username = '****'; // ваш логин в яндексе (именно логин, а не полная почта)
    12. $mail->Password = '****'; // пароль в яндексе
    13. $mail->SMTPSecure = 'ssl';                          
    14. $mail->Port = 465;                                  
    15.  
    16. $mail->setFrom('****@yandex.ru', 'Имя отправителя'); // ваш email в яндексе
    17. $mail->addAddress('mail@****.ru');     // email того, кому отправляем
    18.  
    19. // отправка файлов. Нужно изменить userfile на свой name , который указан в input
    20. $mail->addAttachment('/var/tmp/file.tar.gz');        
    21. $mail->addAttachment('/tmp/image.jpg', 'new.jpg');  
    22.   for ($ct = 0; $ct < count($_FILES['userfile']['tmp_name']); $ct++) {
    23.         $uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['userfile']['name'][$ct]));
    24.         $filename = $_FILES['userfile']['name'][$ct];
    25.         if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)) {
    26.             $mail->addAttachment($uploadfile, $filename);
    27.         } else {
    28.             $msg .= 'Failed to move file to ' . $uploadfile;
    29.         }
    30.     }
    31. $mail->isHTML(true);                                
    32.  
    33. $mail->Subject = 'Заголовок письма';
    34. $mail->Body    = 'Текст письма';
    35.  
    36. if(!$mail->send()) {
    37.     echo 'Message could not be sent.';  // если письмо не отправлено
    38.     echo 'Mailer Error: ' . $mail->ErrorInfo;
    39. } else {
    40.     echo 'Message has been sent'; // если письмо отправлено
    41. }
    Нет. нужно всё таки полный гайд написать для таких, как я...
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Если охота, можно аутолоад тоже исключить, и подключить оставшиеся два файла вручную.
    20 и 21 строчка - аттач несуществующих файлов. Загруженные через форму файлы аттачатся в 26 строке.
     
  10. drkrol

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

    С нами с:
    25 авг 2016
    Сообщения:
    38
    Симпатии:
    1
    Да. Еще лучше стало.
    Вместо
    PHP:
    1. require 'PHPMailerAutoload.php';
    Пишем
    PHP:
    1. require 'class.phpmailer.php';
    2. require 'class.smtp.php';
    И удаляем к черту PHPMailerAutoload.php
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @drkrol ещё все файлы можно в один склеить, тоже будет работать :cool:
     
  12. drkrol

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

    С нами с:
    25 авг 2016
    Сообщения:
    38
    Симпатии:
    1
    А потом удалить все комментарии, которых там более, чем достаточно.
    Кстати, как удалить комментарии вида /** */ ?
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    начиная с /*и включая */ всё можно удалять
     
  14. drkrol

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

    С нами с:
    25 авг 2016
    Сообщения:
    38
    Симпатии:
    1
    ну можно, это, конечно, хорошо) но как? я, к примеру, на sublime сижу. Поиск мне позволяет найти только определённый текст. найти /** */ я не могу
     
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ну глазами смотри, пока серое, значит ты внутри комментария
     
  16. drkrol

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

    С нами с:
    25 авг 2016
    Сообщения:
    38
    Симпатии:
    1
    да не :D:D:D:D:D
    я про автоматизацию процесса)))))
    глазами смотри)))))) прям в голос)))

    хочется нажать на кнопку и получить результат)
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Ну если есть замена по регулярному выражению, то типа
    Код (Text):
    1. \/\*.+?\*\/
     
    denis01 нравится это.
  18. karmay

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

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    Начитался тут всяких всяких примеров, так и не могу воткнуть, как же мне отправить почту с вложениями. Картинки допустим я в папку на хосте сохраняю, setlocal поставил, чтобы у меня файлы с кириллическими символами нормально сохранялись.
    Файлы я на сервер залил, их адреса сохранил в массив, надо отправлять, а как? Чет почитал про PHPMailer, там надо где-то авторизоваться, где-то пишут просто скрипт, который у меня не пока работает, Mail_Mime тут вот еще есть и т.д. Так а я почту могу просто отправить, скриптом, передав заголовки, адрес получателя и указав вложение или такого не быввает, надо бубен покупать?? И еще натыкался что есть ограничения на файлы тип по 25 Мб, а у меня файлы могут быть более 100Мб.
    Если есть где почитать, скиньте ссылку пожалуйста.
     
  19. acho

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

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    @karmay дык там всё просто ж.
    Либу эту можно использовать как с локальным почтовым сервером, если настроен (без авторизации), так и с IMAP/SMTP там всякими (вот тут нужна будет авторизация). Обо всяких MIME-типах с либой тебе задумываться не надо, она сама всё сделает как надо. Файлы больше ты не передашь, на это ограничение почтовых серверов есть. Не в либах дело.
    Большие файлы обычно грузятся куда-нибудь типо гуглдрайва, а в письме просто ссылка прикрепляется.

    А пример прям тут же есть, зачем далеко ходить: https://github.com/PHPMailer/PHPMailer
    там и аттачменты и вот это вот всё
     
    karmay нравится это.