Отправка писем через smtp с авторизацией на php
Содержание:
- Описание класса
- Отправка подписанного и зашифрованного письма через PHPMailer
- Отправка писем через SMTP с помощью PHPMailer на примере Yandex и Google
- Грамотное использование русских символов в заголовках почтового сообщения
- dum
- Sanitizing email user inputs
- Отправка почты через smtp mail ru
- Отправка почты php через SMTP-настройка скрипта
- Бизнес модель сервиса Dropbox
- Что это такое
- Names 4 Brands
- Дополнения
- Защита от спама
- Настройка конфигурации Windows
- Отправка письма с вложением с помощью PHPMailer
- Популярные выражения со словом «стакан»
- Troubleshooting Common PHP Mail and PHPMailer Errors
- Что делать, когда функция mail в PHP не отправляет письма?
- Отправка почты через smtp яндекса
Описание класса
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, вложение не будет отображаться в самом письме, оно будет как прикрепленный файл.
Не все почтовые программы обращают внимание на этот параметр.
Отправка подписанного и зашифрованного письма через PHPMailer
По-умолчанию, PHPMailer шифрует все отправляемые письма. Отключить шифрование письма можно только при отправке писем через SMTP использовав код:
$mail->SMTPSecure = false; $mail->SMTPAutoTLS = false;
Чтобы подписать письмо подписью DKIM, необходимо выполнить несколько действий:
- Сгенерировать приватный (private) и публичный (public) ключи для вашего домена
- Добавить DNS-запись для домена типа TXT с публичным ключом
- Настроить DKIM подпись в PHPMailer перед отправкой письма
Теперь опишу каждый шаг немного подробнее.
Генерация приватного и публичного ключей
Если у вас Linux-хостинг и есть доступ в Shell, то сгенерировать файлы ключей проще простого, нужно выполнить всего 2 команды с обычными правами своего пользователя:
openssl genrsa -out test-private.pem 1024 openssl rsa -in test-private.pem -out test-public.pem -pubout
Соответственно, test-private.pem и test-public.pem — это приватный и публичный ключи. Сохранить их нужно в папке, которая будет не доступна посетителям сайта или кому-то еще кроме вас.
Если нет возможности выполнить команды в shell, тогда чтобы сгенерировать приватный (private) и публичный (public) ключи и сохранить их в файлы, можно воспользоваться следующим кодом:
$domain = 'test.ru'; // ваш домен $privatekeyfile = 'test-private.pem'; // имя файла, в который будет записан приватный ключ $publickeyfile = 'test-public.pem'; // имя файла, в который будет записан публичный ключ if (file_exists($privatekeyfile)) { echo "<p>Using existing keys</p>"; $privatekey = file_get_contents($privatekeyfile); $publickey = file_get_contents($publickeyfile); } else { echo "<p>Create keys</b>"; $pk = openssl_pkey_new( ); openssl_pkey_export_to_file($pk, $privatekeyfile); $pubKey = openssl_pkey_get_details($pk); $publickey = $pubKey; file_put_contents($publickeyfile, $publickey); $privatekey = file_get_contents($privatekeyfile); } echo "<p>Private key (keep this private!):</p><pre>" . $privatekey . "</pre>"; echo "<p>Public key:</p><pre>" . $publickey . "</pre>";
Внимание! Не забудьте убедиться, что папка, в которую будут сохраняться файлы, доступна для записи
Добавление DNS-записи с публичным ключом
DNS-запись нужна, чтобы почтовые серверы, которые будут получать ваши письма, смогли проверить подпись на письме, прочитав DNS-запись вашего домена. Как правило, DNS-запись можно добавить в панели управления вашим доменом, либо в панели управления хостингом. Если не знаете, как добавить запись, обратитесь в поддержку вашего хостинг-провайдера.
Нужно добавить DNS-запись следующего вида:
Имя записи: mail._domainkey.test.ru. (в конце точка «.»)
TTL: 3600 (или какое будет по-умолчанию)
Тип записи: TXT
Значение: v=DKIM1; h=sha256; t=s; p=ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ
В имени записи test.ru нужно заменить на имя вашего домена. Слова «ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ» вы заменяете на текст, который вы получили на предыдущем шаге после «Public key», без «——BEGIN PUBLIC KEY——» и «——END PUBLIC KEY——«, только сам ключ. При этом все строчки ключа нужно соединить в одну длинную строку, чтобы переводов строки не было.
Настройка подписи DKIM в PHPMailer и отправка письма
Теперь осталось лишь сделать несколько настроек PHPMailer перед отправкой письма и оно будет подписано. Думаю, на приведенном примере будет всё понятно:
// Подключаем библиотеку use PHPMailer\PHPMailer\PHPMailer; require 'PHPMailer/PHPMailer.php'; // Создаем письмо $mail = new PHPMailer; $mail->CharSet = 'UTF-8'; $mail->setFrom('test@test.ru'); $mail->addAddress('test@ya.ru'); $mail->Subject = 'Это тест'; $mail->msgHTML('<p>Это тест</p>'); // Настройка DKIM подписи $mail->DKIM_domain = 'test.ru'; $mail->DKIM_private = 'test-private.pem'; $mail->DKIM_selector = 'mail'; // Отправляем $mail->send();
Разумеется, test.ru вы должны поменять на имя своего домена, а test-private.pem на полный путь и имя файла приватного ключа, который был создан на этапе генерации ключей.
Теперь, ваши письма, отправляемые через PHPMailer будут подписаны подписью DKIM вашим приватным ключом.
Отправка писем через SMTP с помощью PHPMailer на примере Yandex и Google
Можно так же отправить письмо через другой почтовик, например, через Яндекс. Код будет выглядеть примерно так:
// Подключаем библиотеку PHPMailer use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; require 'PHPMailer/PHPMailer.php'; require 'PHPMailer/SMTP.php'; // Создаем письмо $mail = new PHPMailer(); $mail->isSMTP(); // Отправка через SMTP $mail->Host = 'smtp.yandex.ru'; // Адрес SMTP сервера $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'login'; // ваше имя пользователя (без домена и @) $mail->Password = 'password'; // ваш пароль $mail->SMTPSecure = 'ssl'; // шифрование ssl $mail->Port = 465; // порт подключения $mail->setFrom('login@ya.ru', 'Иван Иванов'); // от кого $mail->addAddress('test@ya.ru', 'Вася Петров'); // кому $mail->Subject = 'Тест'; $mail->msgHTML("<html><body> <h1>Здравствуйте!</h1> <p>Это тестовое письмо.</p> </html></body>"); // Отправляем if ($mail->send()) { echo 'Письмо отправлено!'; } else { echo 'Ошибка: ' . $mail->ErrorInfo; }
Отправка писем через Google имеет один нюанс: нужно в аккаунте google разрешить доступ ненадежным приложениям. Для этого нужно зайти в свой аккаунт https://myaccount.google.com, перейти в безопасность, зайти в раздел «Ненадежные приложения, у которых есть доступ к аккаунту» и там переключить в «Разрешено». На момент написания статьи это страница https://myaccount.google.com/u/0/lesssecureapps.
Дальше в php-программе отправка писем через PHPMailer происходит аналогично как через yandex, нужно только заменить настройки SMTP так:
$mail->Host = 'smtp.gmail.com'; // Адрес SMTP сервера $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'login'; // ваше имя пользователя $mail->Password = 'password'; // ваш пароль $mail->SMTPSecure = 'ssl'; // шифрование ssl $mail->Port = 465; // порт подключения
Если первый раз запускаете программу отправки через smtp, тогда желательно перед отправкой дополнительно использовать $mail->SMTPDebug = 1; чтобы получать все сообщения клиента и smtp-сервера, т.е. на экран выведется весь процесс подключения, авторизации и т.д., что очень полезно для отладки вашей программы.
Грамотное использование русских символов в заголовках почтового сообщения
Итак, в явном виде русский текст в заголовке присутствовать не должен, поэтому для того чтобы включить его туда, этот текст предварительно нужно закодировать. Стандарты описывают способ кодирования «запрещенных» символов. Общий формат выглядит так:
Кодировка может быть любой из списка «windows-1251», «koi8-r», «utf-8» и т.д. Во всех случаях, как правило, кодировка сообщения будет совпадать с кодировкой, в которой работает сайт. То есть в большинстве случаев это будет «windows-1251», реже — «utf-8».
Способ кодирования указывает на то, каким именно образом русские символы будут преобразованы в безопасный набор. Способа определяется два: так называемый «Q-encoding» (обозначается одной буквой «Q») и «Base64» (обозначается одной буквой «B»).
К сожалению, штатной функции, которая могла бы обычную строку преобразовать в Q-encoded текст, в PHP нет, зато есть функция, которая умеет выполнять аналогичное преобразование в Base64. Итак, PHP код правильного создания заголовка темы почтового сообщения может выглядеть следующим образом:
Здесь предполагается, что в переменной у Вас содержится тема почтового сообщения, записанная по-русски в кодировке windows-1251.
dum
Sanitizing email user inputs
Let’s assume you have to create a contact us form for users fill in the details and then submit.
- Users can accidently or intentional inject code in the headers which can result in sending spam mail
- To protect your system from such attacks, you can create a custom function that sanitizes and validates the values before the mail is sent.
Filter_var function The filter_var function is used to sanitize and validate the user input data.
It has the following basic syntax.
<?php filter_var($field, SANITIZATION TYPE); ?>
HERE,
- “filter_var(…)” is the validation and sanitization function
- “$field” is the value of the field to be filtered.
- “SANITIZATION TYPE” is the type of sanitization to be performed on the field such as;
- FILTER_VALIDATE_EMAIL – it returns true for valid email addresses and false for invalid email addresses.
- FILTER_SANITIZE_EMAIL – it removes illegal characters from email addresses. info\@domain.(com) returns This email address is being protected from spambots. You need JavaScript enabled to view it..
- FILTER_SANITIZE_URL – it removes illegal characters from URLs. http://www.example@.comé returns >http://www.example@.com
- FILTER_SANITIZE_STRING — it removes tags from string values. <b>am bold</b> becomes am bold.
<?php function sanitize_my_email($field) { $field = filter_var($field, FILTER_SANITIZE_EMAIL); if (filter_var($field, FILTER_VALIDATE_EMAIL)) { return true; } else { return false; } } $to_email = 'name @ company . com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail '; $headers = 'From: noreply @ company. com'; //check if the email address is invalid $secure_check $secure_check = sanitize_my_email($to_email); if ($secure_check == false) { echo "Invalid input"; } else { //send email mail($to_email, $subject, $message, $headers); echo "This email is sent using PHP Mail"; } ?>
Output:
Отправка почты через smtp mail ru
Для того, чтобы настроить отправку почты через SMTP mail ru, необходимо просто заменить параметры яндекса на параметры mail ru.
А чтобы не перестраивать каждый раз локальные сервер, лучше всего настроить разные профили openserver. Как это сделать показано в видеоуроке Openserver настройка php с помощью профилей.
В этом случае достаточно будет просто загрузить профиль и все настройки, которые были указаны для данного профиля будут доступны после перезапуска сервера. Очень удобная штука и работает очень просто.
Для каждого профиля (совсем не важно как он будет называться), должны быть сделаны свои настройки, если конечно планируется использование разных по своим параметрам скриптов, cms-систем и приложений. Если нет, то можно обойтись и настройками по умолчанию
Что касается SMTP mail ru, то здесь все эдентично.
Меняются данные яндекса на данные mail ru
Отправка почты 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.
Бизнес модель сервиса Dropbox
Что это такое
Mail применяется для отправки сообщений при условии что будут выполняться некоторые правила. Самое главное — эта функция не подходит для пересылки большого числа писем. Потому что после каждой отправки она закрывает, а потом опять открывает соединение с почтовым сервером. Это приведет к перерасходу мощностей на хостинге.
Настройка функции происходит в конфигурационном файле php.ini. В нем прописывают путь к лог-файлам, задают значение порта и так далее.
Mail принимает пять аргументов из которых три — обязательные:
- Адрес отправителя;
- Тайтл письма;
- Текст сообщения.
Например, напишем такие строки кода
<?php mail("test@yandex.ru", "Заголовок", "Текст сообщения"); ?> |
Если вы пользуетесь Денвером, то информация, которую вы отправили, сохранится на виртуальном диске Z папке «tmp\!sendmail». Если вы забыли, как установить данный локальный сервер, то советую почитать статью «Как быстро установить Denver».
Names 4 Brands
Дополнения
19.10.2014 Иван Ткаченко подсказал, что можно расширить возможности класса и отправлять письмо сразу нескольким получателям, за это ему большое спасибо!
Для отправки нескольким получателям через «,» заменить
Это:
fputs($socket, "RCPT TO: \r\n"); if (!$this->_parseServer($socket, "250")) { fclose($socket); throw new Exception('Error of command sending: RCPT TO'); }
На это:
$email_to_array = explode(',', $mailTo); foreach($email_to_array as $key => $email) { $emails = ltrim($email, ''); fputs($socket, "RCPT TO: <$emails>\r\n"); if (!$this->_parseServer($socket, "250")) { fclose($socket); throw new Exception('Error of command sending: RCPT TO'); } }
05.08.2016 Сегодня в комментарии подсказали по поводу проблемы с кодировкой, спасибо за это Евгению:
«Для тех у кого в теле и сабже полученного письма кракозябры — проверьте кодировку сервера по умолчанию и кодировку в которой написан сам скрипт. У меня windows-1251 так что прежде чем вызывать метод send использую»
$from_user=iconv("windows-1251", "utf-8" ,$from_user); $subject =iconv("windows-1251", "utf-8" , $subject); $message =iconv("windows-1251", "utf-8" , $message);
22.11.2016 Сегодня в комментарий добавили полезный код, который позволяет отправлять, с помощью класса, не только текст, но и файлы. Спасибо большое, за этот код Анжелике. Ниже код:
можно отправлять не только одно письмо но и файлы прикреплять к письму: // пример использования require_once «SendMailSmtpClass.php»; // подключаем класс $mailSMTP = new SendMailSmtpClass(‘xxx@mail.ru’, ‘xxx’, ‘ssl://smtp.mail.ru’, ‘NameSender’, 465); // создаем экземпляр класса // $mailSMTP = new SendMailSmtpClass(‘логин’, ‘пароль’, ‘хост’, ‘имя отправителя’); // заголовок письма $headers= «MIME-Version: 1.0\r\n»; //$headers .= «Content-type: text/html; charset=utf-8\r\n»; // кодировка письма //$headers .= «From: Anjelika \r\n»; // от кого письмо !!! тут e-mail, через который происходит авторизация $subject = «пробуем отправить файл»; $message =»Сообщение в теле письма при отправке файла»; // текст сообщения, здесь вы можете вставлять таблицы, рисунки, заголовки, оформление цветом и т.п. $filename = «имя файла например формата.zip»; // название файла $filepath = «./sending/полный путь к файлу.zip»; // месторасположение файла //исьмо с вложением состоит из нескольких частей, которые разделяются разделителем $boundary = «—-«.md5(uniqid(time())); // генерируем разделитель $headers .= «Content-Type: multipart/mixed; boundary=\»$boundary\»\r\n»; // кодировка письма// разделитель указывается в заголовке в параметре boundary $headers .= «From: NameSender \r\n»; $multipart = «—$boundary\r\n»; $multipart .= «Content-Type: text/html; charset=utf-8\r\n»; $multipart .= «Content-Transfer-Encoding: base64\r\n»; $multipart .= «\r\n»; $multipart .= chunk_split(base64_encode(iconv(«utf8», «windows-1251″, $message))); // первая часть само сообщение // Открыли файл $fp = fopen($filepath,»r»); if (!$fp) { print «Не удается открыть файл22»; exit(); } $file = fread($fp, filesize($filepath)); // чтение файла fclose($fp); $message_part = «\r\n—$boundary\r\n»; $message_part .= «Content-Type: application/zip; name=\»$filename\»\r\n»; $message_part .= «Content-Disposition: attachment\r\n»; $message_part .= «Content-Transfer-Encoding: base64\r\n»; $message_part .= «\r\n»; $message_part .= chunk_split(base64_encode($file)); $message_part .= «\r\n—$boundary—\r\n»; // второй частью прикрепляем файл, можно прикрепить два и более файла $multipart .= $message_part; $result = $mailSMTP->send(‘xxx@xxx.ru’, $subject, $multipart, $headers); // отправляем письмо // $result = $mailSMTP->send(‘Кому письмо’, ‘Тема письма’, ‘Текст письма’, ‘Заголовки письма’); if($result === true){ echo «Письмо успешно отправлено»; }else{ echo «Письмо не отправлено. Ошибка: » . $result; }
Защита от спама
Спамеры очень часто для рассылки используют плохо написанные формы отправки почты на PHP. Дело в том, что стандарт допускает использование нескольких получателей, которые могут быть перечислены через запятую в заголовке «To», а также использование произвольного количества специальных заголовков с именем «Сс» (копия) и «Bcc» (скрытая копия). Предположим, что в Вашей форме есть поле темы, которое без изменений транслируется в заголовок «Subject». Для того чтобы отправить произвольное сообщение на тысячу адресов, спамеру достаточно в поле Subject вписать примерно такой текст:
Таким образом отправляемое письмо будет дополнено заголовками «Cc» и почтовая программа, обнаружив все эти заголовки в тексте письма, примется рассылать его всем получателям из списка. Аналогичная ситуация и с переменными и — любое из них при удачном стечении обстоятельств может быть использовано злоумышленниками в своих интересах.
Борьба с этим явлением может вестись двумя способами:
-
Проверка всего пользовательского ввода и фильтрация опасных символов (т.е символов «\r» и «\n»). Эти символы нужно либо заменять на пробелы, либо отказываться обрабатывать некорректно введенные параметры. Например, замену можно выполнить так:
-
Выполнение кодирования Base64, помимо прочего, защищает и от спамеров, т.к. «вытягивает» закодированный текст в одну строку.
Настройка конфигурации 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.
Отправка письма с вложением с помощью 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.
Популярные выражения со словом «стакан»
Troubleshooting Common PHP Mail and PHPMailer Errors
Errors can occur from time to time while using PHP mail or PHPMailer. Here’s a list of the most common issues and ways how you can fix them.
Gmail Couldn’t Verify That YourDomain.com Sent This Message
If you see this warning when testing a PHP mail script, it could mean one of the following:
- Your SPF record is not enabled. You can find the steps on how to add one here.
- You’ve sent an email from an address that does not exist or does not belong to you. Make sure to use valid SMTP authentication details.
Mail Goes to the Spam Folder
There are various reasons why a PHP mail can turn up as spam. Here are some of the most common ones:
- Misleading or spam-like subject. A few examples of that would be “test” or “testing”, “hello“, “urgent” or anything similar. Make sure that you set a clear intent in your message subject.
- You’re using an incorrect sender address that invokes the security measures to filter your email. This is done as prevention from email spoofing and scams.
- You are using spam trigger words. This category includes phrases like “great offer” “click here” “special promotion” “this is not spam” and so on. Try changing up your message content to see if that’s the case.
- Your mailing list does not have an unsubscribe button. When there are a lot of people who report your emails as spam, you will find it difficult to avoid the spam filter. Having an unsubscribe button is a great way to prevent this and invoke more trust from your readers.
Что делать, когда функция mail в PHP не отправляет письма?
Даже если учесть всё вышеперечисленное, mail в PHP иногда не работает, причём на локальном сервере всё отправляется нормально. Одна из причин — некорректная настройка функции непосредственно на хостинге. Для решения проблемы рекомендуется обратиться к конфигурационному файлу php.ini и посмотреть на параметры функции «disable_functions». Дело в том, что нужная вам функция mail() может не работать, если она занесена в php.ini в раздел запрещённых (disable_functions).
Идём дальше. Мы можем проверить работоспособность, написав простой код и разместив его в корневом каталоге созданного веб-проекта:
<? print mail("name@my.ru","header","text"); ?>
Если всё функционирует верно, на экране браузера мы увидим цифру один — «1». Её нам вернёт «print» после выполнения. Что касается кодировки, то рекомендуется использовать UTF-8.
Отправка почты через smtp яндекса
Почта будет приходить на любой адрес, который будет указан в скрипте вместо значения ‘to’, но обрабатывать и отправлять эту почту будет именно тот SMTP, который будет указан в настройках openserver.
- Запускаем сервер
- Открываем модуль openserver с настройками в меню «почта»
- Заполняем все поля как показано на картинке, при этом, имя пользователя, e-mail отправителя и пароль подставляем от реального почтового ящика на яндексе.
Сохраняем настройки и после того, как сервер будет перезапущен, можно обратиться к самому скрипту. Из папки «Мои сайты», открыть папку «send» в которой и находится сохраненный ранее скрипт index.php.
К стати, данный скрипт можно сохранить под любым именем, главное чтобы расширение скрипта было «php»
Как только произойдет обращение к данному скрипту, в новом окне браузера появится информация о том, что скрипт отработал.
После этого стоит проверить свой почтовый ящик, адрес которого был указан в скрипте, пришло ли письмо.
Если его нет, значит что-то настроено не правильно, либо письмо попало в папку спам.
Все остальные настройки выглядят аналогично, но на всякий случай дополнительная информация не помешает.