Отправка файла по e-mail на php

Содержание:

SMTP с авторизацией по протоколу SSL. Введение

Эта статья является продолжением ранее написанной, на тему Отправка писем через SMTP с авторизацией на php. В предыдущей статье я выкладывал исходники класса, который писал для своих нужд, работа которого заключалась в отправке писем через smtp Яндекса. Но статья стала популярной и многие читатели блога, стали присылать вопросы по работе класса. Главной проблемой стала работа через протокол SSL. А в последнее время эта проблема стала возникать еще чаще, поскольку все популярные почтовые сервера перешли на работу по защищенному протоколу SSL. В связи с этим я немного дописал класс, он теперь способен работать и по SSL, обновленную версию можете скачать тут.Обновление 13.03.2018: Класс обновился, подробнее тут: Новая версия класса SendMailSmtpClass

Отправка почты php через SMTP-настройка скрипта

Шаблон простенького скрипта который можно скопировать чуть ниже, или скачать еще на сотнях подобных сайтов, необходимо отредактировать.

<?php
 mail('to', 'subject', 'message');
 ?>

Для начала нужно поменять в шаблоне скрипта некоторые значения.to — меняем на почтовый адрес куда будет отправлено почтовое сообщение.subject — тема письмаmessage — само сообщение, или тело письма.

Пример моего скрипта:

<?php
 mail('bunakov@mail.ru', 'Тема письма', 'Отправка почты через локальный сервер openserver');
 ?>

Можно конечно немного расширить функционал и сделать так, чтобы скрипт выдавал сообщение об отправки почты. Хоть на самом деле отправку производит именно SMTP-сервер, а скрипт лишь формирует сообщение.

Для примера можно написать так:

<?php
 if(mail('bunakov@mail.ru', 'Тема письма', 'Отправка почты через локальный сервер openserver') ) {echo'Письмо успешно отправлено';
 }else{echo 'Ошибка';}
 ?>

Все подставленные значения должны быть в кавычках, иначе скрипт выдаст ошибку. После этого можно сохранить скрипт в папку локального сервера.

Например: domains/send/index.php и приступать к настройке отправки почты через SMTP opensrerver.

Как настроить подключение SMTP

Чтобы настроить нормальную отправку писем, нужно установить плагин WP Mail SMTP. Он позволяет переконфигурировать стандартный PHP Mailer так, чтобы была возможность подключаться к SMTP серверу. Также, советую использовать его, если вы пользуетесь локальным сервером.

Настройка WP Mail SMTP

А вот описание опций

  • From Email — email отправителя. Вводим логин от почты полностью как на изображении вверху
  • From Name — Имя отправителя. Можете поставить сюда что хотите, например, адрес вашего сайта
  • Mailer — выбираем
  • Return Path — оставляем пустым
  • SMTP Host — адрес SMTP сервера. Вводим
  • SMTP Port — порт SMTP сервера. Вводим
  • Шифрование— тип шифровки писем. Выбираем
  • Авторизация— авторизация. Выбираем
  • Username — логин от почты. Значение должно совпадать с From Email
  • Password — пароль от почты

Отправка с вложением

Давайте посмотрим, как отсылать сообщения, включающие в себя прикреплённый файл. Воспользуемся для этого функцией sendMailAttachment():

<?
$file = "./files/test.txt"; // прописывается путь к файлу, который следует отправить
$mailTo = "test@gmail.com"; // адрес отправителя
$from = "test@files.com"; // от кого письмо
$subject = "Test file"; // тема
$message = "Текст с вложением"; // содержимое письма
$r = sendMailAttachment($mailTo, $from, $subject, $message, $file); // отправка письма c вложением
echo ($r)?Отправлено':'Ошибка. Не отправлено!';
//$r = sendMailAttachment($mailTo, $from, $subject, $message); // отправка без вложения
//echo ($r)?Отправлено''Ошибка. Не отправлено!';
?>

Как видите, работа функции mail в PHP совсем несложна. При этом мы рассмотрели лишь наиболее распространённые ошибки, возникающие при её реализации. Впрочем, повысить свои навыки PHP-программирования вы всегда сможете на наших курсах.

Отправка письма с вложением с помощью PHPMailer

Здесь всё довольно просто, нужно лишь использовать метод addAttachment. Приведу пример, заодно продемонстрировав еще несколько дополнительных возможностей:

// Подключаем библиотеку PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer/PHPMailer.php';
require 'PHPMailer/Exception.php';

// Создаем письмо
$mail = new PHPMailer;
$mail->CharSet = 'UTF-8';
$mail->setFrom('test@test.ru', 'Иван Иванов');     // от кого
$mail->addReplyTo('test@test.ru', 'Иван Иванов');  // обратный адрес
$mail->addAddress('test@ya.ru', 'Вася Петров');    // кому
$mail->Subject = 'Тест';                           // тема
$mail->msgHTML(file_get_contents('contents.html'), __DIR__);  // получаем "тело" письма из файла
$mail->AltBody = 'Письмо обычным текстом';  // письмо обычным текстом, если клиент не поддерживает html
$mail->addAttachment('my_file.txt');        // прикрепляем один файл
$mail->addAttachment('phpmailer.jpg');      // прикрепляем второй файл

// Отправляем
if ($mail->send()) {
  echo 'Письмо отправлено!';
} else {
  echo 'Ошибка: ' . $mail->ErrorInfo;
}

Адресов получателей можно добавить несколько с помощью addAddress. Или, если необходимо, можно наоборот, очистить все адреса получателей методом clearAddresses(). Очистить все вложения можно с помощью clearAttachments().

Так же можно использовать AddEmbeddedImage чтобы добавить в письмо вложение (обычно изображения), которое предназначено для использования в html-коде и не будет доступно для скачивания. Пример использования картинки в письме, не доступной для скачивания:

// Подключаем библиотеку PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
require 'PHPMailer/PHPMailer.php';

//Создаем письмо
$mail = new PHPMailer;
$mail->IsHTML(true);
$mail->setFrom('test@test.ru', 'Иван Иванов');
$mail->addAddress('test@ya.ru', 'Вася Петров');
$mail->Subject = 'Test';
$mail->AddEmbeddedImage('phpmailer.jpg','testImage');
$mail->Body = '<p>Изображение в html-коде <img src="cid:testImage"></p>';

// Отправляем
$mail->send();

Таким образом, вы можете отправлять письма с изображениями, которые есть только в теле письма, но их нельзя скачать как вложение. Эти изображения можно использовать в любом месте html-кода письма, нужно лишь указывать вместо url-адреса cid изображения, который вы использовали в AddEmbeddedImage.

Популярные выражения со словом «стакан»

Names 4 Brands

Формат почтового сообщения

Для того чтобы быть уверенным, что ваше сообщение отправляется действительно верно, необходимо иметь по меньшей мере базовые представления о формате почтового сообщения. Формат почтового сообщения описан в нескольких стандартизирующих документах, основными из которых являются RFC 822 (описывает формат передачи простого текста на английском языке) и RFC 2045 (описывает расширения этого формата для передачи произвольных данных).

Ниже приведен самый простой пример текстового сообщения, составленного в соответствии с приведенными выше стандартами и готового к отправке:

Именно в таком формате клиент для отправки почты (MS Outlook, TheBat! или Mozilla Thunderbird) подготавливает сообщение, а затем отправляет его получателю (кстати, большинство почтовых клиентов позволяют просмотреть исходный код сообщения, в Mozilla Thunderbird, например, для этого служит комбинация клавиш ). Задача нашего скрипта на языке PHP — добиться точно такого же формата письма.

Как видно из приведенного выше примера, электронное письмо содержит две части: в одной (верхней) размещаются заголовки, а в другой (нижней), собственно, текст письма. Отделены эти части друг от друга пустой строкой. Заголовки состоят из строк, в которых содержится тема письма (Subject), имя и адрес отправителя (From), получателя (To) и другая информация. В самом простом случае каждая строка содержит пару «ИмяЗаголовка: ЗначениеЗаголовка». Особенно необходимо подчеркнуть, что, согласно стандартам, в заголовках ни при каких обстоятельствах не должны содержаться русские символы.

Установка и настройка почтового сервера

Установка Postfix

apt-get update && apt-get install postfix

В процессе установки будут заданы вопросы относительно настройки

Важно выбрать тип Internet Site. Это необходимо сделать для того, чтобы Postfix сгенерировал файл и сразу начал работу

В противном случае, Вам необходимо будет настраивать его вручную.

Установка Sendmail

Sendmail устанавливается примерно так же

apt-get update && apt-get install sendmail

Потом его сконфигурировать

sendmailconfig

После всего этого перезагрузить сервер

reboot

Что делать, если email не доходит

  1. Проверить правильность адреса, куда почта должна придти;
  2. Проверить папку Спам;
  3. Выждать пару минут.

Если по истечению времени письмо таки не дошло в почтовый ящик, хотя плагин просигнализировал об успешной отправке сообщения, возможно, хостинг не настроен должным образом.
Возможно, php просто не может отправлять письма.

Как проверить отправку email в PHP

3 команды, которые нужно ввести в консоль SSH последовательно:

php -a
mail ('', "Test Mailer", "Test mail from php mailer");
exit;
  1. Создать файл ;
  2. Прописать туда:
    <?php mail ('', "Test Mailer", "Test mail from php mailer");
  3. Запустить файл командой
    php -f test_email.php

Если на данном этапе возникает ошибка, попробуйте переустановить и правильно сконфигурировать Postfix или Sendmail.

Что делать, когда функция mail в PHP не отправляет письма?

Даже если учесть всё вышеперечисленное, mail в PHP иногда не работает, причём на локальном сервере всё отправляется нормально. Одна из причин — некорректная настройка функции непосредственно на хостинге. Для решения проблемы рекомендуется обратиться к конфигурационному файлу php.ini и посмотреть на параметры функции «disable_functions». Дело в том, что нужная вам функция mail() может не работать, если она занесена в php.ini в раздел запрещённых (disable_functions).

Идём дальше. Мы можем проверить работоспособность, написав простой код и разместив его в корневом каталоге созданного веб-проекта:

<?
print mail("name@my.ru","header","text");
?>

Если всё функционирует верно, на экране браузера мы увидим цифру один — «1». Её нам вернёт «print» после выполнения. Что касается кодировки, то рекомендуется использовать UTF-8.

Simple Mail Transmission Protocol (SMTP)

On a hosted server, the SMTP settings would have already been set.

The SMTP mail settings can be configured from “php.ini” file in the PHP installation folder.

Configuring SMTP settings on your localhost Assuming you are using xampp on windows, locate the “php.ini” in the directory “C:\xampp\php”.

Open it using notepad or any text editor. We will use notepad in this example. Click on the edit menu

Click on Find… menu

The find dialog menu will appear

Click on Find Next button

  • Locate the entries
    • ; XAMPP: Don’t remove the semi column if you want to work with an SMTP Server like Mercury
    • ; SMTP = localhost
    • ; smtp_port = 25
    • Remove the semi colons before SMTP and smtp_port and set the SMTP to your smtp server and the port to your smtp port. Your settings should look as follows
      • SMTP = smtp.example.com
      • smtp_port = 25
      • Note the SMTP settings can be gotten from your web hosting providers.
      • If the server requires authentication, then add the following lines.
        • auth_username = This email address is being protected from spambots. You need JavaScript enabled to view it.
        • auth_password = example_password
        • Save the new changes.
        • Restart Apache server.

Php Mail Example

<?php     
$to_email = 'name @ company . com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply @ company . com';
mail($to_email,$subject,$message,$headers);
?>

Output:

  Note: the above example only takes the 4 mandatory parameters.

Почему Windows 10 выходит из сна, как устранить такую самостоятельность

В первую очередь (логично) узнать кто или что являлось причиной включения ноутбука/компьютера. Об этом можно узнать, есть открыть  журналы Windows (современная ОС многие свои действия записывает в журнал, в том числе, время включения/выключения).

И так, чтобы открыть этот журнал, необходимо сначала  зайти в панель управления Windows в раздел «Система и безопасность», далее перейти во вкладку «Администрирование» (см. скрин ниже ).

Система и безопасность, Администрирование

После чего открыть ссылку «Просмотр событий».

Просмотр событий (во вкладке администрирование)

Здесь нужно в меню слева выбрать «Журналы Windows/Система».

Далее перед вами должны предстать сотни событий (по умолчанию они отсортированы по дате появления)

Нам нужно посмотреть те, в графе которых «Источник» содержится причина «Power-Troubleshooter» (также обратите внимание на время выхода. Благодаря этому, сможете найти нужное событие)

Когда откроете событие — увидите источник выхода. По сути, это и есть причина, почему ваш ноутбук/ПК пробудился.

Источник выхода — расширяемый хост-контроллер Intel(R) USB 3.0

Например, если в источнике выхода содержится «Кнопка питания» — значит кто-то вывел ноутбук из режима сна с помощью этой кнопки.

Еще один пример // Источник выхода — кнопка питания

Возможные варианты в источнике выхода:

  1. кнопка питания — под это иногда подпадает не только непосредственно сама кнопка, но и открытие/закрытие крышки ноутбука. Добавлю, что возможно сбои в тех случаях, когда у вас проблема с мат. платой или с самой кнопкой;
  2. устройство, название которого содержит «HID» — это либо мышка, либо клавиатура, либо еще что-то подобное (джойстик, например). Отмечу, что часто эти устройства могут срабатывать «автоматически»: хватит даже совсем небольшой вибрации вашей мышки (например, если положите что-то на стол с ней);
  3. таймеры — обычно подобное происходит, если у вас в планировщике заданий установлена какая-то задача (например, обновить систему!);
  4. сетевой адаптер — этот источник выхода говорит о том, что ваш адаптер настроен так, чтобы ПК пробуждался при подключениях к нему;
  5. хост-контроллеры (вариантов названий может быть много) — причина обычно в подключенных устройствах к USB портам;
  6. нет данных — самый неприятный источник выхода, который также встречается в журнале. В этом случае порекомендую все равно проделать нижеперечисленные рекомендации (в большинстве случаев помогает решить проблему).

Как найти и запретить устройствам выходить из режима сна

Для того, чтобы увидеть все устройства, которым разрешено будить ноутбук/компьютер, откройте  командную строку (нажмите сочетание Win+R, введите команду cmd и нажмите Enter).

В командной строке введите одну команду: powercfg -devicequery wake_armed 

В моем случае нашлось одно оборудование — HID-совместимая мышь.

HID-совместимая мышь будит ПК

Далее нужно открыть  диспетчер устройств (Win+R, затем команду devmgmt.msc).

В диспетчере устройств найдите то устройство, которому хотите запретить пробуждать ПК (в моем случае HID-совместимая мышь). Щелкните по нему правой кнопкой мышки и выберите свойства.

Свойства HID-совместимой мышки // Диспетчер устройств

В свойствах во вкладке «Управление электропитанием» снимите галочку с разрешения выводить компьютер из ждущего режима. Сохраните настройки, и на этом, вообще-то всё, дальше можно пользоваться компьютером спокойно…

Снимаем галочку с разрешения будить

Добавлю, если у вас несколько устройств — можете поочередно также запретить им всем выводить ПК/ноутбук из ждущего (спящего) режима. Тогда в итоге вы сможете сделать так, что ваш ноутбук будет выходить из него только с помощью кнопки питания.

Как отключить таймеры пробуждения (чтобы никакое обновление или проверка не могла включить ПК)

Для этого необходимо зайти в настройки электропитания (панель управления, затем раздел «Оборудование и звук/Электропитание /Настройки схемы электропитания (текущей схемы!)»).

Далее откройте дополнительные настройки электропитания (см. скрин ниже).

Изменить доп. параметры питания

В них необходимо открыть вкладку «Сон/Разрешить таймеры пробуждения» и поставить значения «Отключить» (см. скрин ниже ). Сохраните настройки и перезагрузите ПК.

Отключаем таймеры пробуждения

Теперь при уходе в спящий режим — никакой планировщик заданий не должен будить ваше устройство!

Также, на всякий случай, откройте панель управления Windows по следующему адресу:

Проверьте, не стоит ли там галочка, разрешающая пробуждать ПК на автоматическое обслуживание в запланированное время (снимите ее, если эта опция у вас включена).

Автоматическое обслуживание

Кстати, поздравляю всех с 23 февраля!

На этом пока всё. Всем всего хорошего!

Первая публикация: 23.02.2018

Корректировка: 5.06.2020

Функция mail()

Отправка почтовых сообщений в большинстве скриптов выполняется системной функцией . Описание синтаксиса функции mail всегда можно найти в оригинальном руководстве. Эта функция принимает всего 5 параметров, из которых три являются обязательными, а остальные два — опциональными:

  • — Электронный адрес получателя сообщения
  • — Тема сообщения
  • — Тело сообщения
  • — дополнительные заголовки
  • — дополнительные параметры

На самом деле функция просто формирует строку следующего вида:

а затем передает ее на обработку стандартной UNIX’овой команде отправки почты, которая носит имя . Сравнивая то, что выдает , с тем, что должно получиться (см. пример выше), можно составить точный план подготовки переменных для передачи в функцию:

  1. Закодировать поле Subject с использованием base64, как в примере выше.
  2. Закодировать поле To.
  3. В случае необходимости создать , самостоятельно сформировав все необходимые заголовки (например, добавив поле «From:») и разделив эти заголовки парой символов «\r\n».

После этого сформированный набор параметров можно передавать на вход функции mail().

SMTP с авторизацией по протоколу SSL. Яндекс

Для работы с почтовым сервером Яндекс ни чего не изменилось, единственное, что при вызове класса, необходимо указывать ссылку на хост, работающий через SSL и изменился номер порта: был 25, стал 465. Выглядит код отправки теперь вот так:

// пример использования
require_once "SendMailSmtpClass.php"; // подключаем класс
 
$mailSMTP = new SendMailSmtpClass('zhenikipatov@yandex.ru', '****', 'ssl://smtp.yandex.ru', 'Evgeniy', 465);
// $mailSMTP = new SendMailSmtpClass('логин', 'пароль', 'хост', 'имя отправителя');
 
// заголовок письма
$headers= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n"; // кодировка письма
$headers .= "From: Evgeniy <admin@vk-book.ru>\r\n"; // от кого письмо
$result =  $mailSMTP->send('zhenikipatov@yandex.ru', 'Тема письма', 'Текст письма', $headers); // отправляем письмо
// $result =  $mailSMTP->send('Кому письмо', 'Тема письма', 'Текст письма', 'Заголовки письма');
if($result === true){
    echo "Письмо успешно отправлено";
}else{
    echo "Письмо не отправлено. Ошибка: " . $result;
}

Грамотное использование русских символов в заголовках почтового сообщения

Итак, в явном виде русский текст в заголовке присутствовать не должен, поэтому для того чтобы включить его туда, этот текст предварительно нужно закодировать. Стандарты описывают способ кодирования «запрещенных» символов. Общий формат выглядит так:

Кодировка может быть любой из списка «windows-1251», «koi8-r», «utf-8» и т.д. Во всех случаях, как правило, кодировка сообщения будет совпадать с кодировкой, в которой работает сайт. То есть в большинстве случаев это будет «windows-1251», реже — «utf-8».

Способ кодирования указывает на то, каким именно образом русские символы будут преобразованы в безопасный набор. Способа определяется два: так называемый «Q-encoding» (обозначается одной буквой «Q») и «Base64» (обозначается одной буквой «B»).

К сожалению, штатной функции, которая могла бы обычную строку преобразовать в Q-encoded текст, в PHP нет, зато есть функция, которая умеет выполнять аналогичное преобразование в Base64. Итак, PHP код правильного создания заголовка темы почтового сообщения может выглядеть следующим образом:

Здесь предполагается, что в переменной у Вас содержится тема почтового сообщения, записанная по-русски в кодировке windows-1251.

Why/When to use the mail PHP

Sending mail using PHP

The PHP mail function has the following basic syntax

<?php
mail($to_email_address,$subject,$message,,);
?>

  HERE,

  • “$to_email_address” is the email address of the mail recipient
  • “$subject” is the email subject
  • “$message” is the message to be sent.
  • “” is optional, it can be used to include information such as CC, BCC
    • CC is the acronym for carbon copy. It’s used when you want to send a copy to an interested person i.e. a complaint email sent to a company can also be sent as CC to the complaints board.
    • BCC is the acronym for blind carbon copy. It is similar to CC. The email addresses included in the BCC section will not be shown to the other recipients.

Что это такое

Mail применяется для отправки сообщений при условии что будут выполняться некоторые правила. Самое главное — эта функция не подходит для пересылки большого числа писем. Потому что после каждой отправки она закрывает, а потом опять открывает соединение с почтовым сервером. Это приведет к перерасходу мощностей на хостинге.

Настройка функции происходит в конфигурационном файле php.ini. В нем прописывают путь к лог-файлам, задают значение порта и так далее.

Mail принимает пять аргументов из которых три — обязательные:

  • Адрес отправителя;
  • Тайтл письма;
  • Текст сообщения.

Например, напишем такие строки кода

<?php
mail("test@yandex.ru", "Заголовок", "Текст сообщения");
?>

Если вы пользуетесь Денвером, то информация, которую вы отправили, сохранится на виртуальном диске Z папке «tmp\!sendmail». Если вы забыли, как установить данный локальный сервер, то советую почитать статью «Как быстро установить Denver».

Описание класса

smtp_on( smtp_server, login, password, , )

  • smtp_server: для соединения с smtp по обычному протоколу указывается сервер в обычном формате, например «smtp.mail.ru».
    Для соединения с сервером по защищенному протоколу, например с gmail.com, нужно добавить перед сервером » ssl://», например «ssl://smtp.gmail.com». Так же не забудьте указать порт, для защищенных соединений он обычно 465.
  • login: логин для авторизации через smtp
  • password: пароль для авторизации smtp
  • port: порт для соединения smtp. Если порт стандартный, можно не указывать, по умолчанию 25
  • timeout: таймаут соединения. По умолчанию стоит 5 секунд. Обычно менять не нужно, но если smtp тормозной или ваш конект к серверу длиный, можно увеличить.

Attach( filename, , , )

filename : путь к файлу на диске
new filename : какое имя будет у файла в письме. если ничего не указать, имя файла останется оригинальным.
mimetype : MIME-тип файла. Если не указать, то тип будет ‘application/x-unknown-content-type’.
disposition : команда для почтового клиента, как ему отображать вложение. inline (по умолчанию), при просмотре письма вложение должно отображаться непосредственно в самом теле письма, например картинка

attachment, вложение не будет отображаться в самом письме, оно будет как прикрепленный файл.
Не все почтовые программы обращают внимание на этот параметр.

Частые ошибки, возникающие при отправке PHP формы с сайта

Первая, наверное самая популярная ошибка, это когда вы видите пустую белую страницу без сообщений. Это означает, что вы допустили ошибку в коде страницы. Вам нужно включить отображение всех ошибок в PHP и тогда вы увидите, где допущена ошибка. Добавьте в код:

Файл send.php должен запускаться только на сервере, иначе код просто не будет работать. Желательно, чтобы это был не локальный сервер, так как он не всегда настроен на отправку данных на внешний почтовый сервер. Если вы запустите код не на сервере, то вам отобразиться код PHP прямо на странице.

Таким образом, для корректной работы я рекомендую поместить файл send.php на хостинг сайта. Там, как правило, все уже настроено.

Еще одна частая ошибка, когда появляется оповещение «Сообщение успешно отправлено», а письмо не приходит на почту. В этом случае нужно внимательно проверить строку:

dum

Защита от спама

Спамеры очень часто для рассылки используют плохо написанные формы отправки почты на PHP. Дело в том, что стандарт допускает использование нескольких получателей, которые могут быть перечислены через запятую в заголовке «To», а также использование произвольного количества специальных заголовков с именем «Сс» (копия) и «Bcc» (скрытая копия). Предположим, что в Вашей форме есть поле темы, которое без изменений транслируется в заголовок «Subject». Для того чтобы отправить произвольное сообщение на тысячу адресов, спамеру достаточно в поле Subject вписать примерно такой текст:

Таким образом отправляемое письмо будет дополнено заголовками «Cc» и почтовая программа, обнаружив все эти заголовки в тексте письма, примется рассылать его всем получателям из списка. Аналогичная ситуация и с переменными и — любое из них при удачном стечении обстоятельств может быть использовано злоумышленниками в своих интересах.

Борьба с этим явлением может вестись двумя способами:

  1. Проверка всего пользовательского ввода и фильтрация опасных символов (т.е символов «\r» и «\n»). Эти символы нужно либо заменять на пробелы, либо отказываться обрабатывать некорректно введенные параметры. Например, замену можно выполнить так:

  2. Выполнение кодирования Base64, помимо прочего, защищает и от спамеров, т.к. «вытягивает» закодированный текст в одну строку.

Отправка писем через функцию mail() с помощью PHPMailer

Если вы хотите отправлять письма со своего хостинга через свой почтовый сервер, то всё довольно просто и будет выглядеть примерно так:

// Подключаем библиотеку PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
require 'PHPMailer/PHPMailer.php';

// Создаем письмо
$mail = new PHPMailer();
$mail->setFrom('test@domain.ru', 'Иван Иванов'); // от кого (email и имя)
$mail->addAddress('test@ya.ru', 'Вася Петров');  // кому (email и имя)
$mail->Subject = 'Тест';                         // тема письма
// html текст письма
$mail->msgHTML("<html><body>
                <h1>Здравствуйте!</h1>
                <p>Это тестовое письмо.</p>
                </html></body>");
// Отправляем
if ($mail->send()) {
  echo 'Письмо отправлено!';
} else {
  echo 'Ошибка: ' . $mail->ErrorInfo;
}  

Как видим, всё довольно просто: подключаем библиотеку, заполняем от кого, кому, тему и текст письма и отправляем. Отправка писем таким способом будет работать только с почтовых адресов вашего домена (если только они не привязаны к другим почтовикам).

Описание

bool mail (string to, string subject, string message ])

Могут помочь и следующие RFC-документы: RFC 1896,
RFC 2045,
RFC 2046,
RFC 2047,
RFC 2048 и
RFC 2049.

mail() возвращает TRUE, если почта была успешно принята для доставки, FALSE в ином случае.

Важно! Обратите внимание, успешно принято для доставки не подразумевает, что почта фактически достигнет предназначенного назначения

Предупреждение!

Windows-реализация mail() во многом отличается от Unix-реализации. Во-первых, она не использует
локальный экзешник для составления сообщений, а работает лишь по прямым сокетам, что означает, что
MTA должен прослушивать сетевой сокет (который может находиться на локальной или
удалённой машине). Во-вторых, специальные шапки/headers вроде From:, Cc:,
Bcc: и Date: не интерпретируются MTA, а разбираются в PHP.PHP < 4.3 поддерживал только header-элемент Cc: (и был чувствительным к регистру).PHP >= 4.3 поддерживает все элементы шапки и нечувствителен к регистру символов.

Пример 1. Отправка почты.

mail("joecool@example.com", "My Subject", "Line 1\nLine 2\nLine 3");

Если передаётся четвёртый строковой аргумент, эта строка вставляется в
конце шапки/header. Обычно это используют для добавления дополнительных
шапок. Несколько дополнительных шапок разделяются символами carriage return и newline.

Пример 2. отправка почты с дополнительными шапками/header.

mail("nobody@example.com", "the subject", $message,
 "From: webmaster@$SERVER_NAME\r\n"
."Reply-To: webmaster@$SERVER_NAME\r\n"
."X-Mailer: PHP/" . phpversion());

Параметр additional_parameters можно использовать для передачи дополнительных параметров программе,
сконфигурированной для использования при отправке почты установкой конфигурации sendmail_path. Например, это можно применять для установки адреса отправителя при
использовании sendmail. Вам может понадобиться добавить пользователя под
которым работает ваш web-сервер, в вашу sendmail-конфигурацию для
предотвращения добавления шапки ‘X-Warning!’ к сообщению, когда вы
устанавливаете отправителя с использованием этого метода.

Пример 3. Отправка почты с дополнительными шапками/headers и установка
дополнительного параметра командной строки.

mail("nobody@example.com", "the subject", $message,
 "From: webmaster@$SERVER_NAME", "-fwebmaster@$SERVER_NAME");

/* получатели */
$to= «Mary »

«, » ; //обратите внимание на запятую
$to .= «Kelly «;

/* тема/subject */
$subject = «Birthday Reminders for August»;

/* сообщение */
$message = ‘

Birthday Reminders for August

Here are the birthdays upcoming in August!

Person Day Month Year
Joe 3rd August 1970
Sally 17th August 1973

‘;

/* Для отправки HTML-почты вы можете установить шапку Content-type. */
$headers= «MIME-Version: 1.0\r\n»;
$headers .= «Content-type: text/html; charset=utf-8\r\n»;

/* дополнительные шапки */
$headers .= «From: Birthday Reminder \r\n»;
$headers .= «Cc: birthdayarchive@example.com\r\n»;
$headers .= «Bcc: birthdaycheck@example.com\r\n»;

/* и теперь отправим из */
mail($to, $subject, $message, $headers);

Windows 7 запускается, но показывает только черный экран и указатель мыши

Лирическое отступление

Прежде чем двигаться дальше, давайте немного вспомним теорию. Во-первых, чтобы отправлять письма нам потребуется SMTP-сервер. Но это не проблема, т. к. он есть практически на всех современных платных хостингах. Во-вторых, для приёма писем нам понадобится POP-сервер. В-третьих, следует понимать, что сам по себе PHP не отправляет сообщение, а лишь передаёт команды приложению sendmail — именно оно занимается отправкой, следовательно, его нужно иметь (если используете Денвер, то данное приложение уже встроено). В-четвёртых, все сообщения помещаются в директорию под названием «tmp/!sendmail».

Настройка конфигурации Windows

В операционной системе Windows необходимо задать в файле php.ini значения двух переменных:

SMTP

Строка, содержащая имя DNS или IP-адрес сервера SMTP, который перенаправляет почту, получаемую от компьютера под управлением Windows, на котором установлена система PHP. Если сервер SMTP находится на том же компьютере, где установлена система PHP, то в качестве значения параметра SMTP необходимо указать localhost.

sendmail_from

Строка, содержащая адрес электронной почты, применяемого по умолчанию отправителя почты PHP (например, mailbot@example.com).

В программное обеспечение сервера IIS4 и последующих версий встроен сервер SMTP, который обладает меньшим набором функций, чем Exchange Server. С этим сервером SMTP удобнее работать, если вам не требуется вся мощь программы Exchange Server.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector