Если ошибок нет отправить email

Здравствуйте! Почему-то не могу отправить сообщения с формы на сайте. Сайт на wordpress, но форма без плагина. Используется простой скрипт:

<?php
//Если форма отправлена
if(isset($_POST['submit'])) {

	//Проверка Поля ИМЯ
	if(trim($_POST['contactname']) == '') {
		$hasError = true;
	} else {
		$name = trim($_POST['contactname']);
	}
	//Проверка правильности ввода EMAIL
	if(trim($_POST['email']) == '')  {
		$hasError = true;
	} else if (!preg_match("/^[a-zA-Z0-9_-.]+@[a-zA-Z0-9-]{2,}.[a-zA-Z0-9-.]+$/i", trim($_POST['email']))) {
		$hasError = true;
	} else {
		$email = trim($_POST['email']);
	}
	//Проверка Поля Компания
	if(trim($_POST['company']) == '') {
		$hasError = true;
	} else {
		$company = trim($_POST['company']);
	}

	//Проверка поля ТЕМА
	if(trim($_POST['subject']) == '') {
		$hasError = true;
	} else {
		$subject = trim($_POST['subject']);
	}

	//Проверка поля Телефон
	if(trim($_POST['tel']) == '') {
		$hasError = true;
	} else {
		$tel = trim($_POST['tel']);
	}
	
	//Проверка наличия ТЕКСТА сообщения
	if(trim($_POST['message']) == '') {
		$hasError = true;
	} else {
		if(function_exists('stripslashes')) {
			$comments = stripslashes(trim($_POST['message']));
		} else {
			$comments = trim($_POST['message']);
		}
	}


	//Если ошибок нет, отправить email
	if(!isset($hasError)) {
		$emailTo = 'test@ya.ru'; //Получатель
		$myname = 'test@ya.ru'; //Ящик, выступающий отправителем
		$body = "Имя: $name nEmail: $email nTelephone: $tel nn $company nn $comments";
		$headers = 'From: My Site <'.$emailTo.'>' . "rn" . 'Reply-To: ' . $tel;
		mail($emailTo, $subject, $body, 'From:'.$myname. "rn" . "MIME-Version: 1.0rnContent-type: text/plain; charset=utf-8");
		//mail($emailTo, $subject, $body, $headers);
		$emailSent = true;
	}
}
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input name="contactname" type="text"  required="required"  placeholder="Name*">
<input name="company" type="text"  required="required"  placeholder="Компания">
<input name="tel" type="tel"  required="required"  placeholder="Phone*">
<input name="email" type="email"  placeholder="Email*">
<input name="subject" type="text" class="form-control" required="required"  placeholder="Subject*">
<textarea name="message" placeholder="Сообщение"></textarea>
<?php if(isset($hasError)) { //Если найдены ошибки ?>
<p style="padding-bottom: 30px;text-align: center;">Please check if all fields are correct.</p>
<?php } ?>
<?php if(isset($emailSent) && $emailSent == true) { //Если письмо отправлено ?>
<p style="padding-bottom: 30px;text-align: center;">Thank you!</p>	
<?php } ?>
<button name="submit" type="submit" >SEND</button>
</form>

В логах пусто. Писем на почте нет. В чем ошибка? Или подскажите 100% работающий скрипт для отправки простой формы (без ajax, валидации) с выводом сообщения при отправке. Сайт на wordpress

5 / 11 / 4

Регистрация: 02.04.2016

Сообщений: 351

1

Проверить форму для отправки сообщения с сайта

21.01.2017, 07:20. Показов 5293. Ответов 8


Студворк — интернет-сервис помощи студентам

Доброго времени суток
Где и как можно проверить работает ли мой код на PHP для отправки формы?
У меня бесплатный хостинг, судя по всему он не поддерживает ПХП, при вставке кода в хтмл страницу (пробовал вставлять и в body и в head) пишет следующее: HTML doesn`t support processing instructions



0



Эксперт PHP

3105 / 2590 / 1219

Регистрация: 14.05.2014

Сообщений: 7,236

Записей в блоге: 1

21.01.2017, 10:40

2

Newibe, скачать PHP себе на машину и запустить встроенный сервер PHP. Для ваших целей вполне сойдёт. Делается очень просто:

  1. Скачиваете и устанвливаете PHP.
  2. Прописываете пути в переменных среды (необязательный пункт)
  3. Открываете терминал/командную строку.
  4. Выполняете команду

    Код

    Путь/к/php -S localhost:8080 -t путь/к/папке/с/вашим/php-файлом

  5. Не закрываете командную строку.
  6. Открываете браузер и в адресную строку вводите http://localhost:8080/имя_вашего_файла.php
  7. После того, как поработали с файлом, в командной строке нажимаете [Ctrl]+[C] и закрываете её.

Как я и сказал, все очень просто.

Так же есть сайты-песочницы, но на таких сайтах есть черный список функций — это функции работы с файловой системой, базой данных и некторые другие. Самые популярные — это http://ideone.com/ и http://sandbox.onlinephpfunctions.com/



1



5 / 11 / 4

Регистрация: 02.04.2016

Сообщений: 351

21.01.2017, 11:33

 [ТС]

3

Kerry_Jr, не выходит в песочницах. у меня получается скрипт на пхп + хтмл код самой формы. если я ввожу в песочницу просто пхп скрипт, то он выдает это:
1 => PHP code tester Sandbox Online
foo => bar
2 => 5
5 => 89009
case => Random Stuff: 827
PHP Version => 7.0.3
И как тут понять, отправляет ли скрипт сообщение на почту или нет?
если же я добавляю код формы на хтмл, то он выдает тоже сообщение + хтмл код в виде текста.
Если же я добавляю код всей страницы целиком, то он выдает ошибку:
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, contact@ideone.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

А вы не могли бы у себя проверить работает ли код или нет? С меня огромная благодарность.



0



miketomlin

Заблокирован

21.01.2017, 12:36

4

Выкладывайте код. Конфиденс. инфо вроде ящика-получателя можно в личку.



1



Newibe

5 / 11 / 4

Регистрация: 02.04.2016

Сообщений: 351

21.01.2017, 13:05

 [ТС]

5

miketomlin, премного благодарен!!!

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
  //Если форма отправлена
  if(isset($_POST['submit'])) {
 //Проверка Поля ИМЯ
  if(trim($_POST['contactname']) == '') {
  $hasError = true;
  } else {
  $name = trim($_POST['contactname']);
  }
 //Проверка правильности ввода EMAIL
  if(trim($_POST['email']) == '')  {
  $hasError = true;
  } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+.[A-Z]{2,4}$", trim($_POST['email']))) {
  $hasError = true;
  } else {
  $email = trim($_POST['email']);
  }
 //Проверка наличия ТЕКСТА сообщения
  if(trim($_POST['message']) == '') {
  $hasError = true;
  } else {
  if(function_exists('stripslashes')) {
  $comments = stripslashes(trim($_POST['message']));
  } else {
  $comments = trim($_POST['message']);
  }
  }
 //Если ошибок нет, отправить email
  if(!isset($hasError)) {
  $emailTo = 'ТУТ ПОЧТА'; //Сюда введите Ваш email
  $body = "Name: $name nnEmail: $email nnComments:n $comments";
  $headers = 'From: My Site <'.$emailTo.'>' . "rn" . 'Reply-To: ' . $email;
 mail($emailTo, $body, $headers);
  $emailSent = true;
  }
  }
  ?>
Javascript
1
2
3
4
5
6
<script src="jquery.validate.pack.js" type="text/javascript"></script>
<script type="text/javascript">
      $(document).ready(function(){
      $("#contactform").validate();
      });
  </script>
HTML5
1
2
3
4
5
6
7
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="contactform"><ul>
                    <li><input type="text" class="required" class="grey-text" name="contactname" id="contactname" value="Ваше имя"/></li>
                    <li><input type="text" class="required" class="grey-text" name="cellular" value="Ваш телефон"/></li>
                    <li><input type="text" class="required email" class="grey-text" name="email" id="email" value="Ваш email"/></li>
                    <li><textarea class="required" rows="10" cols="45" name="message" id="message" placeholder="Ваш вопрос"></textarea></li>
                    <li><input type="submit" value="Отправить" name="submit"></li>
                    </ul></form>

электронную почту отправлю в ЛС



0



miketomlin

Заблокирован

21.01.2017, 14:00

6

Лучший ответ Сообщение было отмечено Newibe как решение

Решение

У вас параметра $subject нет. Воткните пока вместо mail след. код:

PHP
1
file_put_contents('form.log',$headers."rnt---rn".$body."rnt---rn",FILE_APPEND);

Потестите форму сами, а мне пришли form.log, если тестовые данные будут вас удовлетворять. Во From подставьте переменную с др. ящиком, например noreply@example.com (я перед запуском теста заменю example.com на какой-нибудь др. домен, с которого разрешено отправлять письма на сервере).



0



5 / 11 / 4

Регистрация: 02.04.2016

Сообщений: 351

22.01.2017, 03:53

 [ТС]

7

miketomlin, я убрал параметр subject. потому что у меня в форме его нет. а он что обязателен?
а вообще, спасибо за предложенную помощь. но я разобрался с песочницей, и там вышло сообщение что тест прошел «Успешно».



0



miketomlin

Заблокирован

22.01.2017, 10:03

8

Цитата
Сообщение от Newibe
Посмотреть сообщение

а он что обязателен?

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

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



0



5 / 11 / 4

Регистрация: 02.04.2016

Сообщений: 351

22.01.2017, 10:12

 [ТС]

9

miketomlin, ну вообще да, меня интересует именно придет ли письмо. но раз в песочнице результат «Успешно», значит скрипт работает.
А по поводу документации, поймите меня правильно, я не учу ПХП, мне он нужен в этом единичном случае сделать форму обратной связи и все. Поэтому не хочется вникать ни в какую документацию. По поводу «subject» я ж его специально убрал из скрипта, поэтому не понимаю о каких параметрах вы говорите. Неужели все скрипты для отправки формы с параметром subject? Да вот нет! только сегодня отправлял письмо с сайта питерского ВУЗа, не было там subject. Да и по памяти много форм помню без темы



0



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

Проверка настроек компьютера и браузера

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

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

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

Удаление кэша, истории браузера и файлов cookies для решения проблем с почтой

  • Проверка правильности набранного адреса. Возможно, при наборе электронного адреса получателя была допущена ошибка. Если хотя бы один символ будет введен неправильно, ничего отправить не получится. Помните, что адрес почтового ящика может содержать только английский буквы, цифры и некоторые знаки. Точки в конце и пробелов в адресе быть не должно.
  • Проверка интернет-соединения. Можно просто попробовать загрузить другой сайт. Если проблемы с сетью действительно имеются, рекомендую сначала перезагрузить модем/Wi-Fi роутер. Не помогло? Звоните провайдеру!
  • Проверка работы браузера. Может, нужный вам почтовый сервис плохо работает именно в том интернет-обозревателе, которым вы на данный момент пользуетесь. Попробуйте войти в почту с другого браузера и снова отправить письмо.

А что делать, если после отправки приходит отчет о недоставленном сообщении? Возможно, что указанный вами электронный адрес на данный момент не существует.

Вот еще почему не отправляется электронное письмо – почтовый ящик недоступен по каким-либо причинам. Например, из-за переполненности (следует удалить старые письма) или появления проблем с почтовым сервером (лучше подождать некоторое время, как минимум полчаса, и повторить отправку письма).

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

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

Письма не отправляются с ящика Gmail

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

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

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

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

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

Чипсендер

Проблема с Mail.Ru

Отправка сообщения о проблеме в службу поддержки Mail.Ru

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

Еще один вариант – к письму был приложен файл большого объема. Он либо превышает установленные ограничения сервиса Мэйл.Ру, либо из-за низкой скорости интернета не загружается.

Если вы слишком часто посылаете со своего почтового ящика письма одинакового содержания, сервис может заподозрить вас в распространении спама. Такое бывает, когда ящик взламывают. Решить подобное можно прямо на сайте сервиса (обычно предлагается сменить пароль). Еще следует проверить папку «Исходящие» и узнать, какие именно письма отправлялись с вашего ящика.

Не помогло – обращайтесь в Помощь Mail.Ru. Переходите в раздел «Письма» и ищите соответствующий пункт. Потом отметьте тип проблемы и отправьте запрос. Сотрудники решат проблему.

Письма не уходят с Яндекс.Почты

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

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

Если письмо попало в «Черновики», попробуйте отправить его повторно. Когда в письме есть вложения, отправка может занять просто немного больше времени. 

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

Проблемы с электронной почтой Rambler

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

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

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

Проблемы с почтовыми клиентами

Множество людей пользуются специальными почтовыми клиентами. В таких приложениях можно принимать и отправлять сообщения с разных аккаунтов и от нескольких пользователей. Но даже тут не исключены проблемы в работе.

Microsoft Outlook

Если письмо в Microsoft Outlook не отправляется, сначала надо проверить нижнюю часть окна программы. Если в ней указано «Автономная работа», «Попытка подключения…» или «Отключено», значит, связь с сервером электронной почты не была установлена. Тут поможет повторная отправка письма.

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

Проблема с отправкой может настичь пользователя при недавней смене пароля. В Microsoft Outlook все меняется в «Настройках учетных записей». Влияние антивируса тоже не исключается.

Когда ничего из вышеперечисленного не помогает, следует восстановить программу Microsoft Outlook. Когда и восстановление не помогает, проверять следует уже профиль, с которого вы пытаетесь отправить сообщение.

eM Client

Решать проблемы с отправкой в клиенте eM стоит исходя из сообщения об ошибке. Для данной программы очень важна правильная конфигурация электронной почты. Решить подобную проблему можно изменением порта для SMTP-сервера на 465 с помощью SSL. Если это не сработает, стоит использовать порт 587 с TLS или порт 25 с SSL.

Еще eM Client может блокироваться популярными антивирусными программами. Ранее такое происходило, но производители защитного ПО исправили проблему с выходом обновления. Должно помочь временное отключение антивируса или даже удаление.

В крайнем случае следует переустановить eM Client. Может быть, в момент установки возникли какие-то повреждения.

Заключение

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

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

Существует множество причин, по которым ваш скрипт не отправляет электронные письма. Трудно диагностировать эти вещи, если нет очевидной синтаксической ошибки. Без этого вам нужно пройти через контрольный список ниже, чтобы найти возможные потенциальные проблемы, с которыми вы можете столкнуться.

Убедитесь, что отчет об ошибках включен и установлен для сообщения обо всех ошибках

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

error_reporting(-1);
ini_set('display_errors', 'On');
set_error_handler("var_dump");

См. Этот ответ для получения дополнительной информации об этом.

Убедитесь, что функция mail() вызывается

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

Убедитесь, что функция mail() вызывается правильно

bool mail (string $ to, string $ subject, string $ message [, string $ дополнительные_headers [, string $ дополнительные_параметры]])

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

Если ваш запрос на mail() не имеет правильных параметров в правильном порядке, он также потерпит неудачу.

Проверка почтовых журналов сервера

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

Проверка сбоя подключения к порту

Порт-блок — очень распространенная проблема, с которой сталкиваются большинство разработчиков, интегрируя свой код для доставки электронной почты с использованием SMTP. И это можно легко проследить на сервере maillogs (расположение сервера почтового журнала может варьироваться от сервера к серверу, как объяснялось выше). Если вы находитесь на сервере общедоступного хостинга, порты 25 и 587 по умолчанию остаются заблокированными. Этот блок специально предназначен вашим хостинг-провайдером. Это справедливо даже для некоторых выделенных серверов. Когда эти порты заблокированы, попробуйте подключиться с помощью порта 2525. Если вы обнаружите, что порт также заблокирован, единственное решение — связаться с вашим хостинг-провайдером, чтобы разблокировать эти порты.

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

Используйте порты 25 или 587 для соединений с обычным /TLS и с портом 465 для соединений SSL. Для большинства пользователей предлагается использовать порт 587, чтобы избежать ограничений по скорости, установленных некоторыми хостинг-провайдерами.

Не используйте оператор подавления ошибок

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

Если ваш код содержит @mail(...) вы можете скрывать важные сообщения об ошибках, которые помогут вам отладить это. Удалите @ и проверьте, не сообщаются ли какие-либо ошибки.

Это целесообразно только после проверки с error_get_last() сразу для конкретных отказов.

Проверьте возвращаемое значение mail()

Функция mail():

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

Это важно отметить, потому что:

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

Таким образом, FALSE поможет указать вам в правильном направлении, тогда как TRUE не обязательно означает, что ваша электронная почта была успешно отправлена. Это важно отметить!

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

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

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

Проверьте папки спама; предотвращать помехи от сообщений электронной почты как спам

Зачастую по различным причинам электронные письма, отправленные через PHP (и другие языки программирования на стороне сервера), попадают в папку спама получателя. Всегда проверяйте их перед тем, как устранить неисправность вашего кода.

Чтобы избежать отправки почты, отправленной через PHP, в папку спама-получателя, вы можете делать различные действия, как в вашем PHP-коде, так и в других целях, чтобы минимизировать вероятность того, что ваши письма будут помечены как спам. Хорошие советы от Michiel de Mare включают:

  • Используйте методы проверки подлинности электронной почты, такие как SPF и DKIM, чтобы доказать, что ваши электронные письма и ваше доменное имя принадлежат друг другу, и для предотвращения подмены имени домена. На веб-сайте SPF есть мастер для создания DNS-информации для вашего сайта.
  • Проверьте обратный DNS, чтобы убедиться, что IP-адрес вашего почтового сервера указывает на имя домена, которое вы используете для отправки почты.
  • Убедитесь, что IP-адрес, который вы используете, не включен в черный список
  • Убедитесь, что адрес ответа — это действительный существующий адрес.
  • Используйте полное, настоящее имя адресата в поле Кому, а не только адрес электронной почты (например, "John Smith" <[email protected]>).
  • Контролируйте свои учетные записи о злоупотреблениях, такие как [email protected] и [email protected]. Это означает — убедитесь, что эти учетные записи существуют, читайте, что им прислали, и поступайте по жалобам.
  • Наконец, очень легко отказаться от подписки. В противном случае ваши пользователи откажутся от подписки, нажав кнопку спама, и это повлияет на вашу репутацию.

См. Как вы уверены, что адрес электронной почты, который вы отправляете программно, автоматически не помечен как спам? для получения дополнительной информации по этой теме.

Убедитесь, что все почтовые заголовки поставлены

Некоторые спам-программы отклонят почту, если отсутствуют общие заголовки, такие как «От» и «Ответ на»:

$headers = array("From: [email protected]",
    "Reply-To: [email protected]",
    "X-Mailer: PHP/" . PHP_VERSION
);
$headers = implode("rn", $headers);
mail($to, $subject, $message, $headers);

Убедитесь, что заголовки сообщений не имеют синтаксических ошибок

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

$headers = array("From [email protected]", // missing colon
    "Reply To: [email protected]",      // missing hyphen
    "X-Mailer: "PHP"/" . PHP_VERSION      // bad quotes
);

Убедитесь, что значение получателя правильно

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

$to = '[email protected]';
// other variables ....
mail($recipient, $subject, $message, $headers); // $recipient should be $to

Другой способ проверить это — записать код получателя в вызов функции mail():

mail('[email protected]', $subject, $message, $headers); 

Это может применяться ко всем параметрам mail().

Отправить на несколько аккаунтов

Чтобы устранить проблемы с электронной почтой, отправьте свое электронное письмо на несколько учетных записей электронной почты у разных поставщиков электронной почты. Если ваши электронные письма не поступают в учетную запись пользователя Gmail, отправьте те же письма на учетную запись Yahoo, учетную запись Hotmail и обычную учетную запись POP3 (например, вашу учетную запись электронной почты, предоставленную поставщиком услуг Интернета).

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

Убедитесь, что код соответствует методу формы

Если вы установили метод формы в POST, убедитесь, что вы используете $_POST для поиска значений формы. Если вы установили его в GET или не установили его вообще, убедитесь, что вы используете $_GET для поиска значений формы.

Убедитесь, что значение action формы указывает на правильное местоположение

Убедитесь, что атрибут action формы содержит значение, указывающее на ваш почтовый код PHP.

<form action="send_email.php" method="POST">

Убедитесь, что веб-хост поддерживает отправку электронной почты

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

Электронная почта к их технической поддержке (после поездки к их онлайн-поддержке или FAQ) должна уточнить, доступны ли возможности электронной почты на вашем сервере.

Убедитесь, что почтовый сервер localhost настроен

Если вы работаете на своей локальной рабочей станции с помощью WAMP, MAMP или XAMPP, сервер электронной почты, вероятно, не установлен на вашей рабочей станции. Без него PHP не может отправлять почту по умолчанию.

Вы можете преодолеть это, установив базовый почтовый сервер. Для Windows вы можете использовать бесплатную Mercury Mail.

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

Включить собственный пользовательский mail.log

В дополнение к файлу журнала MTA и PHP вы можете включить ведение журнала для функции mail(). Он не записывает полное взаимодействие с SMTP, но, по крайней мере, выполняет функции вызова и сценарий вызова.

ini_set("mail.log", "/tmp/mail.log");
ini_set("mail.add_x_header", TRUE);

Подробнее см. Http://php.net/manual/en/mail.configuration.php. (Лучше всего включить эти опции в возможностях php.ini или .user.ini или .htaccess.)

Проверьте с помощью службы проверки почты

Существуют различные службы проверки доставки и спама, которые вы можете использовать для тестирования вашей настройки MTA/webserver. Обычно вы отправляете почтовый пробник To: их адрес, затем получаете отчет о доставке и более конкретные отказы или анализы позже:

  • mail-tester.com (бесплатный/простой)
  • glockapps.com (бесплатно/$$$)
  • senforensics.com (регистрация/$$$)
  • mailtrap.io (pro/$$$)
  • ultratools/…/emailTest (только для проверки /MX)
  • Различные: http://www.verticalresponse.com/blog/7-email-testing-delivery-tools/

Использовать другую почтовую программу

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

  • Наиболее популярным является: PHPMailer
  • Точно так же: SwiftMailer
  • Или даже старшая PEAR :: Mail.

Все они могут быть объединены с профессиональным SMTP-сервером/поставщиком услуг. (Поскольку типичные общие 15/15 общие планы веб-хостинга поражают или пропускают, когда дело доходит до настройки/настройки электронной почты).

Письма не приходят на электронную почту. В чем причина? Как решить проблему?

Проверь все по списку

  • Проверь в почте папку «Спам», «Нежелательные» — письмо могло попасть туда.
  • Некоторые почтовые службы автоматически распределяют письма по папкам, например: «Входящие», «Рассылки», «Социальные сети» — если у тебя тоже так, проверь все папки.
  • Проверь, какая сейчас настроена сортировка писем. Может быть, новые письма появляются в самом конце списка, а не в самом начале. А может быть, письма отсортированы по размеру, а не по дате.
  • Подожди. Письмо может прийти не сразу. Нет гарантированного срока доставки электронной почты, хотя обычно она приходит быстро.
  • На компьютере, в браузере — обнови страницу (комбинация клавиш Ctrl-F5).
  • Проверь, не переполнен ли твой почтовый ящик, достаточно ли свободного места. Письма во входящих можно отсортировать по размеру, просмотреть самые большие и удалить те, которые больше не нужны.
  • Проверь, нет ли адреса отправителя в черном списке в твоей почте. Иногда кого-нибудь добавляют туда случайно или забывают удалить оттуда.
  • Вспомни, не настраивал ли ты фильтры в почте, которые могут автоматически удалять письма, пересылать, перемещать в другую папку и т.п.
  • Если ты пользуешься почтовой программой (почтовым клиентом) — например, Outlook — проверь, не включен ли автономный режим, в котором не загружаются новые письма. Если это так, то выключи этот режим и нажми кнопку получения/отправки почты.
  • На какой адрес тебе отправили письмо? Ты уверен, что его записали правильно? Если ты диктовал адрес, то в нем легко могли сделать ошибку. Одна неправильная буква — и письмо не отправится. Тогда отправителю придет сообщение об ошибке, что такого адреса нет. Причиной ошибки могут также быть кавычки, точка в конце адреса, лишние пробелы.
  • Ты уверен, что тебе отправили письмо? Довольно часто люди лгут или забывают, что должны были отправить письмо.
  • Попробуй сам отправить письмо человеку, а когда он получит его, пусть нажмет Ответить.
  • Если тебе должно прийти письмо с сайта или от какого-то сервиса, зайди туда и убедись, что адрес указан абсолютно правильно.
  • Если письмо не приходит на Яндекс.Почту, нужно убедиться, что твой почтовый ящик не заблокирован. Для этого зайди в Яндекс.Паспорт и привяжи свой действующий номер мобильного телефона. Убедись, что в персональной информации указаны реальные имя и фамилия. Если блокировка была, то в течение двух часов ее должны снять.
  • Уточни у отправителя, пришло ли ему сообщение, что письмо не доставлено (возможно, по-английски; например, Message not delivered). Если да, то в этом же сообщении есть описание ошибки и, возможно, ее код (смотри ниже).

Ошибки при отправке электронной почты

Если отправителю приходит ошибка, значит, письмо не доставлено. Причины могут быть разные, проблема может быть как у отправителя, так и получателя. Чтобы понять причину и устранить ее, отправитель должен внимательно посмотреть сообщение об ошибке и найти описание (обычно на английском языке; иногда также указывается цифровой код ошибки). Ниже основные ошибки при отправке email и их причины:

Что делать, когда решил проблему со своей почтой, а письмо не пришло?

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

Что делать, если ничего не помогло?

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

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

Письмо (email). Изображение с сайта FreeDigitalPhotos.net

Смотри также

  • Что делать, если код восстановления ВК не приходит на почту
  • ВКонтакте: наши письма до вас не доходят. Что делать?
  • Майл.ру — регистрация. Как зарегистрироваться? Инструкция
  • Почта Гугл (Gmail)
  • Яндекс.Почта

Возможно, вам также будет интересно:

  • Если ошибку можно исправить значит это еще не ошибка
  • Если ошибку можно исправить значит это была не ошибка
  • Если ошибку можно исправить значит ты еще не ошибся
  • Если ошибку в больничном листе допустила поликлиника
  • Если ошибку в больничном листе допустил работодатель

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии