PHPMailer — Отправка писем и файлов на почту
Вы также можете использовать вложения в этих инструкциях, хотя PHPMent был обновлен, и инструкции для предыдущих версий не актуальны. Это работает.
Содержание
- О чем эта инструкция.
- 1. Скачиваем PHPMailer
- 2. Удаляем из файлов весь хлам
- 3. Перемещаем файлы в проект
- 4. Создаём файл конфигурации
- Нужно использовать не пароль от самой почты, а “Пароль приложения” . В настройках вашей почты, будь то Gmail, Yandex или Mailru— есть раздел “Пароли приложений” , где вы можете специально создать отдельный сгенерированный пароль для PHPMailer.
- 5. Создаём HTML форму
- 6. Прописываем JavaScript
- 7. Всё (почти)
- 8. Почему ошибка?
О чем эта инструкция.
Это инструкции о том, как добавить PHPMaer на ваш сайт без перезагрузки страницы и отправить письмо, содержащее файл с вложением.
Это инструкции для самой простой базовой версии формы, которая представляет собой чистый JavaScript без анимации и валидации. Вы можете загрузить расширенную версию формы, перейдя по ссылке в конце статьи.
1. Скачиваем PHPMailer
Перейдите на сайт https://github.com/phpmailer/phpmailer, чтобы загрузить последнюю версию.
Для всего файла требуется всего три файла.
Все остальное хранится на github — они вам не нужны, вы можете их удалить.
2. Удаляем из файлов весь хлам
Вы можете пропустить этот пункт. Не требуется.
Файлы, написанные разработчиками phpmailer, содержат огромное количество мусора, состоящего только из комментариев (почему?!). . После удаления комментариев эти три файла имеют вес 196 кб. Вес будет составлять 72 кб. Почти в три раза …
Мы рекомендуем использовать ‘PHP Minifctor’ для удаления всех комментариев в файлах. Вы можете использовать один из них, я взял в руки (первый, который я нашел) http://php-minify.com.
- Откройте файл phpmailer.php.
- Скопируйте содержимое файла
- Вставьте форму на сайт PHP-Minify и нажмите «Сжать».
- Сохраните результаты снова в новом файле с тем же именем
Повторите процедуру для всех трех файлов.
Например, файл Exception.php
3. Перемещаем файлы в проект
А теперь поместите эти три файла в наш фрагмент. Мы создали специальную папку для этих файлов под названием Phpmaer
4. Создаём файл конфигурации
С этим содержимым мы создаем файл send.php
Здесь вам нужно отредактировать эти поля под свои нужды.
Нужно использовать не пароль от самой почты, а “Пароль приложения” . В настройках вашей почты, будь то Gmail, Yandex или Mailru— есть раздел “Пароли приложений” , где вы можете специально создать отдельный сгенерированный пароль для PHPMailer.
Сохраните этот файл send.php и поместите его в корень вашего сайта
В данном примере показана конфигурация для Яндекс. Вы можете воспользоваться почтовым грузом. Чтобы изменить сообщение о доставке, например, на. Gmail — вам нужно изменить эти поля:.
$mail->Host = ‘smtp.gmail.com’; // SMTP сервер $mail->SMTPSecure = ‘ssl’; // шифрование $mail->Порт = 465; // Порт.
5. Создаём HTML форму
Теперь давайте поместим эту форму в правильное положение на сайте!
Обратите внимание на OnSubmit. Вторым аргументом должно быть имя файла, которым является send.php.
6. Прописываем JavaScript
Теперь вам нужно разместить эту функцию где-нибудь в вашем коде. Скопируйте его в уже включенный файл пакета или вставьте его после закрывающего ярлыка .
7. Всё (почти)
Теперь ваша форма должна выглядеть следующим образом: .
В случае успеха (или неудачи) появляется сообщение «Сообщение отправлено» или «Ошибка…». вы должны получить всплывающее сообщение от вашего браузера с текстом.
8. Почему ошибка?
Это очень распространенная проблема, о которой можно говорить с абсолютной уверенностью. 60% причины ошибки — гостеприимство, 30% — ваш email, 9% — вы предоставили неверную информацию из своего email, 1% причины — вы гребаный идиот, который решил изменить код, а потом удивляется, почему, черт возьми, все идет не так.
Чтобы выяснить причину, нужно выйти из этой строки кода (// удалить):.
Теперь в браузере нужно открыть консоль (F12) > ‘console’ и отправьте сообщение. Вы должны увидеть новую строку (список), которую необходимо расширить.
Причина: ошибка: сбой аутентификации: неверный пользователь или пароль! Причина: аутентификация не прошла: неверный пользователь или пароль!
Если вы уверены, что в написании почтовых данных нет ошибки, то для этих строк в виде иероглифов нужно отправить два символа.
Через некоторое время они ответят, и почта начнет успешно отправляться.
После того, настоятельно рекомендую снова закомментировать строчку c $mail->smtpdebug = 2
Отправить HTML-письмо PHP с вложениями
Если вы действительно хотите узнать, как форматировать Интернет-сообщение, вам следует обратиться к его запросу на комментарии (он же RFC). Тот, который определяет «Многоцелевые расширения почты Интернета — формат тел сообщений Интернета», — это RFC2045, выпущенный в ноябре 1996 года.
Обычно сообщение содержит заголовок и тело. Заголовок определяет тип сообщения, способ его форматирования, некоторые другие поля, которые отличаются от одного типа к другому.
Тело состоит из разных сущностей. Сущность может быть, например, просто текстом, таким как «Привет!» но также может быть изображением, вложением, чем угодно.
ПРИМЕЧАНИЕ В следующих примерах все, что заключено в скобки (например, {hello}), должно быть заменено вашим реальным значением. Любая новая строка на самом деле является CRLF (т.е. ASCII 13 + ASCII 10). Там, где вы видите, к нему прилипают два CRLF. Это был бы худший момент, чтобы показать, насколько вы креативны.
В основном для сообщения электронной почты с вложениями заголовок должен выглядеть так:
MIME-версия: 1.0 Кому: {email@domain} Тема: {тема письма} X-приоритет: {2 (высокий)} Content-Type: составной/смешанный; граница = "{смешанные границы}"
В приведенном выше примере {mixed-boudary} может быть любым уникальным хеш-значением, например 000008050800060107020705. Остальные значения говорят сами за себя.
Теперь каждый раз, когда мы хотим добавить к сообщению новый объект (например, тело сообщения, изображение, вложение), мы должны сообщить почтовому агенту, что появится новый раздел , т.е. чтобы префикс этого объекта со значением {mixed-boundary}. Мы называем это «открыть границу». Обратите внимание, что, открывая границу, мы не вставляем эту границу, как было определено изначально, мы используем еще 2 знака минуса впереди, например —{mixed-boudary}. Когда мы закрываем границу, мы действуем аналогичным образом, за исключением того, что мы должны использовать другие 2 знака минус в конце, например —{mixed-boudary}—
--{смешанные границы} содержимое сущности --{смешанные границы}--
Поскольку почтовый агент должен понимать, какой тип имеет содержимое нашего нового вставленного объекта, мы должны объявить это сразу после открытия границы. Объявление — это просто заголовок, который содержит только те параметры/значения, которые совместимы с сущностью.
Для содержимого тела HTML мой заголовок сущности будет выглядеть так:
Content-Type: text/html; кодировка = utf-8 Контент-передача-кодирование: 7 бит
, поэтому все тело (заключенное в границы) в итоге будет выглядеть так:
--{mixed-boudary} Тип содержимого: текст/html; кодировка = utf-8 Контент-передача-кодирование: 7 бит <тело bgcolor="#FFFFFF" текст="#000000"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Пеллентеск вел дапибус арку. Duis quam dui, ornare non mi nec, luctus faucibus massa. Вивамус quis purus in erat euismod ullamcorper vitae eget dolor. Аликвам временная эра accumsan, consectetur ex et, rhoncus risus. тело>
Если необходимо вставить другой объект, мы действуем точно так же, как описано выше. Когда больше нет данных для добавления к сообщению, мы закрываем смешанную границу, т.е. CRLF + —{смешанные границы}—.
Если по какой-либо причине объект должен быть вставлен с альтернативным представлением (например, основное сообщение вставляется как в текстовом формате, так и в формате HTML), то содержимое объекта должно быть объявлено с типом содержимого multipart /alternative (хотя глобальный заголовок multipart/mixed все еще остается!). Каждое альтернативное представление будет заключено в эту новую границу.
Полный пример ниже:
MIME-версия: 1.0 Кому: {email@domain} Тема: {тема письма} X-приоритет: {2 (высокий)} Content-Type: составной/смешанный; граница = "{смешанные границы}" --{смешанные границы} Content-Type: составной/альтернативный; граница = "{альтернативная граница}" --{альтернативная граница} Content-Type: текстовый/обычный; кодировка=utf-8; Контент-передача-кодирование: 7 бит Lorem ipsum dolor sit amet, consectetur adipiscing elit. Пеллентеск вел дапибус арку. Duis quam dui, ornare non mi nec, luctus faucibus massa. Вивамус quis purus in erat euismod ullamcorper vitae eget dolor.Аликвам временная эра accumsan, consectetur ex et, rhoncus risus. --{альтернативная граница} Тип содержимого: текст/html; кодировка=utf-8; Контент-передача-кодирование: 7 бит <тело bgcolor="#FFFFFF" текст="#000000"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Пеллентеск вел дапибус арку. Duis quam dui, ornare non mi nec, luctus faucibus massa. Вивамус quis purus in erat euismod ullamcorper vitae eget dolor. Аликвам временная эра accumsan, consectetur ex et, rhoncus risus. тело> --{альтернативная граница}-- --{смешанные границы} Content-Type: приложение/pdf; имя = "мой файл.pdf" Контент-передача-кодирование: base64 Content-Disposition: вложение; имя файла="мой файл.pdf" JVBERi0xLjINOCAwIG9iag08PCAvTGVuZ3RoIDkgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl ID4+DXN0cmVhbQ1oQ51bbY/cNg7+BfsfhAUO11w3riW/B7gPaZEAAdpcm06RL8EBzoyn68uM vZ3xZLv//khKsuUxNaMNiiabpUg+pKiHsmxJECN/UsgiilP4ab2/+XF1I81vszSqclHIOEpj sdrf/PC2EFVUpmK1vXkZxVKs1uJlJJVYPYrvPra7XVvvxYdIrE7rL83hhVj97+bNyjUoFam7 FnOB+tubGI3FZEkwmhpKXpVRnqJi0PCyjBJ1DjyOYqWBxxXp/1h4X+ov9abZt434pV0feoG/ ars/xU/9/qEZmm7diJ+abmgOr0TGeFNFEuXx5M4B95Idns/QAaJMI1IpKeXi9+ZhaPafm4NQ cRwzNpK0iirlRvisRBZpVJa+PP51091kkjBWBXrJxUuZRjIXh0Z8FN3MnB5X5st5Kay9355n --{смешанные границы}--
СОВЕТЫ
Используйте предпочитаемый почтовый клиент (у меня Thunderbird) и отправьте на себе одно сообщение только в виде обычного текста, одно только HTML, одно смешанное и затем каждый из предыдущих, но с одним прикрепленным файлом. Когда вы получаете сообщение, просто изучите его источник (Просмотр -> Сообщение источник).
@Edit: очень хорошо задокументированный пример + пример PHP можно найти здесь
Как отправить почту (sendmail) для php mail()?
Еще 10 обсуждений, которые могут вас заинтересовать
1. UNIX для опытных и опытных пользователей
У меня проблемы с работой почты на сервере Red Hat. Сначала я получил это сообщение. Диагностический код: X-Postfix; доставка временно приостановлена: подключиться к :25: в соединении отказано Затем добавил порт в мой брандмауэр. Затем я временно отключил selinux. Затем я скопировал этот файл… (1 ответ)
Обсуждение начато: cokedude
2. UNIX для чайников Вопросы и ответы
Как в Solaris 10, так и в RHEL мы хотели бы настроить sendmail таким образом, чтобы электронная почта, отправляемая с сервера, направлялась только в определенный домен. Например. Мы хотим, чтобы наш сервер отправлял почту ТОЛЬКО на
Обсуждение начато: sk2code
3. Программирование оболочки и создание сценариев
Здравствуйте, Я использую Centos-6.2 У меня есть сервер apache, php5 в моей системе, и я хочу отправлять почту, используя sendmail в моей системе. когда я пытаюсь отправить почту из оболочки, в это время почта успешно отправляется на соответствующий адрес () но когда я пытаюсь отправить его через веб-браузер, я не могу отправить его…. (1 ответ)
Обсуждение начато: Kiran ursal
4. UNIX для продвинутых и опытных пользователей
Привет всем, Я хочу отправить письмо для нужд своего бизнеса из учетной записи Outlook на сервер unix (HP-UX), но я не отправляю почту. Хотя я могу отправить с сервера unix в свою учетную запись Outlook, я не могу отправить из Outlook в Unix. Как я могу этого добиться? Как я могу отправить письмо из моего Outlook или другого… (2 ответа)
Обсуждение начато: igelegin
5. UNIX для продвинутых и опытных пользователей
У меня есть солнечные машины с ОС Solaris 9 и 10. Теперь мне нужно отправить почту с машин на мою учетную запись Outlook. У меня есть IP-адрес почтового сервера OUTLOOK. Теперь, какие настройки мне нужно сделать на машинах Solaris, чтобы я мог использовать mailx или sendmail. на самом деле я пытаюсь автоматизировать высокий… (2 ответа)
Обсуждение начато: amitranjansahu
6. AIX
Привет, Я столкнулся со странным поведением (для меня и коллег). Когда я останавливаю sendmail на простой тестовой машине AIX 5.3 (определенно, что процесс sendmail больше не запущен), я по-прежнему могу отправлять почту на удаленные адреса с помощью команды mail. Я попробовал это на другом компьютере, который не является… (6 ответов)
Обсуждение начато: zaxxon
7.
UNIX для чайников Вопросы и ответыПривет Приведенный ниже сценарий работает, когда мы отправляем html в виде вложения. Можете ли вы указать, как отправлять данные smae в виде таблицы непосредственно по почте, а не в приложении к почте. кот Сотрудник.sql ВЫКЛЮЧИТЬ ПРОВЕРКУ УСТАНОВИТЬ РАЗМЕР СТРАНИЦЫ 200 SET MARKUP HTML ON SPOOL ON PREFORMAT OFF ENTMAP ON — HEAD… (0 ответов)
Обсуждение начато: mani_isha
8. Программирование оболочки и создание сценариев
Здравствуйте, Я новичок в Perl, и мне нужно создать сценарий, который будет читать файл, извлекать имя из файла и отправлять электронную почту. Как я могу использовать следующий оператор awk в сценарии perl? grep UNIXadmins /root/mail.conf | awk ‘{напечатать $2}’ и используйте вывод для отправки электронной почты. Любая помощь будет… (1 ответ)
Обсуждение начато: DC Heard
9. UNIX для чайников Вопросы и ответы
Использование команды Mailx, т.