Функция PHP mail () не работает на веб-хосте - PullRequest
0 голосов
/ 16 июля 2010

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

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

Спасибо, Amit

Для пояснения, вот почтовый скрипт.

<?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
} 
?> 

Ответы [ 5 ]

2 голосов
/ 16 июля 2010

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

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

2 голосов
/ 16 июля 2010

Вы выполняете какие-либо проверки почтовой функции? Он должен возвращать 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";
1 голос
/ 16 июля 2010

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

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

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

Alternative

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

1 голос
/ 16 июля 2010

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

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

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

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

0 голосов
/ 19 ноября 2013

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

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

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

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

Это потому, что если вы посмотрите на оригинальный почтовый файл, скажем, gmail, вы увидите отправленные заголовки. Вы на самом деле отправляете от user@serverhostname.tld, а не на somebody@example.com, как вы указали почтовой функции. Если вы используете SMTP и просматриваете оригинал, электронное письмо на самом деле отправляется с somebody@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
...