2014-08-29 2 views
-1

Моя электронная почта работает, но не отправляет электронное письмо, когда пользователь использует адрес электронной почты aol.com и yahoo.com. Что мне нужно изменить? PHP-файл размещен godaddy.Форма электронной почты не отправляется с адресов aol.com yahoo.com

Я дизайнер, а PHP не является моей сильной стороной, можете ли вы объяснить ответ с изменениями в моем существующем коде (если это вообще изменение кода). Эта проблема очень расстраивает.

// Only process POST reqeusts. 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    // Get the form fields and remove whitespace. 
    $name = strip_tags(trim($_POST["name"])); 
      $name = str_replace(array("\r","\n"),array(" "," "),$name); 
    $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL); 
    $message = trim($_POST["message"]); 

    // Check that data was sent to the mailer. 
    if (empty($name) OR empty($message) OR !filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     // Set a 400 (bad request) response code and exit. 
     // http_response_code(400); 
     echo "Oops! There was a problem with your submission. Please complete the form and try again."; 
     exit; 
    } 

    // Set the recipient email address. 
    // FIXME: Update this to your desired email address. 
    $recipient = "[email protected]"; 

    // Set the email subject. 
    $subject = "New contact from $name"; 

    // Build the email content. 
    $email_content = "Name: $name\n"; 
    $email_content .= "Email: $email\n\n"; 
    $email_content .= "Message:\n$message\n"; 

    // Build the email headers. 
    $email_headers = "From: $name <$email>"; 

    // Send the email. 
    if (mail($recipient, $subject, $email_content, $email_headers)) { 
     //Set a 200 (okay) response code. 
     // http_response_code(200); 
     echo "Thank You! Your message has been sent."; 
    } else { 
     // Set a 500 (internal server error) response code. 
     // http_response_code(500); 
     echo "Oops! Something went wrong and we couldn't send your message."; 
    } 

} else { 
    // Not a POST request, set a 403 (forbidden) response code. 
    // http_response_code(403); 
    echo "There was a problem with your submission, please try again."; 
} 
+0

Подходит для использования 'filter_var' для проверки адресов электронной почты. – amphetamachine

+0

Не проблема в папке со спамом? –

+0

Его не ... не отправляет, его, вероятно, попадает в ваш нежелательной почты или фильтр спама. – cmorrissey

ответ

0

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

0

Я также не вижу никакой ошибки в вашем простом коде , Некоторые вещи, чтобы рассмотреть следующие вопросы:

  • Ваши новые линии в теле и заголовка следует использовать CRLF \r\n, а просто \n

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

Пример:

// Send the email. 
if (mail($recipient, $subject, $email_content, $email_headers,"-f".$email)) { 
  • Поскольку вы дизайнер, я также предлагаю использовать такие инструменты, как PHPMailer, что облегчает процесс электронной рассылки и фиксирует некоторые вещи для вас.
0

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

http://blog.mailchimp.com/aol-changes-dmarc-policy/

Я бы ожидать, что это станет делом, что все больше и больше провайдеров электронной почты делать, как время идет.

Что вы должны делать это, используя адрес электронной почты, который вы владеете разослать почту, либо через что домены исходящего сервера или один уполномоченный домен, а не пытаться подменить чужой адрес. В дополнение к тому, что вы не выглядите более теневым, так как все выходы, вы, скорее всего, столкнетесь с политиками DMARC и SPF, фильтрами спама и сердитыми админами электронной почты, просматривая StackOverflow.

+0

Спасибо за объяснение, однако, это только для получения информации через контактную форму, а не для рассылки спама на другие адреса электронной почты. Я понял, что это просто заголовок в папку со спамом, он был похоронен. –

0

Я отрывал свои волосы от этой проблемы в течение нескольких недель. Наконец понял это сегодня. Если ваша форма имеет поле электронной почты и называется «электронная почта», а пользователь вводит адрес электронной почты @aol или @yahoo, Formmail будет действовать, как будто ничего плохого, но форма не будет отправлена.

Это простое решение. Просто используйте что-нибудь еще (что-нибудь еще, но «email») для имени поля электронной почты, например «FromEmail» .. Легкий peasy.

Если пользователь что-то вроде [email protected] или [email protected]:

Это не будет работать:

<input type="text" name="email" size="30" maxlength="100" /> 

, но это будет:

<input type="text" name="FromEmail" size="30" maxlength="100" /> 

Удачи!

Chaz

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