php простая контактная форма не отправляет почту даже после подтверждения - PullRequest
0 голосов
/ 26 января 2010

Я пытался заставить контактную форму php работать на моем сайте портфолио (в настоящее время на бесплатной учетной записи megabyet.net), но при тестировании (на загруженном сайте), хотя я получаю сообщение с благодарностью / подтверждением я не получаю никаких сообщений на мою почтовую учетную запись (указанную в коде), я не могу понять проблему здесь .... нужна помощь!

это может быть что-то, связанное с SMTP ??


Вот код:

<?php
if(isset($_POST['submit'])) {

$to = "vishu_unlocker@yahoo.com";
$subject = "Portfolio Contact";
$name_field = $_POST['name'];
$email_field = $_POST['email'];
$message = $_POST['message'];
$headers = "From: $email_field";
$body = "From: $name_field\n E-Mail: $email_field\n Message:\n $message";

echo "Mail has been sent, thankyou!";
mail($to, $subject, $body, $headers);

} else {

echo "blarg!";

}
?>

HTML код:

<form id="contact_frm" action="mail.php" method="POST">
<h4>Name :</h4>
<input type="text" id="f_name" name="name"/><br/><br/>
<h4>E-Mail Address :</h4>
<input type="text" id="f_email" name="email"/><br/><br/>
<h4>Message :</h4>
<textarea id="f_msg" name="message" cols="22" rows="5"/></textarea><br/><br/>
<input id="send_btn" type="submit" value="Send >>" name="submit" /><br/>
</form>

Ответы [ 5 ]

1 голос
/ 26 января 2010

Во-первых, вы должны проверить, возвращает ли mail() значение true или нет, чтобы определить, было ли письмо успешно отправлено:

<?php
if(isset($_POST['submit'])) {

    $to = "vishu_unlocker@yahoo.com";
    $subject = "Portfolio Contact";
    $name_field = $_POST['name'];
    $email_field = $_POST['email'];
    $message = $_POST['message'];
    $headers = "From: $email_field";
    $body = "From: $name_field\n E-Mail: $email_field\n Message:\n $message";

    $success = mail($to, $subject, $body, $headers);
    if ($success) {
        echo "Mail has been sent, thankyou!";
        // redirect to thank you page here
    }
    else {
        echo "message failed";
    }
} else {

echo "blarg!";

}
?>

Попробуйте и дайте нам знать, если это работает.

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

0 голосов
/ 26 января 2010

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

  • Адрес отправителя ("От") принадлежит домену на вашем сервере? Если нет, сделайте это так.
  • Ваш сервер находится в черном списке (например, проверьте IP на spamhaus.org)? Это удаленная возможность с общим хостингом.
  • Фильтруются ли письма фильтром спама? Откройте учетную запись в freemailer с папкой для спама и узнайте. Также попробуйте отправить почту на адрес без спам-фильтра.
  • Возможно, вам нужен пятый параметр "-f" mail () для добавления адреса отправителя? (См. Команду mail () в руководстве по PHP)
  • Если у вас есть доступ к файлам журналов, проверьте их, как указано выше.
  • Проверяете ли вы адрес «от:» на предмет возможной пересылки писем («Возвращено отправителю»)? Вы также можете настроить отдельный адрес для ошибок.
0 голосов
/ 26 января 2010

@ Джон .. проверил это, если условие с кодом ниже, и я получаю неудачный вывод = / ... так что моя mail() функция возвращает false = (... и да, я пробовал gmail, но с во-первых, функция почты не работает нормально ... она не работает ...

<?php
if(isset($_POST['submit'])) {

$to = "vishu_unlocker@yahoo.com";
$subject = "Portfolio Contact";
$name_field = $_POST['name'];
$email_field = $_POST['email'];
$message = $_POST['message'];
$headers = "From: $email_field";
$body = "From: $name_field\n E-Mail: $email_field\n Message:\n $message";

$success = mail($to, $subject, $body, $headers);

if($success) { 
 echo "Mail has been sent, thankyou!";

} else {
 echo "message sending failed!";
 }
} else {
 echo "blarg!";
 }
?>

вывод - ошибка отправки сообщения!

Итак, мне нужно определить некоторые дополнительные параметры здесь? ... также я увидел, что мой хост указал путь к sendmail как - /usr/sbin/sendmail это имеет какое-то отношение к моей почтовой функции, действующей плохо ?. ... я имею в виду, мне нужно определить в нем параметр sendmail?

@ unknown- хм, codeigniter может помочь, но я никогда не использовал его раньше ... посмотрим ...

@ symcbean- извините, я не знаю, как это сделать: P ... вероятно, потому что я еще не очень хорошо разбираюсь в SMTP? .... еще учусь / начинаю ..

0 голосов
/ 26 января 2010

это может быть что-то, связанное с SMTP ??

Возможно. Почему бы вам не проверить свой mailq и файлы журналов с вашего MTA?

0 голосов
/ 26 января 2010

Если вы ищете что-то, связанное с отправкой электронной почты через SMTP. Я бы порекомендовал вам использовать почтовый класс Code Igniters.

http://codeigniter.com/user_guide/libraries/email.html

Это также позволяет корректно отлаживать и обрабатывать ошибки SMTP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...