PHP: mail – Manual

Почему ошибка?

Это очень частый вопрос, где я с полной уверенностью могу сказать: 60% причин ошибок — это ваш хостинг, 30% — ваша почта, 9% — вы неверно указали данные от почты, а 1% причин —ты, сука, даун, который решил изменить код, а потом начинаешь искренне удивляться, почему ничерта не работает.

Чтобы узнать, в чём причина, нужно раскомментировать вот эту строчку кода (убрать //):

//$mail->SMTPDebug = 2

Теперь в браузере нужно открыть консоль (F12) > вкладка “console” и отправить сообщение. У вас должна появиться новая строчка (список), которую нужно раскрыть:

Удаляем из файлов весь хлам

Этот пункт вы можете пропустить. Он не является обязательным

Файлы, написанные разработчиками PHPMailer, содержат немереное количество мусора, состоящего из одних комментариев (зачем?!). Вес этих трёх файлов вместе с комментариями равен 196кб, после удаления комментов вес составит 72кб. Почти в 3 раза…

Перемещаем файлы в проект

И теперь помещаем эти 3 файла в наш проект. Я создал специально для этих файлов папку под названием phpmailer

Создаём файл конфигурации

Создадим файл send.php с таким содержанием

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

Создаём HTML форму

Теперь поместим эту форму в нужное место на вашем сайте

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

Прописываем JavaScript

Нужно теперь просто где-то в коде разместить эту функцию. Вы можете её скопировать в свой script файл, который уже подключён в <head>, либо вставить его после закрывающего тега </body>.

Всё (почти)

Форма у вас должна выглядеть вот так:

И в случае успеха (или неудачи) вы должны получить всплывающее сообщение от браузера, мол “Сообщение отправлено” или “Ошибка…”.

Php mail под windows

PHP mail картинка с конвертом

В этой статье я хочу рассказать об отправке почты из php скриптов под Windows.

Америку я, конечно, не открою, но надеюсь, что кому-то эта статья будет полезна или просто сэкономит время.

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

Обычно эти ошибки имеют примерно такое описание:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in E:wwwsimplemailmailer.php on line ......

Дело в том, что функция mail сама по себе почту не отправляет, она просто вызывает программу sendmail, которая в дистрибутив web сервера и php интерпретатора не входит (и не должна).

Sendmail, в свою очередь, для отправки почты использует SMTP сервер.

Таким образом, чтобы php скрипт мог отправлять почту нужно установить и настроить sendmail и SMTP сервер.

Версию sendmail для Windows можно скачать здесь.

Установка и настройка выполняется в три этапа.

1) Распаковываем архив на тот же диск, где установлен php. Например, я создал папку C:wampsendmail.

2) Вносим изменения в файл php.ini:

[mail function]
SMTP =
sendmail_from =
sendmail_path = "C:wampsendmailsendmail.exe -t"

Как видите, нужно только указать путь к sendmail чтобы php мог ее найти.

3) Настраиваем sendmail. Все настройки находятся в файле sendmail.ini (расположен в папке с sendmail).

Но перед тем как приступать к настройке пару слов об SMTP сервере. Вам совсем не обязательно устанавливать сервер на вашем компьютере. Многие почтовые сервисы предоставляют бесплатный доступ к своим серверам.

Ниже я покажу пример настройки sendmail для работы с SMTP сервером mail.ru, но, естественно, вы выбрать любой другой.

Итак, открываем sendmail.ini и устанавливаем следующие параметры:

smtp_server=smtp.mail.ru; адрес SMTP сервера
smtp_port=25; порт SMTP сервера

default_domain=mail.ru; домен по-умолчанию

error_logfile=error.log; файл в который будет записываться лог ошибок

debug_logfile=debug.log; очень полезная на этапе отладки опция. Протоколируются все операции, которые выполняет sendmail

[email protected]; имя вашего аккаунта
auth_password=account_password; ваш пароль

; следующие три опции используются если перед авторизацией на SMTP сервере требуется авторизация на POP3 сервере
pop3_server=pop.mail.ru
[email protected]
pop3_password=account_password

; параметр для команды MAIL FROM
[email protected]

hostname=mail.ru

Теперь не забудьте перезапустить web сервер, чтобы изменения вступили в силу.

Чтобы протестировать работу почты напишем простенький скрипт:

01 <html xmlns="http://www.w3.org/1999/xhtml">
02 <head>
03 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
04 <title>Simple Mail</title>
05 </head>
06 <body>
07 <?php
08 $addr = $_POST['addr'];
09 $theme = $_POST['theme'];
10 $text = $_POST['text'];
11 if (isset($addr) && isset($theme) && isset($text)
12 		&& $addr != "" && $theme != "" && $text != "") {
13 	if (mail($addr, $theme, $text, "From: [email protected]")) {
14 		echo "<h3>Сообщение отправлено</h3>";
15 	}
16 	else {
17 		echo "<h3>При отправке сообщения возникла ошибка</h3>";
18 	}
19 }
20 ?>
21 <form action="mailer.php" method="post">
22 <p>
23 	<label for="addr">eMail:</label>
24 	<input type="text" name="addr" id="addr" size="30" />
25 </p>
26 <p>
27 	<label for="theme">Тема письма:</label>
28 	<input type="text" name="theme" id="theme" size="30" />
29 </p>
30 <p>
31 	<label for="text">Текст письма:</label>
32 	<textarea rows="10" cols="20" name="text" id="text"></textarea>
33 </p>
34 <p>
35 	<input type="submit" value="Отправить" />
36 </p>
37 </form>
38 </body>
39 </html>

Он создает форму с тремя полями для ввода адреса, темы и содержания письма. Нажатие на кнопку «Отправить» отправит запрос этому же скрипту (строка 21).

Если данные введены, то будет вызвана функция mail (строка 13), которая и отправит письмо. В случае успешной отправки функция возвращает true, в противном случае — false.

Как видите, ничего сложного в настойке почты нет.

Удачи!

Источник: кросспостинг из моего блога – www.simplecoding.org.

Php: mail – manual

I migrated an application to a platform without a local transport agent (MTA). I did not want to configure an MTA, so I wrote this xxmail function to replace mail() with calls to a remote SMTP server. Hopefully it is of some use.

function xxmail($to, $subject, $body, $headers)
{
$smtp = stream_socket_client(‘tcp://smtp.yourmail.com:25’, $eno, $estr, 30);

$B = 8192;
$c = “rn”;
$s = ‘[email protected]’;

fwrite($smtp, ‘helo ‘ . $_ENV[‘HOSTNAME’] . $c);
$junk = fgets($smtp, $B);

// Envelope
fwrite($smtp, ‘mail from: ‘ . $s . $c);
$junk = fgets($smtp, $B);
fwrite($smtp, ‘rcpt to: ‘ . $to . $c);
$junk = fgets($smtp, $B);
fwrite($smtp, ‘data’ . $c);
$junk = fgets($smtp, $B);

// Header
fwrite($smtp, ‘To: ‘ . $to . $c);
if(strlen($subject)) fwrite($smtp, ‘Subject: ‘ . $subject . $c);
if(strlen($headers)) fwrite($smtp, $headers); // Must be rn (delimited)
fwrite($smtp, $headers . $c);

// Body
if(strlen($body)) fwrite($smtp, $body . $c);
fwrite($smtp, $c . ‘.’ . $c);
$junk = fgets($smtp, $B);

// Close
fwrite($smtp, ‘quit’ . $c);
$junk = fgets($smtp, $B);
fclose($smtp);
}

Адрес отправителя отклонён: не принадлежит пользователю

Эта ошибка означает, что серверу не удалось пройти аутентификацию с использованием предоставленных данных.

Чтобы исправить это, проверьте адрес электронной почты, который вы использовали для отправки сообщения, и убедитесь, что он соответствует существующему ящику электронной почты. Если он указывает не на тот почтовый ящик, измените его соответствующим образом. Также убедитесь, что вы включили SPF-запись (англ).

Использование phpmailer с smtp hostinger

Теперь, когда PHPMailer готов к работе, вы можете начать использовать его для отправки почты средствами PHP и через Hostinger SMTP.

  1. Создайте учётную запись электронной почты, войдя в hPanel. Перейдите в раздел «Почтовые аккаунты» -> «Создать новую учётную запись электронной почты». Введите новый адрес электронной почты и установите пароль, затем нажмите «Создать».
    Страница Создания Почты в hPanel
  2. Когда закончите, обратите внимание на свои данные SMTP, расположенные на той же странице в самом вверху.
    Детали Электронной Почты
  3. Создайте файл testphpmailer.php в Public_html. Откройте панель управления hPanel и щёлкните по Файловому менеджеру -> Перейдите на страницу Файлового менеджера
  4. Нажмите на иконку «Новый Файл». Назовите файл testphpmailer.php, а затем нажмите кнопку «Создать«.
  5. Дважды щёлкните по только что созданном файле testphpmailer.php, затем скопируйте и вставьте следующее:

Компоненты php mail

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

Однако, если вам нужна дополнительная информация о функции Sendmail и её компонентах, вы можете обратиться к официальной документации PHP.

Вот синтаксис PHP, который мы использовали в предыдущем разделе:

Компоненты phpmailer

Чтобы понять, как работает PHPMailer, давайте разберём приведённый выше пример скрипта, который использует SMTP для отправки электронной почты. Вот подробное объяснение каждого компонента:

use PHPMailerPHPMailerPHPMailer;

Эта строка импортирует класс PHPMailer в глобальное пространство имён.

require '../vendor/autoload.php';

Включает различные библиотеки, необходимые PHPMailer.

$mail->

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

if (!$mail->send()) {

Определяет, что происходит при выполнении скриптов.

Контактная форма phpmailer

Возможности PHPMailer не ограничиваются только отправкой PHP-почты. Ещё один вариант его применения — создание контактной формы, с помощью которой ваша аудитория сможет с вами связаться.

Вот пример скрипта:

Нужно использовать не пароль от самой почты, а “пароль приложения”. в настройках вашей почты, будь то gmail, yandex или mailru— есть раздел “пароли приложений”, где вы можете специально создать отдельный сгенерированный пароль для phpmailer.

Сохраняем этот файл send.php и помещаем его в корень сайта

Отправка писем с phpmailer

PHPMailer — популярная библиотека отправки почты для PHP. Она поддерживает отправку писем, как через функцию mail(), так и через простой протокол передачи почты (SMTP). Библиотека значительно упрощает сложный процесс отправки писем с помощью PHP, предоставляя набор готовых функций для создания и отправки почты.

Установить PHPMailer довольно просто, особенно если у вас установлен Composer. Если вы используете Hostinger, вам не нужно об этом беспокоиться, поскольку он по умолчанию включен в каждый пакет хостинга.

Однако, если вам нужно установить PHPMailer вручную, тогда подключите свою учётную запись хостинга через терминал SSH. Следуй этой инструкции:

  1. Загрузите и установите SSH-клиент PuTTY.
  2. Перейдите в панель управления hPanel, найдите и кликните по «SSH-доступ» в разделе «Расширенные«.
  3. Обратите внимание на раздел с информацией для SSH-доступа. Вам понадобится SSH IP, порт, имя пользователя и пароль.
  4. Откройте PuTTY, затем укажите свой SSH IP и порт соответственно.
    Окно Настройки PuTTY
  5. Нажмите Open, появится командное окно. Введите своё имя пользователя и пароль SSH. Как только это будет сделано, нажмите Enter.
  6. Выполните следующую команду:
cd public_html
  1. Нажмите Enter, затем запустите эту команду:
composer require phpmailer/phpmailer
  1. Подождите, пока процесс установки не будет завершён.
    Установка PHPMailer - Терминал

Отправка писем через smtp на php 2 способа

Функция mail() бывает блокируется на хостинге или самом сайте. Если писать в службу поддержки долго или не имеет смысла – придется отправлять письма через SMTP.

СПОСОБ 1 – просто вставляем этот код на сайте с некоторыми настройками:

<?php
$config[‘smtp_username’] = ‘[email protected]’; //Смените на имя своего почтового ящика. (ваш email)
$config[‘smtp_port’] = ’25’; // Порт работы. Не меняйте, если не уверены. На 2022 порт вроде 465. ЕСЛИ ВООБЩЕ НЕ РАБОТАЕТ – убрать кавычки в 25
$config[‘smtp_host’] = ‘smtp.yandex.ru’; //сервер для отправки почты
$config[‘smtp_password’] = ‘pass’; //Измените пароль (от вашего ящика)
$config[‘smtp_debug’] = true; //Если Вы хотите видеть сообщения ошибок, укажите true вместо false
$config[‘smtp_charset’] = ‘windows-1251’; //кодировка сообщений. (или UTF-8, итд) (меняется также в самом низу)
$config[‘smtp_from’] = ‘Leon1010’; //Ваше имя – или имя Вашего сайта. Будет показывать при прочтении в поле “От кого”
function smtpmail($mail_to, $subject, $message, $headers=”) {
global $config;
$SEND = “Date: “.date(“D, d M Y H:i:s”) . ” UTrn”;
$SEND .= ‘Subject: =?’.$config[‘smtp_charset’].’?B?’.base64_encode($subject).”=?=rn”;
if ($headers) $SEND .= $headers.”rnrn”;
else
{
$SEND .= “Reply-To: “.$config[‘smtp_username’].”rn”;
$SEND .= “MIME-Version: 1.0rn”;
$SEND .= “Content-Type: text/plain; charset=””.$config[‘smtp_charset’].””rn”;
$SEND .= “Content-Transfer-Encoding: 8bitrn”;
$SEND .= “From: “”.$config[‘smtp_from’].”” <“.$config[‘smtp_username’].”>rn”;
$SEND .= “To: $mail_to <$mail_to>rn”;
$SEND .= “X-Priority: 3rnrn”;
}
$SEND .= $message.”rn”;
if( !$socket = fsockopen($config[‘smtp_host’], $config[‘smtp_port’], $errno, $errstr, 30) ) {
if ($config[‘smtp_debug’]) echo $errno.”<br>”.$errstr;
return false;
}

if (!server_parse($socket, “220”, __LINE__)) return false;

fputs($socket, “HELO ” . $config[‘smtp_host’] . “rn”);
if (!server_parse($socket, “250”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Не могу отправить HELO!</p>’;
fclose($socket);
return false;
}
fputs($socket, “AUTH LOGINrn”);
if (!server_parse($socket, “334”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Не могу найти ответ на запрос авторизаци.</p>’;
fclose($socket);
return false;
}
fputs($socket, base64_encode($config[‘smtp_username’]) . “rn”);
if (!server_parse($socket, “334”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Логин авторизации не был принят сервером!</p>’;
fclose($socket);
return false;
}
fputs($socket, base64_encode($config[‘smtp_password’]) . “rn”);
if (!server_parse($socket, “235”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Пароль не был принят сервером как верный! Ошибка авторизации!</p>’;
fclose($socket);
return false;
}
fputs($socket, “MAIL FROM: <“.$config[‘smtp_username’].”>rn”);
if (!server_parse($socket, “250”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Не могу отправить комманду MAIL FROM: </p>’;
fclose($socket);
return false;
}
fputs($socket, “RCPT TO: <” . $mail_to . “>rn”);

if (!server_parse($socket, “250”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Не могу отправить комманду RCPT TO: </p>’;
fclose($socket);
return false;
}
fputs($socket, “DATArn”);

if (!server_parse($socket, “354”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Не могу отправить комманду DATA</p>’;
fclose($socket);
return false;
}
fputs($socket, $SEND.”rn.rn”);

if (!server_parse($socket, “250”, __LINE__)) {
if ($config[‘smtp_debug’]) echo ‘<p>Не смог отправить тело письма. Письмо не было отправленно!</p>’;
fclose($socket);
return false;
}
fputs($socket, “QUITrn”);
fclose($socket);
return TRUE;
}

function server_parse($socket, $response, $line = __LINE__) {
global $config;
while (@substr($server_response, 3, 1) != ‘ ‘) {
if (!($server_response = fgets($socket, 256))) {
if ($config[‘smtp_debug’]) echo “<p>Проблемы с отправкой почты!</p>$response<br>$line<br>”;
return false;
}
}
if (!(substr($server_response, 0, 3) == $response)) {
if ($config[‘smtp_debug’]) echo “<p>Проблемы с отправкой почты!</p>$response<br>$line<br>”;
return false;
}
return true;
}
?>

Использовать код можно так-же как и обычную функцию mail:
<?php
$headers = ‘MIME-Version: 1.0’ . “rn”;
$headers .= ‘Content-type: text/html; charset=”windows-1251“‘ . “rn”;
$headers .= ‘From: [email protected]’. “rn”;
smtpmail(’email-получателя@mail.ru’, ‘Тема письма’, ‘Текст письма’, $headers);
?>

СПОСОБ 2 – просто копируем его на сайт и нечего не настраиваем

<?php
/**
* SendMailSmtpClass
*
* Класс для отправки писем через SMTP с авторизацией
*
* @author Ipatov Evgeniy <[email protected]>
* @version 1.0
*/
class SendMailSmtpClass {

/**
*
* @var string $smtp_username – логин
* @var string $smtp_password – пароль
* @var string $smtp_host – хост
* @var string $smtp_from – от кого
* @var integer $smtp_port – порт
* @var string $smtp_charset – кодировка
*
*/
public $smtp_username;
public $smtp_password;
public $smtp_host;
public $smtp_from;
public $smtp_port;
public $smtp_charset;

public function __construct($smtp_username, $smtp_password, $smtp_host, $smtp_from, $smtp_port = 25, $smtp_charset = “utf-8”) {
$this->smtp_username = $smtp_username;
$this->smtp_password = $smtp_password;
$this->smtp_host = $smtp_host;
$this->smtp_from = $smtp_from;
$this->smtp_port = $smtp_port;
$this->smtp_charset = $smtp_charset;
}

/**
* Отправка письма
*
* @param string $mailTo – получатель письма
* @param string $subject – тема письма
* @param string $message – тело письма
* @param string $headers – заголовки письма
*
* @return bool|string В случаи отправки вернет true, иначе текст ошибки *
*/
function send($mailTo, $subject, $message, $headers) {
$contentMail = “Date: ” . date(“D, d M Y H:i:s”) . ” UTrn”;
$contentMail .= ‘Subject: =?’ . $this->smtp_charset . ‘?B?’ . base64_encode($subject) . “=?=rn”;
$contentMail .= $headers . “rn”;
$contentMail .= $message . “rn”;

try {
if(!$socket = @fsockopen($this->smtp_host, $this->smtp_port, $errorNumber, $errorDescription, 30)){
throw new Exception($errorNumber.”.”.$errorDescription);
}
if (!$this->_parseServer($socket, “220”)){
throw new Exception(‘Connection error’);
}

fputs($socket, “HELO ” . $this->smtp_host . “rn”);
if (!$this->_parseServer($socket, “250”)) {
fclose($socket);
throw new Exception(‘Error of command sending: HELO’);
}

fputs($socket, “AUTH LOGINrn”);
if (!$this->_parseServer($socket, “334”)) {
fclose($socket);
throw new Exception(‘Autorization error’);
}

fputs($socket, base64_encode($this->smtp_username) . “rn”);
if (!$this->_parseServer($socket, “334”)) {
fclose($socket);
throw new Exception(‘Autorization error’);
}

fputs($socket, base64_encode($this->smtp_password) . “rn”);
if (!$this->_parseServer($socket, “235”)) {
fclose($socket);
throw new Exception(‘Autorization error’);
}

fputs($socket, “MAIL FROM: “.$this->smtp_username.”rn”);
if (!$this->_parseServer($socket, “250”)) {
fclose($socket);
throw new Exception(‘Error of command sending: MAIL FROM’);
}

fputs($socket, “RCPT TO: ” . $mailTo . “rn”);
if (!$this->_parseServer($socket, “250”)) {
fclose($socket);
throw new Exception(‘Error of command sending: RCPT TO’);
}

fputs($socket, “DATArn”);
if (!$this->_parseServer($socket, “354”)) {
fclose($socket);
throw new Exception(‘Error of command sending: DATA’);
}

fputs($socket, $contentMail.”rn.rn”);
if (!$this->_parseServer($socket, “250”)) {
fclose($socket);
throw new Exception(“E-mail didn’t sent”);
}

fputs($socket, “QUITrn”);
fclose($socket);
} catch (Exception $e) {
return $e->getMessage();
}
return true;
}

private function _parseServer($socket, $response) {
while (@substr($responseServer, 3, 1) != ‘ ‘) {
if (!($responseServer = fgets($socket, 256))) {
return false;
}
}
if (!(substr($responseServer, 0, 3) == $response)) {
return false;
}
return true;

}
}

Вызываем теперь класс с параметрами

require_once “SendMailSmtpClass.php”; // подключаем класс

$mailSMTP = new SendMailSmtpClass(‘[email protected]’, ‘****’, ‘smtp.yandex.ru’, ‘Evgeniy’); // создаем экземпляр класса
// $mailSMTP = new SendMailSmtpClass(‘логин’, ‘пароль’, ‘хост’, ‘имя отправителя’);

// заголовок письма
$headers= “MIME-Version: 1.0rn”;
$headers .= “Content-type: text/html; charset=utf-8rn”; // кодировка письма
$headers .= “From: Evgeniy <[email protected]>rn”; // от кого письмо
$result = $mailSMTP->send(‘[email protected]’, ‘Тема письма’, ‘Текст письма’, $headers); // отправляем письмо
// $result = $mailSMTP->send(‘Кому письмо’, ‘Тема письма’, ‘Текст письма’, ‘Заголовки письма’);
if($result === true){
echo “Письмо успешно отправлено”;
}else{
echo “Письмо не отправлено. Ошибка: ” . $result;
}

Материал взят частично с сайтов:

http://i-leon.ru/smtp-php/

http://vhod-v-lichnyj-kabinet.ru/otpravka-pisem-cherez-smtp-s-avtorizaciej-na-php/

| 2022-09-01 | Отправка писем через SMTP на PHP 2 способа | Функция mail() бывает блокируется на хостинге или самом сайте. Если писать в службу поддержки долго или не имеет смысла – придется отправлять письма ч |

Отправка почты на php через внешний smtp с авторизацией » блог. artkiev design studio

При оптимизации очередного проекта, доставшегося в наследство встал вопрос разгрузки сервера. В ходе анализа выяснилось, что сервер достаточно часто генерирует и отправляет через себя (через стандартную функцию mail() на php) большое количество уведомлений пользователям. Решение пришло само собой – сделать отправку через внешний STMP-сервер с аутентификацией.Если своего сервера нет – можно воспользоваться любым, который позволяет это делать (их масса как платных, так и бесплатных)

<?php
#Адрес сервера
$SmtpServer="mail.artkiev.com";
#Адрес порта
$SmtpPort="25";
#Логин авторизации на сервера SMTP
$SmtpUser="username";
#Пароль авторизации на сервера SMTP
$SmtpPass="password";

#Класс работы с почтой
class SMTPClient
{
function SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body)
{
$this->SmtpServer = $SmtpServer;
$this->SmtpUser = base64_encode ($SmtpUser);
$this->SmtpPass = base64_encode ($SmtpPass);
$this->from = $from;
$this->to = $to;
$this->subject = $subject;
$this->body = $body;
if ($SmtpPort == "") 
{
$this->PortSMTP = 25;
}
else
{
$this->PortSMTP = $SmtpPort;
}
}
function SendMail ()
{
if ($SMTPIN = fsockopen ($this->SmtpServer, $this->PortSMTP)) 
{
fputs ($SMTPIN, "EHLO ".$HTTP_HOST."rn"); 
$talk["hello"] = fgets ( $SMTPIN, 1024 ); 
fputs($SMTPIN, "auth loginrn");
$talk["res"]=fgets($SMTPIN,1024);
fputs($SMTPIN, $this->SmtpUser."rn");
$talk["user"]=fgets($SMTPIN,1024);
fputs($SMTPIN, $this->SmtpPass."rn");
$talk["pass"]=fgets($SMTPIN,256);
fputs ($SMTPIN, "MAIL FROM: <".$this->from.">rn"); 
$talk["From"] = fgets ( $SMTPIN, 1024 ); 
fputs ($SMTPIN, "RCPT TO: <".$this->to.">rn"); 
$talk["To"] = fgets ($SMTPIN, 1024); 
fputs($SMTPIN, "DATArn");
$talk["data"]=fgets( $SMTPIN,1024 );
fputs($SMTPIN, "To: <".$this->to.">rnFrom: <".$this->from.">rnSubject:".$this->subject."rnrnrn".$this->body."rn.rn");
$talk["send"]=fgets($SMTPIN,256);
fputs ($SMTPIN, "QUITrn"); 
fclose($SMTPIN); 
} 
return $talk;
} 
}

if($_SERVER["REQUEST_METHOD"] == "POST")
{
$to = $_POST['to'];
$from = $_POST['from'];
$subject = $_POST['sub'];
$body = $_POST['message'];
$SMTPMail = new SMTPClient ($SmtpServer, $SmtpPort, $SmtpUser, $SmtpPass, $from, $to, $subject, $body);
$SMTPChat = $SMTPMail->SendMail();
}
?>

Пример простенькой формы для тестирования отправки:

<form method="post" action="">
Куда:<input type="text" name="to" />
Откуда:<input type='text' name="from" />
Тема:<input type='text' name="sub" />
Сообщение :<textarea name="message"></textarea>
<input type="submit" value="Отправить " />
</form>

Внимание: код устарел, возможно на вашей версии ПХП работать не будет 🙁

Создание тестового файла php mail

Прежде всего, вам необходимо создать файл для PHP-скрипта и поместить его в каталог public_html, чтобы к нему можно было легко получить доступ через доменное имя.

  1. В hPanel щёлкните на Файловый менеджер -> Перейдите на страницу Файлового менеджера.
  2. Создайте новый файл, нажав на иконку «Новый Файл» в верхнем меню. Назовём наш файл testmail.php и завершим процесс создания, нажав кнопку «Создать«.
    Всплывающее Окно Создания Файла в Файловом Менеджере hPanel
  3. Дважды кликните по файлу testmail.php, поскольку мы собираемся редактировать его с помощью функции PHP mail(). Вот пример основных компонентов функции, которые мы будем использовать в этом руководстве. Они будут объяснены более подробно в следующем разделе. Сейчас просто нажмите «Save & Close«, когда закончите редактировать.
    Пример Основных Компонентов Функции PHP mail в Редакторе hPanel
  4. Теперь вы можете отправить электронное письмо, открыв в браузере VashDomen/testmail.php. Не забудьте заменить «VashDomen» на доменное имя, которое вы использовали для создания тестового файла testmail.php.
  5. Теперь отправка email с PHP должна работать. Письмо должно прийти на почту получателя.
    Входящее Письмо в Gmail, Отправленное с Помощью PHP Mail

Сообщения попадают в спам

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

  • Тема сообщения, вводящая в заблуждение или похожая на спам. Например, когда вы указываете одно слово: «тест» или «тестирование», «привет», «срочно» или что-то подобное. Убедитесь, что ваша тема чётко отображает суть сообщения.
  • Вы используете неправильный адрес отправителя и ваше сообщение отфильтровывается как спам. Такая мера безопасности направлена на борьбу со спуфингом и мошенничеством.
  • Вы используете слова, которые работают как триггеры для фильтрации спама. В эту категорию входят такие фразы, как «отличное предложение», «нажмите здесь», «специальная акция», «это не спам» и т. д. Попробуйте изменить содержание сообщения, чтобы проверить, так ли это.
  • В вашем списке рассылки нет кнопки «Отписаться от рассылки«. Когда много людей сообщают о ваших письмах как о спаме, вам будет сложно избежать спам-фильтра. Наличие кнопки отказа от подписки — отличный способ предотвратить это и вызвать больше доверия у ваших читателей.

Устранение распространённых ошибок php mail и phpmailer

Отправка Email с PHP или PHPMailer время от времени может сопровождаться ошибками. Вот список наиболее распространённых проблем и способы их решения.

Функция php mail()

Функция PHP mail() вызывает программу Sendmail, обычно настраиваемую системным администратором, которая и позволяет отправлять электронные письма.

Чтобы использовать эту функцию, убедитесь, что ваш хостинг-провайдер позволяет вам вручную управлять службой Sendmail.

Возникли проблемы с отправкой писем? Hostinger предусмотрена функция PHP mail().

Если вы уже являетесь клиентом Hostinger, вы можете включить или отключить эту функцию, войдя в hPanel. Нажмите «Почта» -> «Управление почтовыми сервисами».

Служба Sendmail должна быть включена по умолчанию. Однако рекомендуем перепроверить это в вашей панели управления хостингом.

Заключение

Теперь вы знаете, как происходит отправка email с PHP, а также, как использовать PHPMailer для отправки писем с аутентификацией SMTP. Не смотря на то, что в этом руководстве представлены базовые примеры, тот же синтаксис можно использовать в разработке контактной формы и других расширений для вашего сайта.

Для более подробной информации не забудьте посетить страницу проекта PHPMailer. Если у вас есть какие-либо советы, рекомендации или идеи, мы будем рады услышать их в разделе комментариев ниже.

Похожее:  1С-Битрикс - Оплата заказа под гостем без авторизации и смс

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

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