Содержание

Отправка почты с сайта через sendmail (php mail, perl Email и т.д.).

На нашей площадке существует возможность выполнить отправку письма прямо с вашего сайта. Например, из формы обратной связи. Сделать это можно двумя путями: — при помощи SMTP-авторизации на нашем почтовом сервере через существующий почтовый ящик; — при помощи стандартного серверного средства sendmail, с которым умеют работать большинство известных нам языков программирования. Например, за работу с этим функционалом внутри php отвечает стандартная функия php mail(). Но при поптыке отправить письмо с помощью этой функции, вы можете столкнуться с особенностью нашей площадки: в связи с повсеместно вводимой политикой отсеивания спама на базе спецификации DMARC, на нашей площадке были введены некоторые ограничения на отправку корреспонденции с сайтов. Такая отправка возможна только от имени существующего в нашей системе почтового ящика. При этом, если вы отправляете письмо с сайта с доменом example.

org, отправка должна производиться с ящика именно на этом домене, например [email protected]. Также обязательным условием успешной отправки писем через скрипты сайта является наличие используемого адреса ящика в настройках WWW-домена, с корого будет отправлятся письмо.

В качестве примера возьмём популярную CMS WordPress. Она написана на php, и отпавка служебных писем для администратора сайта ею осуществляется именно через функцию php mail, то есть с использованием серверного sendmail.
В настройках CMS мы видим, что письма будут уходить с сайта от имени ящика [email protected]:

Это значит, что для успешной отправки и доставки такого письма, ящик [email protected] должен существовать в системе. Если его в системе нет, то его нужно создать. Для этого нужно выполнить ряд действий: 1) Авторизоваться в биллинговую панель управления при помощи кнопки «Вход для клиентов»:

2) В биллинговой панели найти в меню раздел «Хостинг» и перейти в него:

3) Выбрать из списка нужный хостинг-аккаунт (если у вас их несколько), нажать на кнопку «Перейти» в верхнем меню:

4) Пройти в раздел «Почтовые домены» и нажать кнопку «Создать» в верхнем горизонтальном меню:

5) Заполнить появившуюся форму и нажать кнопку «Ok»:

6) Пройти в левом вертикальном меню в раздел «Почтовые ящики» и нажать в нём кнопку в верхнем горизонтальном меню «Создать»:

7) Заполните появившуюся форму соглсано примеру, используя нужные вам имена ящика и домена, затем нажмите кнопку «Ok»:

8) Ящик также нужно прописать в настройках WWW-домена. Для этого в хостинговой панели в раздле «WWW-Домены» кликните левой кнопкой мыши по домену, с сайта которого будет отправляться почта, и нажмите в верхнем горизонтальном меню кнопку «Изменить». В поле «E-Mail администратора» внесите имя электронного ящика, с которого будет выполняться отправка почты, и нажмите кнопку «Ok»:

Теперь сайт сможет успешно отправлять письма через функционал php mail (используя sendmail) от имени этого ящика. Обратите внимание: системе требуется некторое время, чтобы увидеть новый электронный ящик, поэтому мы рекомендуем выполнять проверку выполненных действий через несколько минут после их выполнения.

Отправка писем через SMTP на PHP

<?php

$config[‘smtp_username’] = ‘[email protected]’;  //Смените на адрес своего почтового ящика.

$config[‘smtp_port’] = ‘465’; // Порт работы.

$config[‘smtp_host’] =  ‘ssl://smtp.yandex.ru’;  //сервер для отправки почты

$config[‘smtp_password’] = ‘пароль’;  //Измените пароль

$config[‘smtp_debug’] = true;  //Если Вы хотите видеть сообщения ошибок, укажите true вместо false

$config[‘smtp_charset’] = ‘utf-8’; //кодировка сообщений. (windows-1251 или utf-8, итд)

$config[‘smtp_from’] = ‘МегаСервис’; //Ваше имя — или имя Вашего сайта. Будет показывать при прочтении в поле «От кого»

function smtpmail($to=», $mail_to, $subject, $message, $headers=») {

global $config;

$SEND = «Date: «.date(«D, d M Y H:i:s») . » UT\r\n»;

$SEND .= ‘Subject: =?’.$config[‘smtp_charset’].’?B?’.base64_encode($subject).»=?=\r\n»;

if ($headers) $SEND .= $headers.»\r\n\r\n»;

else

{

$SEND .= «Reply-To: «.$config[‘smtp_username’].»\r\n»;

$SEND .= «To: \»=?».$config[‘smtp_charset’].»?B?».base64_encode($to).»=?=\» <$mail_to>\r\n»;

$SEND .= «MIME-Version: 1.0\r\n»;

$SEND .= «Content-Type: text/html; charset=\»».$config[‘smtp_charset’].»\»\r\n»;

$SEND .= «Content-Transfer-Encoding: 8bit\r\n»;

$SEND .= «From: \»=?».$config[‘smtp_charset’].»?B?».base64_encode($config[‘smtp_from’]).»=?=\» <«.$config[‘smtp_username’].»>\r\n»;

$SEND . = «X-Priority: 3\r\n\r\n»;

}

$SEND .=  $message.»\r\n»;

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’] . «\r\n»);

if (!server_parse($socket, «250», __LINE__)) {

if ($config[‘smtp_debug’]) echo ‘<p>Не могу отправить HELO!</p>’;

fclose($socket);

return false;

}

fputs($socket, «AUTH LOGIN\r\n»);

if (!server_parse($socket, «334», __LINE__)) {

if ($config[‘smtp_debug’]) echo ‘<p>Не могу найти ответ на запрос авторизаци.</p>’;

fclose($socket);

return false;

}

fputs($socket, base64_encode($config[‘smtp_username’]) . «\r\n»);

if (!server_parse($socket, «334», __LINE__)) {

if ($config[‘smtp_debug’]) echo ‘<p>Логин авторизации не был принят сервером!</p>’;

fclose($socket);

return false;

}

fputs($socket, base64_encode($config[‘smtp_password’]) . «\r\n»);

if (!server_parse($socket, «235», __LINE__)) {

if ($config[‘smtp_debug’]) echo ‘<p>Пароль не был принят сервером как верный! Ошибка авторизации!</p>’;

fclose($socket);

return false;

}

fputs($socket, «MAIL FROM: <«.$config[‘smtp_username’].»>\r\n»);

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 . «>\r\n»);

if (!server_parse($socket, «250», __LINE__)) {

if ($config[‘smtp_debug’]) echo ‘<p>Не могу отправить комманду RCPT TO: </p>’;

fclose($socket);

return false;

}

fputs($socket, «DATA\r\n»);

if (!server_parse($socket, «354», __LINE__)) {

if ($config[‘smtp_debug’]) echo ‘<p>Не могу отправить комманду DATA</p>’;

fclose($socket);

return false;

}

fputs($socket, $SEND. «\r\n.\r\n»);

if (!server_parse($socket, «250», __LINE__)) {

if ($config[‘smtp_debug’]) echo ‘<p>Не смог отправить тело письма. Письмо не было отправленно!</p>’;

fclose($socket);

return false;

}

fputs($socket, «QUIT\r\n»);

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;

}

?>

Отправка почты php через smtp c локального сервера

Главная / Уроки joomla / Отправка почты php через smtp в cms-joomla

Опубликовано 10 января 2018

Изменен: 21 июня, 2020

354

Отправка почты php через smtp популярных почтовых сервисов яндекса, гугла и mail ru, может осуществляться и с локального сервера, если программное обеспечение такого сервера позволяет это сделать.

Одним из таких серверов, является openserver и все что нужно для работы с почтой, у него есть. Использование возможностей таких серверов, позволяет создавать, тестировать и настраивать новые сайты, скрипты и приложения на компьютере, без подключения услуг хостинг-провайдеров.

 

В этом уроке рассмотрим вариант отправки почты php через smtp на движке joomla, с помощью локального сервера openserver. Чтобы было все наглядно и правильно, лучше конечно создать в яндексе, гугле и mail ru по одному почтовому ящику, а данные для авторизации лучше записать.

В каждом таком сервисе есть возможность отправки писем через smtp (широко используемый сетевой протокол). Именно они производят отправку сообщений, все остальные (сами скрипты, cms и пр.), лишь формирую эти сообщения.

Для настройки отправки почты php через smtp, нужно проделать некоторые шаги:

  1. Создать почтовый ящик, или несколько yandex, google, mail ru
  2. Установить и настроить openserver
  3. Установить joomla на openserver

Затем можно приступать к настройке openserver для отправки почты php через smtp, в данном случае показан шаблон для smtp яндекса. Вместо слова «test» необходимо подставить свои реальные значения.

При необходимости настроить несколько почтовых серверов, лучше всего настроить отправку почты php через smtp в openserver с помощью профилей. В этом случае не придется несколько раз переделывать настройки. Как работать с профилями показано в видеоуроке настройка php для разных cms-систем.

Отправка почты php через smtp яндекса в joomla

В общих настройках системы, в меню «сервер», выставляем следующие параметры:
Включаем режим отправки почты в положение «Да», указываем реальный адрес куда будет отправляться почта и устанавливаем способ отправки-PHP Mail

Как все будет готово, можно отправлять сообщение нажав на кнопку «Отправить тестовое сообщение». Если все правильно настроено, на почту указанную в настройках joomla, придет тестовое письмо.

Отправка почты php через smtp mail ru

В настройках mail ru все точно так же как и в яндексе. Вместо слова «test», подставляем свои данные. После сохранения настроек, опять отправляем тестовое сообщение.

Отправка почты php через smtp google в joomla

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

В любом случае, все будет работать.

В данном уроке были рассмотрены варианты отправки почты php через smtp трех почтовых сервисов. Отправка почты php через smtp Yahoo и Rambler будет происходить точно так же.

Непосредственно в почтовом ящике, в строке от кого, будут указаны smtp тех сервисов, через которые производились отправки. На скриншоте они показаны стрелками.

Если использовать для отправки почты скрипт, то почта будет приходить на почтовый адрес указанный в скрипте, а пересылаться будет через тот smtp, который указан в последних настройках openserver.

 

Как сделать так, чтобы мой PHP отправлял почту?

Из почтового руководства php:

Требования

Чтобы функции почты были доступны, PHP требует установленной и работающей системы электронной почты.

Используемая программа определяется настройками конфигурации в файле php.ini.

Это означает, что вам нужно установить какой-нибудь почтовый сервер и настроить php для его использования. Обычно этот почтовый сервер является постфиксом в Ubuntu. Однако — если сторона php, которую вы кодируете, в конечном итоге будет храниться на стороне хостинг-сервиса (например, xmission), то, скорее всего, почтовый сервер там уже будет установлен. В этом случае просто протестируйте свой сайт онлайн, а не локально.

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

Установка: postfix / sudo apt-get install postfix Во время процесса вас спросят, в каком режиме вы хотите установить postfix. Есть четыре возможных режима:

  • Интернет : Ваш собственный почтовый сервер.
  • Спутник : внешний почтовый провайдер (например, Google) будет использоваться для отправки и получения почты. Сервер не будет получать почту.
  • Smarthost : смесь между двумя. Почта хранится локально, но отправляется через внешнего почтового провайдера.
  • Только местный : вас это не касается. Это системный внутренний почтовый сервер. Вы можете только отправлять почту от пользователя к пользователю в системе.

Остальные параметры установки зависят от вашего выбора этой общей конфигурации.

Скорее всего, вы выберете спутниковую установку. Это означает, что почта будет отправлена ​​через внешнего провайдера. В качестве smtp-сервера (сервера исходящей почты) вам нужно будет указать своих провайдеров smtp. Остальные варианты говорят сами за себя.

Конфигурация после установки

Большинство smtp-серверов требуют аутентификации по паролю для отправки почты. Поэтому postfix нужно будет знать этот пароль. Также есть такие вещи, как шифрование, которое нужно учитывать (что вам придется гуглить). Вот как вы настраиваете postfix с использованием аутентификации по паролю (sasl):

  • Установите libsasl2-modules и sasl2-bin , щелкнув значки Центра программного обеспечения или из терминала, используя:

    sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
    
  • Включите sasl-auth, добавив эти строки в /etc/postfix/main. cf

     # add to /etc/postfix/main.cf
     smtp_sasl_auth_enable = yes
     smtp_sasl_security_options = noplaintext noanonymous
     smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
    
  • Создайте файл /etc/postfix/sasl_passwordс такой строкой:

     smtp.gmail.com [email protected]:USERPASSWORD
    

    Подставьте реальный пароль, имя пользователя и smtp-адрес.

  • Обновление постфикса:

     sudo chmod 600 /etc/postfix/sasl_password # for safety of your smtp password
     sudo postmap hash:/etc/postfix/sasl_password 
     sudo postmap /etc/postfix/sender_canonical
     sudo /etc/init.d/postfix restart   
    

    Вы , возможно , придется обойти «разрешение отказано» ошибка по chown postfix:postfix /etc/postfixзаранее.

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

Связанный: PEAR :: Mail интерфейс также может быть интересен для вас.

Gmail (и, возможно, другим службам) может не понравиться то, что вы пытаетесь отправлять почту таким образом, поскольку это может считаться небезопасным по их стандартам, и это может заблокировать вашу попытку, т. Е. На экране ничего не произойдет, или какое-то место всего процесса заблокирует ваша аутентификация. Также ваш POP3 должен быть включен.

Чтобы противостоять этому, смотрите здесь. (Если вы хотите быть в безопасности, создайте фиктивную учетную запись Gmail)

PHP mail под Windows. Отправка почты из PHP скриптов

В этой статье я хочу рассказать об отправке почты из 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:\www\simplemail\mailer.php on line ......



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

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

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

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

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

1) Распаковываем архив

на тот же диск, где установлен php. Например, я создал папку C:\wamp\sendmail.

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

[mail function]
SMTP =
sendmail_from =
sendmail_path = "C:\wamp\sendmail\sendmail.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 сервер, чтобы изменения вступили в силу.

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

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;Simple Mail&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php
$addr = $_POST['addr'];
$theme = $_POST['theme'];
$text = $_POST['text'];
if (isset($addr) && isset($theme) && isset($text)
		&& $addr != "" && $theme != "" && $text != "") {
	if (mail($addr, $theme, $text, "From: vova_33@mail. ru")) {
		echo "&lt;h4&gt;Сообщение отправлено&lt;/h4&gt;";
	}
	else {
		echo "&lt;h4&gt;При отправке сообщения возникла ошибка&lt;/h4&gt;";
	}
}
?&gt;
&lt;form action="mailer.php" method="post"&gt;
&lt;p&gt;
	&lt;label for="addr"&gt;eMail:&lt;/label&gt;
	&lt;input type="text" name="addr" size="30" /&gt;
&lt;/p&gt;
&lt;p&gt;
	&lt;label for="theme"&gt;Тема письма:&lt;/label&gt;
	&lt;input type="text" name="theme" size="30" /&gt;
&lt;/p&gt;
&lt;p&gt;
	&lt;label for="text"&gt;Текст письма:&lt;/label&gt;
	&lt;textarea rows="10" cols="20" name="text"&gt;&lt;/textarea&gt;
&lt;/p&gt;
&lt;p&gt;
	&lt;input type="submit" value="Отправить" /&gt;
&lt;/p&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;

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

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

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

Удачи!

Отправка e-mail в русской кодировке средствами PHP

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

Тело письма может быть текстом в любой кодировке. Немного сложнее дело обстоит с составляющими заголовка письма (Subject, From, To), они по стандарту должны быть в US-ASCII. Использование в заголовках кодированного текста регламентируется стандартом RFC-2047. Стандарт задает две возможные формы кодирования — BASE64 и Quoted-Printable. BASE64 более универсальна и работает в том числе для кодировки UTF-8, поэтому мы выбрали именно эту форму. MIME-совместимый почтовый клиент обязан уметь читать обе формы.

Далее код функции, который достаточно схематичен:

<?php

function send_mime_mail($name_from, // имя отправителя
                        $email_from, // email отправителя
                        $name_to, // имя получателя
                        $email_to, // email получателя
                        $data_charset, // кодировка переданных данных
                        $send_charset, // кодировка письма
                        $subject, // тема письма
                        $body, // текст письма
                        $html = FALSE, // письмо в виде html или обычного текста
                        $reply_to = FALSE
                        ) {
  $to = mime_header_encode($name_to, $data_charset, $send_charset)
                 . ‘ <‘ . $email_to . ‘>’;
  $subject = mime_header_encode($subject, $data_charset, $send_charset);
  $from =  mime_header_encode($name_from, $data_charset, $send_charset)
                     .’ <‘ . $email_from . ‘>’;
  if($data_charset != $send_charset) {
    $body = iconv($data_charset, $send_charset, $body);
  }
  $headers = «From: $from\r\n»;
  $type = ($html) ? ‘html’ : ‘plain’;
  $headers .= «Content-type: text/$type; charset=$send_charset\r\n»;
  $headers .= «Mime-Version: 1.0\r\n»;
  if ($reply_to) {
      $headers .= «Reply-To: $reply_to»;
  }
  return mail($to, $subject, $body, $headers);
}

function mime_header_encode($str, $data_charset, $send_charset) {
  if($data_charset != $send_charset) {
    $str = iconv($data_charset, $send_charset, $str);
  }
  return ‘=?’ . $send_charset . ‘?B?’ . base64_encode($str) . ‘?=’;
}

?>

Мы определили собственную функцию mime_header_encode() для преобразования каждого заголовка в MIME-совместимый формат, несмотря на то, что в PHP предусмотрена аналогичная функция mb_encode_mimeheader(). От встроенной функции нам пришлось отказаться, так как на нашем сервере (PHP 5.1.6) она работает некорректно (возвращает неверный результат).

Использование описанной функции достаточно простое, см. пример ниже. В случае, если кодировка отправки письма отличается от текущей кодировки данных, используется iconv() для преобразования кодировки.

<?php
send_mime_mail(‘Автор письма’,
               ‘[email protected]’,
               ‘Получатель письма’,
               ‘[email protected]’,
               ‘CP1251’,  // кодировка, в которой находятся передаваемые строки
               ‘KOI8-R’, // кодировка, в которой будет отправлено письмо
               ‘Письмо-уведомление’,
               «Здравствуйте, я Ваша программа!»);

?>


© Все права на данную статью принадлежат порталу webew.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в печатных изданиях допускается только с разрешения редакции.

Web-разработка • Yii2 и Laravel

Отправку почты рассмотрим на примере формы обратной связи с полями «Имя», «Почта» и «Сообщение». Нам потребуется создать контроллер, который будет показывать фому и обрабатывать POST-запрос от клиента. Потом добавим два роута и создам шаблон с формой. После этого нам потребуется создать класс FeedbackMailer, расширяющий Illuminate\Mail\Mailable и покопаться в настройках Laravel.

Форма обратной связи

Создаем контроллер FeedbackController:

> php artisan make:controller FeedbackController
namespace App\Http\Controllers;

use stdClass;
use App\Mail\FeedbackMailer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;

class FeedbackController extends Controller {
    public function index() {
        return view('feedback.index');
    }

    public function send(Request $request) {
        $request->validate([
            'name' => 'required|max:100',
            'email' => 'required|email|max:100',
            'message' => 'required|max:500',
        ]);

        $data = new stdClass();
        $data->name = $request->name;
        $data->email = $request->email;
        $data->message = $request->message;
        Mail::to($data->email)->send(new FeedbackMailer($data));
        return redirect()->route('feedback. index')
            ->with('success', 'Ваше сообщение успешно отправлено');
    }
}

Добавляем два маршрута в файл routes/web.php:

Route::get('/feedback', 'FeedbackController@index')->name('feedback.index');
Route::post('/feedback', 'FeedbackController@send')->name('feedback.send');

Создаем шаблон resources/views/feedback/index.blade.php:

@extends('layouts.app')

@section('content')
    <h2>Обратная связь</h2>
    @if (session('success'))
        <div role="alert">
            {{ session('success') }}
        </div>
    @endif
    @if ($errors->any())
        <div role="alert">
            <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
            </ul>
        </div>
    @endif
    <form method="post" action="{{ route('feedback.send') }}">
        @csrf
        <div>
            <input type="text" name="name" placeholder="Имя, фамилия"
                   required maxlength="100" value="{{ old('name') ?? '' }}">
        </div>
        <div>
            <input type="email" name="email" placeholder="Адрес почты"
                   required maxlength="100" value="{{ old('email') ?? '' }}">
        </div>
        <div>
        <textarea name="message" placeholder="Ваше сообщение"
                  required maxlength="500" rows="3">{{ old('message') ?? '' }}</textarea>
        </div>
        <div>
            <button type="submit">Отправить</button>
        </div>
    </form>
@endsection

Класс отправки почты

В Laravel каждый тип почтового сообщения (обратная связь, заказ в магазине), отправляемых приложением, представлен классом Mailable. Эти классы хранятся в директории app/Mail, которая будет создана при создании первого такого класса.

> php artisan make:mail FeedbackMailer
namespace App\Mail;

use stdClass;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class FeedbackMailer extends Mailable {

    use Queueable, SerializesModels;

    private $data;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(stdClass $data) {
        $this->data = $data;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build() {
        return $this->from('[email protected]', 'ООО ТД АВРОРА')
            ->subject('Форма обратной связи')
            ->view('email.feedback', ['data' => $this->data]);
    }
}

Чтобы не указывать заголовок письма From (от кого), можно задать это в файле . env:

APP_NAME="ООО ТД АВРОРА"
[email protected]
MAIL_FROM_NAME="${APP_NAME}"

Эти три значения используются далее в файле конфигурации отправки почты config/mail.php:

return [
    /* ... */
    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', '[email protected]'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],
    /* ... */
];
class FeedbackMailer extends Mailable {
    /* ... */
    public function build() {
        return $this->subject('Форма обратной связи')->view('email.feedback', ['data' => $this->data]);
    }
}

Шаблон почтового сообщения

Еще нам потребуется шаблон для письма resources/views/email/feedback.blade.php:

<h2>Форма обратной связи</h2>

<p><strong>Имя:</strong> {{ $data->name }}</p>
<p><strong>Почта:</strong> {{ $data->email }}</p>
<p><strong>Сообщение:</strong> {{ $data->message }}</p>

Отправка почты в log-файл

Теперь настройки Laravel для отправки писем. Для начала будем записывать письма просто в log-файл, для этого редактируем файл .env:

MAIL_MAILER=log

Эта настройка используется в файле конфигурации config/mail.php, где можно задать, с помощью какого mailer-а будут отправляться письма:

return [

    /*
     * Default Mailer
     */
    'default' => env('MAIL_MAILER', 'smtp'),

    /*
     * Mailer Configurations
     */
    'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'auth_mode' => null,
        ],

        'ses' => [
            'transport' => 'ses',
        ],

        'mailgun' => [
            'transport' => 'mailgun',
        ],

        'postmark' => [
            'transport' => 'postmark',
        ],

        'sendmail' => [
            'transport' => 'sendmail',
            'path' => '/usr/sbin/sendmail -bs',
        ],

        'log' => [
            'transport' => 'log',
            'channel' => env('MAIL_LOG_CHANNEL'),
        ],

        'array' => [
            'transport' => 'array',
        ],
    ],

    /*
     * Global From: Address
     */
    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example. com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],

    /*
     * Markdown Mail Settings
     */
    'markdown' => [
        'theme' => 'default',

        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],

];

Теперь отправленные письма будут записываться в log-файл, где их можно посмотреть:

Но не очень удобно, что письма записываются в один файл с сообщениями об ошибках. Так что создадим еще одну настройку в файле .env:

MAIL_LOG_CHANNEL=maillog

И добавим еще один канал (channel) в файле конфигурации логов приложения config/logging.php:

return [
    'channels' => [
        /* ... */
        'maillog' => [
            'driver' => 'single',
            'path' => storage_path('mails/laravel.log'),
        ],
    ],
];

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

Отправка через smtp-сервер

Отправлять будем через smtp-сервер Яндекса, для этого нужно получить пароль приложения здесь:

После этого редактируем файл конфигурации приложения .env:

APP_NAME="ООО ТД АВРОРА"
MAIL_MAILER=smtp
MAIL_HOST=smtp.yandex.ru
MAIL_PORT=465
[email protected]
MAIL_PASSWORD=zsfmsbxwdnbuanjk
MAIL_ENCRYPTION=ssl
[email protected]
MAIL_FROM_NAME="${APP_NAME}"

Файл вложения

Давайте добавим на форму еще одно поле для загрузки изображения и будем это изображение прикреплять к письму:

@extends('layouts.app')

@section('content')
    <h2>Обратная связь</h2>
    @if (session('success'))
        <div role="alert">
            {{ session('success') }}
        </div>
    @endif
    @if ($errors->any())
        <div role="alert">
            <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
            </ul>
        </div>
    @endif
    <form method="post" action="{{ route('feedback. send') }}" enctype="multipart/form-data">
        @csrf
        <div>
            <input type="text" name="name" placeholder="Имя, фамилия"
                   required maxlength="100" value="{{ old('name') ?? '' }}">
        </div>
        <div>
            <input type="email" name="email" placeholder="Адрес почты"
                   required maxlength="100" value="{{ old('email') ?? '' }}">
        </div>
        <div>
        <textarea name="message" placeholder="Ваше сообщение"
                  required maxlength="500" rows="3">{{ old('message') ?? '' }}</textarea>
        </div>
        <div>
            <input type="file" name="image" accept="image/png, image/jpeg">
        </div>
        <div>
            <button type="submit">Отправить</button>
        </div>
    </form>
@endsection
namespace App\Http\Controllers;

use stdClass;
use App\Mail\FeedbackMailer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;

class FeedbackController extends Controller {
    public function index() {
        return view('feedback. index');
    }

    public function send(Request $request) {
        $request->validate([
            'name' => 'required|max:100',
            'email' => 'required|email|max:100',
            'message' => 'required|max:500',
            'image' => 'mimes:jpeg,jpg,png|max:5000',
        ]);
        $image = $request->file('image');
        if ($image) { // был загружен файл изображения
            $raw = $image->get();
            $ext = $image->extension();
        }
        $data = new stdClass();
        $data->name = $request->name;
        $data->email = $request->email;
        $data->message = $request->message;
        $data->image = $raw ?? null;
        $data->ext = $ext ?? null;
        Mail::to($data->email)->send(new FeedbackMailer($data));
        return redirect()->route('feedback.index')
            ->with('success', 'Ваше сообщение успешно отправлено');
    }
}
namespace App\Mail;

use Illuminate\Support\Facades\Storage;
use stdClass;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class FeedbackMailer extends Mailable {

    use Queueable, SerializesModels;

    public $data;

    public function __construct(stdClass $feedback) {
        $this->data = $feedback;
    }

    public function build() {
        if ($this->data->image) {
            $this->attachData($this->data->image, 'image. '.$this->data->ext);
        }
        $this->subject('Форма обратной связи')
            ->view('email.feedback');
    }
}

Мы получаем из объекта http-запроса сырую строку файла и передаем классу FeedbackMailer. Но можно еще прикрепить файл из хранилища с помощью методов attachFromStorage() (используется диск по умолчанию) или attachFromStorageDisk() (диск надо указать самостоятельно).

class FeedbackController extends Controller {
    /* ... */
    public function send(Request $request) {
        /* ... */
        $image = $request->file('image');
        if ($image) { // был загружен файл изображения
            $path = $image->store('feedback', 'local');
        }
        $data = new stdClass();
        /* ... */
        $data->image = $path ?? null;
        Mail::to($data->email)->send(new FeedbackMailer($data));
        return redirect()->route('feedback.index')
            ->with('success', 'Ваше сообщение успешно отправлено');
    }
}
class FeedbackMailer extends Mailable {
    /* . .. */
    public function build() {
        if ($this->data->image) {
            $this->attachFromStorageDisk('local', $this->data->image);
        }
        $this->subject('Форма обратной связи')
            ->view('email.feedback');
    }
}

Мы сохраняем загруженное изображение в директорию storage/app/feedback и потом оттуда прикрепляем к письму. Смысла хранить изображение дальше нет, так что его можно удалить. Но сразу удалять нельзя — возникает ошибка, потому что файл удаляется до того, как будет прикреплен к письму. Видимо, нужно добавить обработчик события MessageSent (возникает после отправки) — и уже там удалить файл с диска.

Вместо заключения

Передать данные в шаблон можно через публичное свойство класса FeedbackMailer:

class FeedbackMailer extends Mailable {

    use Queueable, SerializesModels;

    public $data;

    public function __construct(stdClass $data) {
        $this->data = $data;
    }

    public function build() {
        return $this->subject('Форма обратной связи')->view('email. feedback');
    }
}

Чтобы изменить данные, прежде чем передать их шаблону, свойство должно быть объявлено как protected или private:

class FeedbackMailer extends Mailable {

    use Queueable, SerializesModels;

    private $data;

    public function __construct(stdClass $data) {
        $this->data = $data;
    }

    public function build() {
        return $this->subject('Форма обратной связи')
            ->view('email.feedback')
            ->with([
                'name' => $this->data->name,
                'email' => $this->data->email,
                'message' => $this->data->message,
            ]);;
    }
}

Метод withSwiftMessage() класса Mailable позволяет зарегистрировать анонимную функцию, которая будет вызываться экземпляром сообщения SwiftMailer перед отправкой сообщения. Это дает возможность кастомизировать сообщение перед тем как оно будет доставлено.

class FeedbackMailer extends Mailable {
    /* ... */
    public function build() {
        $this->subject('Форма обратной связи')
            ->view('email.feedback');
        $this->withSwiftMessage(function ($message) {
            $message->getHeaders()->addTextHeader('Custom-Header', 'HeaderValue');
        });
    }
}

Поиск: Laravel • PHP • POST • Web-разработка • Класс • Форма • Фреймворк • Письмо • Mailable • Теория

PHP: imap_mail — Руководство

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_mail — отправить сообщение электронной почты

Описание

imap_mail (строка $ - , строка $ тема , строка $ сообщение , строка | null $ additional_headers = null , строка | null $ cc = null , строка | null $ bcc = null , строка | null $ return_path = null ): bool

Параметры от до , куб. см и bcc все строки и все анализируются как »списки адресов RFC822.

Параметры

С по

Получатель

предмет

Тема письма

сообщение

Тело письма, см. Imap_mail_compose ()

additional_headers

В виде строки с дополнительными заголовками для установки в почте

куб.см
бкк

Приемники, указанные в bcc , получат mail, но исключаются из заголовков.

return_path

Используйте этот параметр, чтобы указать путь возврата при ошибке доставки почты. Это полезно при использовании PHP в качестве почтового клиента для нескольких пользователей.

Возвращаемые значения

Возвращает true в случае успеха или false в случае неудачи.

История изменений

Версия Описание
8.0,0 additional_headers , куб.см , bcc и return_path теперь допускают значение NULL.

Отправка электронных писем на PHP с помощью PHPMailer

PHPMailer, пожалуй, самая популярная библиотека PHP с открытым исходным кодом для отправки электронных писем. Впервые он был выпущен еще в 2001 году, и с тех пор он стал излюбленным способом программной отправки электронных писем разработчикам PHP, помимо нескольких других фаворитов фанатов, таких как Swiftmailer.

В этой статье мы поговорим о том, почему вам следует использовать PHPMailer вместо функции PHP mail () , и мы покажем несколько примеров кода о том, как использовать эту библиотеку.

Эта популярная статья была обновлена ​​в 2020 году и содержит самые свежие инструкции по работе с PHPMailer.

Является ли это альтернативой функции PHP

mail () ?

В большинстве случаев это альтернатива функции PHP mail () , но есть много других случаев, когда функция mail () просто недостаточно гибкая для достижения того, что вам нужно.

Прежде всего, PHPMailer предоставляет объектно-ориентированный интерфейс, тогда как mail () не является объектно-ориентированным. Разработчики PHP обычно не любят создавать строки $ headers и при отправке электронных писем с помощью функции mail () , потому что они требуют много экранирования. PHPMailer делает это проще простого. Разработчикам также необходимо писать грязный код (экранирование символов, кодирование и форматирование) для отправки вложений и электронных писем на основе HTML при использовании функции mail () , тогда как PHPMailer делает это безболезненно.

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

Дополнительные преимущества:

  • Он может печатать различные сообщения об ошибках на более чем 40 языках, когда ему не удается отправить электронное письмо.
  • Он имеет встроенную поддержку протокола SMTP и аутентификацию через SSL и TLS.
  • Он может отправлять альтернативную текстовую версию электронной почты для почтовых клиентов, отличных от HTML.
  • У него очень активное сообщество разработчиков, которое обеспечивает его безопасность и актуальность.

PHPMailer также используется популярными системами управления контентом PHP, такими как WordPress, Drupal и Joomla.

Установка PHPMailer

Вы можете установить PHPMailer с помощью Composer:

  композитору требуется phpmailer / phpmailer
  

Отправка электронной почты с локального веб-сервера с помощью PHPMailer

Вот простейший пример отправки электронного письма с локального веб-сервера с помощью PHPMailer:

   From = "[email protected]";
$ mail-> FromName = "Полное имя";


$ mail-> addAddress ("[email protected]", "Имя получателя");
$ mail-> addAddress ("[email protected]");


$ mail-> addReplyTo ("[email protected]", "Ответить");


$ mail-> addCC ("[email protected]");
$ mail-> addBCC ("bcc@example. com");


$ mail-> isHTML (правда);

$ mail-> Subject = "Текст темы";
$ mail-> Body = " Текст сообщения в HTML ";
$ mail-> AltBody = "Это текстовая версия содержимого электронной почты";

пытаться {
    $ mail-> send ();
    echo "Сообщение успешно отправлено";
} catch (исключение $ e) {
    echo «Ошибка почтовой программы:».$ mail-> ErrorInfo;
}
  

Код и комментарии должны быть достаточно ясными, чтобы объяснить все, что происходит.

Отправка электронного письма с вложениями

Вот пример того, как отправить электронное письмо с вложениями с помощью PHPMailer:

   From = "[email protected]";
$ mail-> FromName = "Полное имя";

$ mail-> addAddress ("recipient1 @ example.com "," Имя получателя ");


$ mail-> addAttachment ("файл.txt", "Файл.txt");
$ mail-> addAttachment ("images / profile. png");

$ mail-> isHTML (правда);

$ mail-> Subject = "Текст темы";
$ mail-> Body = " Текст сообщения в HTML ";
$ mail-> AltBody = "Это текстовая версия содержимого электронной почты";

пытаться {
    $ mail-> send ();
    echo "Сообщение успешно отправлено";
} catch (исключение $ e) {
    echo «Ошибка почтовой программы:». $ mail-> ErrorInfo;
}
  

Здесь мы прикрепляем два файла — файл .txt , который находится в том же каталоге, что и сценарий, и images / profile.png , который находится в каталоге images каталога сценария.

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

Поиск и устранение неисправностей

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

В зависимости от используемой системы, вероятно, наиболее частая ошибка, которую мы будем видеть, будет связана с запуском функции mail () в фоновом режиме:

Ошибка почтовой программы: не удалось создать экземпляр почтовой функции.

Если нам нужны более подробные сведения об ошибке, мы также можем добавить что-то вроде этого в предложение catch:

  print_r (error_get_last ());
  

Обычно проблема с почтовой функцией связана с отсутствующей настройкой почтового сервера, и в этом случае функция error_get_last вернет что-то вроде этого:

  Массив (
    [тип] => 2
    [message] => mail (): Не удалось подключиться к почтовому серверу через порт 25 localhost, проверьте настройки «SMTP» и «smtp_port» в php.ini или используйте ini_set ()
    [файл] => OUR_PATH \ vendor \ phpmailer \ phpmailer \ src \ PHPMailer. php
    [line] => 863
)
  

Это проблема, с которой мы, вероятно, сталкиваемся чаще всего, и мы можем легко решить ее с помощью SMTP.

Отображение локализованных сообщений об ошибках

$ mail-> ErrorInfo может возвращать сообщения об ошибках на 43 разных языках.

Чтобы отображать сообщения об ошибках на другом языке, скопируйте каталог language из исходного кода PHPMailer в каталог проекта.

Чтобы возвращать сообщения об ошибках, например, на русском языке, установите для объекта PHPMailer русский язык, используя следующий вызов метода:

  $ mail-> setLanguage ("ru");
  

Вы также можете добавить свои языковые файлы в каталог language .

Использование SMTP

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

SMTP — это протокол, используемый почтовыми клиентами для отправки запроса на отправку электронной почты на почтовый сервер. После того, как почтовый сервер проверяет электронную почту, он отправляет ее на целевой почтовый сервер.

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

   SMTPDebug = 3;

$ mail-> isSMTP ();

$ mail-> Host = "smtp.gmail.com";

$ mail-> SMTPAuth = true;

$ mail-> Имя пользователя = "[email protected]";
$ mail-> Password = "super_secret_password";

$ mail-> SMTPSecure = "tls";

$ mail-> Порт = 587;

$ mail-> From = "[email protected]";
$ mail-> FromName = "Полное имя";

$ mail-> addAddress ("name @ example. com "," Имя получателя ");

$ mail-> isHTML (правда);

$ mail-> Subject = "Текст темы";
$ mail-> Body = " Текст сообщения в HTML ";
$ mail-> AltBody = "Это текстовая версия содержимого электронной почты";

пытаться {
    $ mail-> send ();
    echo "Сообщение успешно отправлено";
} catch (исключение $ e) {
    echo «Ошибка почтовой программы:». $ mail-> ErrorInfo;
}
  

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

Одним из больших преимуществ использования удаленного SMTP над локальной почтой является то, что если вы используете функцию PHP mail () для отправки электронной почты с адресным доменом из , установленным на любое другое имя, кроме локального имени домена (имя сервера), тогда фильтры атаки почтового сервера получателя помечают его как спам. Например, если вы отправляете электронное письмо с сервера с фактическим именем хоста example.com с с адреса с адреса [email protected] по [email protected] , тогда серверы Yahoo отметят его как спам или отобразят сообщение пользователю, чтобы он не доверял электронной почте, потому что отправителем почты является example.com , и все же он выглядит так, как будто идет с gmail.com . Хотя у вас есть [email protected] , Yahoo не сможет это выяснить.

Получение писем с использованием POP3

PHPMailer также позволяет проверять POP-before-SMTP для отправки электронных писем.Другими словами, вы можете аутентифицироваться с помощью POP и отправлять электронную почту с помощью SMTP. К сожалению, PHPMailer не поддерживает получение писем с почтовых серверов по протоколу POP3. Он ограничивается только отправкой электронных писем.

Заключение

Если вы разработчик PHP, у вас мало шансов избежать программной отправки электронной почты. Хотя вы можете выбрать сторонние сервисы, такие как Mandrill или SendGrid, иногда это просто невозможно, а использование собственной библиотеки отправки электронной почты — еще меньше.Именно здесь на помощь приходит PHPMailer и его альтернативы (Zend Mail, Swift Mailer и т. Д.).

Вы можете узнать об API этой библиотеки в вики репозитория или в официальной документации.

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

Как использовать Sendmail с PHP

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

Что дает мне право на бесплатный перевод?

HostGator предоставляет бесплатные переводы для новых учетных записей в течение 30 дней после регистрации , а также для новых обновленных учетных записей. Для обновленных учетных записей это должно быть межсерверное обновление, чтобы соответствовать требованиям. Обратите внимание, что аккаунты с пониженной версией не имеют права на бесплатные переводы.

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

Полные передачи cPanel — это количество включенных передач cPanel в cPanel.

Макс. Ручные переводы — это максимальное количество ручных переводов, включенных в вашу учетную запись.

Всего бесплатных переводов — это общее количество веб-сайтов, которые мы переместим для вас.

Тип счета Всего бесплатных переводов Переводы через полную cPanel Макс.Ручные передачи
? Общий 1 1 2 1
? Реселлер 30 30 2 1 Без ограничений 2 10 на уровень VPS
? Dedicated (Basic) Unlimited 1 Unlimited 2 75? ) Безлимитный 1 Безлимитный 2 100

1 Хотя мы можем делать неограниченные переводы cPanel на cPanel для вас, в зависимости от вашей учетной записи, у вас будет ограниченное количество ручных переводов .

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

Несколько примеров: Учетная запись торгового посредника Aluminium включает до 30 бесплатных переводов. Из этих 30 у вас может быть 20 переводов cPanel на cPanel и 10 переводов вручную, или любая комбинация этих двух, что в сумме составляет 30 или меньше веб-сайтов.Другой пример: выделенный сервер Pro включает неограниченное количество переходов с cPanel на cPanel, это означает, что вы можете перенести 150 сайтов (или даже больше). Кроме того, поскольку общее количество переводов не ограничено, вы можете использовать до 100 переводов вручную.

Для получения дополнительной информации см. Нашу статью о поддержке переводов, свяжитесь с нашим отделом переводов по адресу [email protected] или позвоните по телефону 866.96.GATOR

404 — Страница не найдена

Войти Запомнить меня • Забыли пароль? Просмотреть корзину (0)

Переключить навигацию

  • Дом
  • Магазин
    • Просмотреть все
    • ——
    • Weebly
    • Виртуальный хостинг
    • Управляемый VPS
    • TurnKey
    • Неуправляемый VPS
    • Неуправляемый Windows VPS
    • Зарегистрируйте новый домен
    • Перенести домены к нам
  • Состояние сети
  • Свяжитесь с нами
  • Счет
    • Авторизоваться
    • ——
    • Забыл пароль?

    × Закрывать

    Название

    Загрузка…

    Загрузка …

    Закрывать Представлять на рассмотрение

    Как проверить и исправить функцию php mail ()

    Функция php mail () позволяет отправлять электронные письма прямо с php сценарий.


    Из этого туториала Вы узнаете, как проверить, правильно ли работает php mail.

    Протестируйте почту php () на вашем веб-сервере

    1. Создайте тестовый файл php с помощью текстового редактора и сохраните его. например как test.php:

    $ sender = ‘[email protected]’;
    $ recipient = ‘[email protected]’;

    $ subject = «проверка почты на php»;
    $ message = «тестовое сообщение php»;
    $ заголовки = ‘От:’. $ отправитель;

    if (почта ($ получатель, $ тема, $ сообщение, $ заголовки))
    {
    echo «Сообщение принято»;
    }
    иначе
    {
    echo «Ошибка: сообщение не принято»;
    }
    ?>

    2. Изменить $ отправителя и $ получателя в коде.

    3. Загрузите php-файл на свой веб-сервер.

    4. Откройте загруженный файл php в своем браузере на выполнить скрипт php .

    5. Выходные данные показывают либо «Сообщение принято», либо «Ошибка: Сообщение не принято ».

    chevron_right Сообщение принято:

    Откройте свой почтовый клиент, чтобы узнать, было ли сообщение доставлено по указанному Адрес электронной почты.
    (также проверьте папку со спамом!)

    Если сообщение было доставлено:

    • Все нормально — php mail работает.

    Если сообщение не было доставлено:

    • Некоторые провайдеры не допускают внешних получателей при использовании почты php. Измените получателя ($ recipient) в коде на локального получателя. Это означает использование адреса электронной почты из домена сервера, например если домен вашего сервера www.yourdomain.tld, затем адрес электронной почты получателя должно быть [email protected].
    • Загрузите измененный файл php и повторите попытку.
    • Если он по-прежнему не работает: измените отправителя ($ sender) на локального электронная почта (используйте тот же адрес электронной почты, что и для получателя).
    • Загрузите измененный файл php и повторите попытку.
    • Обратитесь к своему провайдеру, если он по-прежнему не работает.
      Сообщите своему провайдеру что стандартная функция php «mail ()» возвращает ИСТИНА, но не почта быть отправленным.
      Рекомендуется включить используемый тестовый скрипт php в покажите провайдеру, что проблема не в скрипте php использовал.

    chevron_right Ошибка: сообщение не принято

    Почта php может быть отключена:

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

    Некоторые провайдеры не разрешают внешним получателям при использовании php почта:

    • Измените получателя ($ recipient) в коде на локального получателя. Это означает использование адреса электронной почты из домена сервера, например если домен вашего сервера www.yourdomain.tld, то адрес электронной почты получателя должно быть [email protected].
    • Загрузите измененный файл php и повторите попытку.
    • Если он по-прежнему не работает: измените отправителя ($ sender) на локального электронная почта (используйте тот же адрес электронной почты, что и для получателя).
    • Загрузите измененный файл php и повторите попытку.

    Если вы проверили настройки php, попробовали локального получателя и он все еще не работает:

    • Свяжитесь со своим провайдером, если вы не можете включить php mail ().
      Сообщите своему провайдеру, что стандартная функция php mail () возвращает FALSE.
      Рекомендуется включить используемый тестовый скрипт php, чтобы показать вашего провайдера, что проблема не вызвана используемым скриптом php.
    Отказ от ответственности: информация на этой странице предоставляется «как есть» без каких-либо гарантий. Кроме того, Arclab Software не гарантирует и не делает никаких заявлений. относительно использования или результатов использования с точки зрения правильности, точности, надежности, актуальности или иным образом. См .: Лицензионное соглашение

    Отправляйте электронные письма с помощью PHP-скрипта

    Форма Nicepage поддерживает отправку электронных писем с помощью сценария PHP для экспорта в HTML, начиная с Nicepage 2.7 версия.

    Скрипт PHP позволяет отправлять электронные письма без использования внешних ресурсов. Обратите внимание, что отправка писем осуществляется на стороне сервера. Следовательно, вам необходимо настроить сервер для отправки электронных писем. Следующая информация содержит информацию о том, как настроить сервер для отправки электронных писем.

    Удаленный сервер и хостинг GoDaddy

    Скрипт Nicepage использует почтовую функцию PHP. Поэтому PHP должен быть правильно установлен и настроен в файле php.ini на вашем сервере.

    Пожалуйста, прочтите дополнительную информацию о конфигурации PHP в Статье 1 или Статье 2.

    Обычно хостинг-провайдеры уже правильно настроили PHP. Например, отправка электронной почты по умолчанию работает на хостинге GoDaddy. Поэтому вы можете использовать сценарий PHP, созданный с помощью Nicepage.

    Настройка локального хоста

    Если вы запускаете проект на своем локальном хосте (XAMPP, WAMP) и вам нужно протестировать отправку электронной почты во время разработки, вам необходимо настроить сервер вручную.

    Прочтите следующие статьи:

    Также настройте параметры «Небезопасные приложения» в настройках безопасности Google, чтобы избежать проблем с отправкой электронной почты.

    Рекомендация

    Мы рекомендуем использовать интеграцию reCAPTCHA, чтобы избежать спама, отправляемого из формы.

    Подробнее о других методах отправки формы

    Форма Nicepage поддерживает отправку электронных писем с помощью сценария PHP для экспорта HTML, начиная с Nicepage 2.7 версия. ! send-emails-using-php-script.png! Скрипт PHP позволяет отправлять электронные письма без использования внешних ресурсов. Обратите внимание, что отправка писем осуществляется на стороне сервера. Следовательно, вам необходимо настроить сервер для отправки электронных писем. Следующая информация содержит информацию о том, как настроить сервер для отправки электронных писем. ## Удаленный сервер и хостинг GoDaddy Скрипт Nicepage использует почтовую функцию PHP. Поэтому PHP должен быть правильно установлен и настроен в файле php.ini на вашем сервере. Пожалуйста, прочтите дополнительную информацию о конфигурации PHP в [статье 1] (https://developernote.com/2012/07/how-i-configured-sendmail-for-php-on-ubuntu-server-12-04/) или [Статья 2] (https://pepipost.com/tutorials/sendmail-in-php-complete-guide/). Обычно хостинг-провайдеры уже правильно настроили PHP. Например, отправка электронной почты по умолчанию работает на хостинге GoDaddy. Поэтому вы можете использовать сценарий PHP, созданный с помощью Nicepage. ## Настройка локального хоста Если вы запускаете проект на своем локальном хосте (XAMPP, WAMP) и вам нужно протестировать отправку электронной почты во время разработки, вам необходимо настроить сервер вручную.Пожалуйста, прочтите следующие статьи: — [Как отправить электронную почту с локального хоста с помощью PHP] (https://www.phpflow.com/php/how-to-send-email-from-localhost-using-php/) — [Как отправлять почту с локального хоста XAMPP с помощью Gmail] (https://meetanshi.com/blog/send-mail-from-localhost-xampp-using-gmail/) Кроме того, настройте параметры «Небезопасные приложения» в настройках безопасности Google, чтобы избежать проблем с отправкой электронной почты. ## Рекомендация Мы рекомендуем использовать [reCAPTCHA] (https: // nicepage.com / doc / article / 61415 / recaptcha-integration), чтобы избежать спама, отправленного из формы. Подробнее о других методах [как отправить форму] (страница: 4216)

    Почему функция PHP Mail не отправляет почту?

    Теоретически отправка электронной почты с помощью функции PHP mail () должна быть простой задачей. В «mail ()» всего 3 элемента: получатель, тема и сообщение, а электронное письмо доставляется всего с одной строкой кода.

    Но, как и многие вещи, которые кажутся такими простыми, функция PHP mail () не всегда работает так гладко, и может быть сложно определить, почему.Это может быть, например, из-за того, что вам не хватает необходимых параметров, есть опечатки в адресе электронной почты получателя или вам нужно настроить ретранслятор SMTP.

    Из всех возможных вариантов того, почему ваш PHP mail () не отправляет электронную почту, мы обнаружили, что большинство проблем связано с неправильной настройкой Postfix. Мы подробно рассмотрим Postfix, как его правильно настроить, и протестируем его, чтобы убедиться, что ваша почта отправляется.

    Что такое Postfix?

    Postfix — это бесплатный агент передачи почты с открытым исходным кодом, который маршрутизирует и доставляет электронные письма.Он следует протоколу SMTP и работает в Unix-подобных операционных системах, включая macOS.

    Postfix настолько широко используется, что предустановлен на большинстве компьютеров, отличных от Windows. Хотя предварительно установить Postfix удобно, это может означать, что он не был правильно настроен, что приведет к сбою в работе PHP mail ().

    Как настроить Postfix?

    Прежде чем мы проверим, правильно ли настроен Postfix, давайте сначала проверим, установлен ли он.

    В своем терминале выполните следующую команду:

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

    Если он не был установлен, ознакомьтесь с документацией Postfix или обратитесь к своему хосту за инструкциями по установке.

    Postfix имеет несколько требований, которые должны быть выполнены для правильной отправки электронных писем.

    Сначала измените локальную конфигурацию Postfix.Вы можете загрузить редактор прямо со своего терминала, выполнив следующую команду:

    После открытия убедитесь, что следующие 4 переменные определены следующим образом:

    И вуаля! Сохраните изменения и перезапустите Postfix с помощью `sudo postfix reload`.

    Мы обнаружили, что наиболее важной из этих переменных является myhostname. Если вы не определите эту переменную, ваша локальная среда не сможет назначить местоположение по умолчанию для отправки электронной почты. Используйте реальный домен или что-то произвольное (как в примере выше) для выполнения этого значения.

    Как протестировать Postfix и PHP mail ()

    Чтобы проверить, работает ли Postfix, а затем PHP mail (), мы создадим простой скрипт для запуска. В вашем любимом текстовом редакторе или интегрированной среде разработки (IDE) создайте файл с именем `mail.php` и включите следующий код:

    Не забудьте заменить переменную `$ to` своим фактическим адресом электронной почты. В своем терминале запустите программу с помощью следующей команды и проверьте свою электронную почту:

    Завершение

    Отправка электронной почты с помощью PHP mail () довольно проста, что делает ее еще более неприятной, если она работает некорректно.Помните о конфигурации Postfix, если вы столкнетесь с ошибками при отправке.

    Спросите себя:

    1. Установлен ли на вашем компьютере Postfix?
    2. Определены ли у вас 4 переменные, в частности «myhostname»?
    3. Вы добавили свой адрес электронной почты (и правильно его написали) при тестировании?

    Если у вас все еще возникают проблемы с PHP mail (), который не отправляет электронную почту, ознакомьтесь с этим ответом на StackOverflow, чтобы получить дополнительные идеи по устранению неполадок.