Функция PHP mail () не работает на веб-хосте

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

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

Спасибо, Амит

Для пояснения здесь используется почтовый скрипт.

<?php $to = 'my@email.com'; $subject = 'Contact from your website'; $message = 'Below are details from the Contact Us Form ' . "\n\n" . 'Name: ' . $_REQUEST['name'] . "\n\n" . 'Telephone Number: ' . $_REQUEST['phone'] . "\n\n" . 'E-mail address: ' . $_REQUEST['email'] . "\n\n" . 'Comments: ' . $_REQUEST['comments']; $email = $_REQUEST['email']; $headers = 'From: ' . $email . "\r\n" . 'Reply-To: ' . $email . "\r\n" . 'X-Mailer: PHP/' . phpversion(); $headers .= "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type: text/plain; charset=ISO-8859-1"; //SPAM CHECK $str = $_REQUEST['spam']; $strE = $_REQUEST['email']; if( $str != "10" || $strE == "") { echo "<div align='center' style='color:red'>One or more of the form fields were incorrect, you will be redirected to the contact page within 3 seconds.</div>"; ?><meta http-equiv="refresh" content="3;URL=http://engineercreativity.com/samples/biz/contact"><!-- EDIT THIS --> <?php } else { mail ($to, $subject, $message, $headers); ?> <meta http-equiv="refresh" content="0;URL=http://engineercreativity.com/thankyou.html"> <!-- EDIT THIS AS WELL --> <!-- <div class="text" align="center" style="text-align: center; color: green;"> <br/> Thank you for contacting us! <br/> The message was succesfully sent! </div> --> <?php } ?> 

Если это выделенный сервер, убедитесь, что у вас установлена ​​почта PostFix Mail ( http://www.postfix.org/ )

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

Выполняете ли вы какие-либо проверки почты? Он должен возвращать true, если он выполняется успешно – зная, что это поможет нам сократить другие возможные причины, по которым вы не можете получать почту, например, фильтры, конфигурацию сервера или smtp и т. Д. Выполнение чего-то типа:

 if (mail($to, $subject, $body, $header)) { echo("<p>Message successfully sent!</p>"); } else { echo("<p>Message delivery failed...</p>"); } 

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

Проводка полных заголовков также может помочь законным сообщениям проходить спам-тесты.

  $headers = "Return-path: <sendingemail@test.com>\n"; $headers .= "Reply-to: <sendingemail@test.com>"."\n"; $headers .= "Content-Type: text/html; charset=windows-1252\n"; $headers .= "Content-Transfer-Encoding: 7bit\n"; $headers .= "From: <sendingemail@test.com>\n"; $headers .= "X-Priority: 3\n"; $headers .= "MIME-Version: 1.0\n"; $headers .= "Organization: My Organization\r\n"; $headers .= "\n\n"; 

Напишите действительно простой скрипт, например

 <?php mail('your_mail@example.com', 'test subject', 'test msg') or die('no mail()'); echo 'mail sent.'; 

Выполните его и убедитесь, что почта не попала в ваш спам-фильтр (если вы можете себе это позволить, настройте свой собственный домен / DNS-сервер, netcat -l -p 25 является достаточным).

Если это не сработает, обратитесь в службу поддержки своего веб-хостера. У них есть FAQ или любая другая документация?

Каким бы ни было решение, проверьте вывод своей почты ().

Наиболее распространенное решение

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

альтернатива

Сервер SMTP, с которым вы разговариваете, может не понимать, что говорит ваш скрипт. Я видел ситуации до того, где мой почтовый скрипт будет работать с Postfix, но не qmail. Это легко решить с помощью сторонней библиотеки электронной почты: там есть тонны, но моим фаворитом является Flourish's ( http://flourishlib.com/docs/fEmail ).

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

Почему мы должны использовать SMTP вместо PHP mail ():

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

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

Это связано с тем, что если вы посмотрите на исходный файл электронной почты, скажем, gmail, вы увидите отправленные заголовки. Фактически вы отправляете с user@serverhostname.tld, а не someone@example.com, как вы сказали, что функция почты выполняет. Если вы используете SMTP и просматриваете оригинал, электронное письмо действительно отправляется от someone@example.com

Вы можете загрузить класс SMTP:

  1. https://code.google.com/a/apache-extras.org/p/phpmailer/source/browse/trunk/class.smtp.php?r=170
  2. http://www.phpclasses.org/package/14-PHP-Sends-e-mail-messages-via-SMTP-protocol.html