Здравствуйте. Помогите пожалуйста разобраться с phpmailer. Я скачал с гитхаба майлер и залил себе на open server. Создал файл send.php с таким содержимым: PHP: <?php require 'PHPMailerAutoload.php'; $mail = new PHPMailer; //$mail->SMTPDebug = 3; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtp.yandex.ru'; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = '****'; // SMTP username $mail->Password = '****'; // SMTP password $mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted $mail->Port = 465; // TCP port to connect to $mail->setFrom('****@yandex.ru', 'Mailer'); $mail->addAddress('mail@****.ru', 'Joe User'); // Add a recipient $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name $mail->isHTML(true); // Set email format to HTML $mail->Subject = 'Here is the subject'; $mail->Body = 'This is the HTML message body <b>in bold!</b>'; $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; if(!$mail->send()) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent'; } Затем создал файл index.html с таким содержимым HTML: <form enctype="multipart/form-data" method="post" id="prodat"> <input type="file" name="fileFF[]" multiple id="fileFF" accept="image/*" > <input value="Отправить" type="submit" id="submitFF2" class="submitF"> <div class="result">Результат</div> </form> <script> $(function(){ 'use strict'; $('#prodat').on('submit', function(e){ e.preventDefault(); var fd = new FormData( this ); $.ajax({ url: 'send.php', type: 'POST', contentType: false, processData: false, data: fd, success: function(msg){ if(msg == 'ok') $(".result").text("отправлено"); } }); }); }); </script> Запускаю, прикрепляю, отправляю, письмо получаю, файл не получаю. Ну логично: откуда phpmailer знать, как у меня называется мой прикреплятор (fileFF) . Поэтому нужно что-то еще дописать. Подскажите, что нужно еще дописать, чтобы получить файлы?
PHP: $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name Это для примера?
Вот хороший пример, если будет непонятен пиши, https://github.com/PHPMailer/PHPMai...01df0/examples/send_multiple_file_upload.phps Там со строки 17 до 25 вставляем в твой код на место 20 21 строчек потом в ставленом коде меняем userfile на fileFF, и всё возможно заработает
ну ё*ана! работает!!! Теперь подскажите пожалуйста, какие файлы не нужны в 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 // ???
В итоге: class.smtp.php class.phpmailer.php PHPMailerAutoload.php и мой файл send.php с настройками (который, наверно, тоже можно засунуть какой-нибудь class.smtp.php или PHPMail....php) send.php таков: PHP: <?php require 'PHPMailerAutoload.php'; $mail = new PHPMailer; //$mail->SMTPDebug = 3; $mail->isSMTP(); $mail->Host = 'smtp.yandex.ru'; // Если используем яндекс $mail->SMTPAuth = true; $mail->Username = '****'; // ваш логин в яндексе (именно логин, а не полная почта) $mail->Password = '****'; // пароль в яндексе $mail->SMTPSecure = 'ssl'; $mail->Port = 465; $mail->setFrom('****@yandex.ru', 'Имя отправителя'); // ваш email в яндексе $mail->addAddress('mail@****.ru'); // email того, кому отправляем // отправка файлов. Нужно изменить userfile на свой name , который указан в input $mail->addAttachment('/var/tmp/file.tar.gz'); $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); for ($ct = 0; $ct < count($_FILES['userfile']['tmp_name']); $ct++) { $uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['userfile']['name'][$ct])); $filename = $_FILES['userfile']['name'][$ct]; if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $uploadfile)) { $mail->addAttachment($uploadfile, $filename); } else { $msg .= 'Failed to move file to ' . $uploadfile; } } $mail->isHTML(true); $mail->Subject = 'Заголовок письма'; $mail->Body = 'Текст письма'; if(!$mail->send()) { echo 'Message could not be sent.'; // если письмо не отправлено echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent'; // если письмо отправлено } Нет. нужно всё таки полный гайд написать для таких, как я...
Если охота, можно аутолоад тоже исключить, и подключить оставшиеся два файла вручную. 20 и 21 строчка - аттач несуществующих файлов. Загруженные через форму файлы аттачатся в 26 строке.
Да. Еще лучше стало. Вместо PHP: require 'PHPMailerAutoload.php'; Пишем PHP: require 'class.phpmailer.php'; require 'class.smtp.php'; И удаляем к черту PHPMailerAutoload.php
А потом удалить все комментарии, которых там более, чем достаточно. Кстати, как удалить комментарии вида /** */ ?
ну можно, это, конечно, хорошо) но как? я, к примеру, на sublime сижу. Поиск мне позволяет найти только определённый текст. найти /** */ я не могу
да не я про автоматизацию процесса))))) глазами смотри)))))) прям в голос))) хочется нажать на кнопку и получить результат)
Начитался тут всяких всяких примеров, так и не могу воткнуть, как же мне отправить почту с вложениями. Картинки допустим я в папку на хосте сохраняю, setlocal поставил, чтобы у меня файлы с кириллическими символами нормально сохранялись. Файлы я на сервер залил, их адреса сохранил в массив, надо отправлять, а как? Чет почитал про PHPMailer, там надо где-то авторизоваться, где-то пишут просто скрипт, который у меня не пока работает, Mail_Mime тут вот еще есть и т.д. Так а я почту могу просто отправить, скриптом, передав заголовки, адрес получателя и указав вложение или такого не быввает, надо бубен покупать?? И еще натыкался что есть ограничения на файлы тип по 25 Мб, а у меня файлы могут быть более 100Мб. Если есть где почитать, скиньте ссылку пожалуйста.
@karmay дык там всё просто ж. Либу эту можно использовать как с локальным почтовым сервером, если настроен (без авторизации), так и с IMAP/SMTP там всякими (вот тут нужна будет авторизация). Обо всяких MIME-типах с либой тебе задумываться не надо, она сама всё сделает как надо. Файлы больше ты не передашь, на это ограничение почтовых серверов есть. Не в либах дело. Большие файлы обычно грузятся куда-нибудь типо гуглдрайва, а в письме просто ссылка прикрепляется. А пример прям тут же есть, зачем далеко ходить: https://github.com/PHPMailer/PHPMailer там и аттачменты и вот это вот всё