2012-07-27 3 views
2

Я написал сценарий таким образом, что если форма не удалась, пользователь видит сообщение об ошибке, и мне следует отправить электронное письмо. Однако я не получаю электронную почту. Я не вижу ошибок в моем скрипте, и электронная почта нигде не найдена (даже не в спаме). В чем может быть проблема? Я считаю, что мы работаем на Linux-сервере, поэтому по умолчанию должен быть установлен агент почты, верно? Может ли брандмауэр блокировать сообщения?Отправка PHP email

Код:

<?php 

if (isset($aErrors) && count($aErrors) > 0) { 
     print '<ul class="errorlist">'; 
     foreach ($aErrors as $error) { 
      print '<li>' . $error . '</li>'; 
     } 
     print '</ul><br />'; 


$mail_ontv = "[email protected]"; 

$_POST['onderwerp'] = "Geen Twinfield Abonnement"; 

    // set datum 
    $datum = date("d.m.Y H:i"); 

    // set ip 
    $ip = $_SERVER['REMOTE_ADDR']; 

    $inhoud_mail .= $_SERVER['SCRIPT_URI'] . "\n\n"; 

    $inhoud_mail .= "Iemand probeerde zich aan te melden, maar had geen Twinfield abonnement!\n"; 
    $inhoud_mail .= "Bedrijfsnaam: " . $_SESSION['bedrijfsnaam'] . "\n"; 
    $inhoud_mail .= "Telefoonnummer: " . $_SESSION['telefoonnummer'] . "\n"; 
    $inhoud_mail .= "E-mail adres: " . $_SESSION['email'] . "\n"; 
    $inhoud_mail .= "Telefoonnummer contactpersoon: " . $_SESSION['telefoonnummercontact'] . "\n"; 
    $inhoud_mail .= "E-mail adres contactpersoon: " . $_SESSION['emailcontact'] . "\n"; 
    $inhoud_mail .= "Gewenste gebruikersnaam: " . $_SESSION['gebruikersnaam'] . "\n"; 
    $inhoud_mail .= "Gekozen abonnement: " . $_SESSION['abonnement'] . "\n\n"; 

    $inhoud_mail .= "Verstuurd op " . $datum . " via het ip " . $ip . "\n\n"; 

    $headers = "From: " . $_SESSION['bedrijfsnaam'] . " <" . $_SESSION['emailcontact'] . ">"; 

    $headers = stripslashes($headers); 
    $headers = str_replace("\n", "", $headers); // Verwijder \n 
    $headers = str_replace("\r", "", $headers); // Verwijder \r 
    $headers = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $headers)); // Slashes van quotes 

    $_POST['onderwerp'] = str_replace("\n", "", $_POST['onderwerp']); // Verwijder \n 
    $_POST['onderwerp'] = str_replace("\r", "", $_POST['onderwerp']); // Verwijder \r 
    $_POST['onderwerp'] = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $_POST['onderwerp'])); // Slashes van quotes 

    mail($mail_ontv, $_POST['onderwerp'], $inhoud_mail, $headers);          
} 

?> 

Спасибо, ребята!

+0

Я предполагаю, что это связано с вашими заголовками. Как они выглядят как раз перед тем, как они передаются в вашу функцию 'mail()'? – Crontab

ответ

2

Вы проверили возвращаемое значение mail()? Если вы получаете логическое значение fALSE, что-то взорвалось, когда PHP пытался обработать сообщение электронной почты на ваш SMTP-сервер.

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

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

+0

Я сделал переменную дамп, и результат был «bool (true)», означает ли это, что это не мой PHP-код, который не работает? – user1555076

+0

Это означает, что PHP выполнил свою работу и передал электронную почту серверу SMTP. Так что посмотрите журналы журналов smtp, чтобы узнать, что там происходит. –

5

Несколько лишних мыслей для вас за то, что предложил Mac B:

1) Есть много PHP библиотеки, которые там будут заботиться о отправки электронной почты для вас. Они могут работать с локальным или удаленным SMTP-сервером. Например, http://swiftmailer.org/.

2) Большинство почтовых провайдеров в эти дни (Gmail, Yahoo и т. Д.) Будут рассылать спам, исходящие от вашего локального компьютера. Я рекомендую использовать дешевый сторонний SMTP-сервис для отправки ваших писем - это поможет с надежностью. Один из тех, что я использовал в течение многих лет, называется CritSend (critsend.com). Есть много других.

+0

Спасибо, я собираюсь проверить, могу ли я решить проблему, которую мы имеем в журналах SMTP-сервера, но я буду помнить об этом! – user1555076

+0

critsend выглядит круто +1 – tubaguy50035

Смежные вопросы