2013-03-08 3 views
0

Я работаю над простой формой контакта, и php-скрипт не отправляет электронное письмо на мой адрес электронной почты ... Скрипт работает успешно, и он выводит результат HTML, как показано в приведенном ниже коде. Я пытаюсь понять это, но я просто не могу заставить его отправить электронное письмо. Я посмотрел учебники и, похоже, получил тот же точный код, что и множество обучающих программ. Я использую форму, чтобы получить вход пользователя видел здесь,PHP Mail Script не отправляет почту

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Dummy Code - Contact</title> 
</head> 

<body> 

<form action="send_simpleform.php" method="post"> 
<p>Your name<br /> 
<input name="sender_name" type="text" size="30" /></p> 
<p>Email<br /> 
<input name="sender_email" type="text" size="30" /></p> 
<p>Message<br /> 
<textarea name="message" cols="30" rows="5"></textarea></p> 
<input name="submit" type="submit" value="Submit" /> 
</form> 

</body> 
    </html> 

Мой PHP скрипт можно увидеть здесь, а также,

<?php 
$msg = "Email sent from www.dummycode.com\n"; 
$msg .= "Sender's Name:\t $_POST[sender_name]\n"; 
$msg .= "Sender's E-mail:\t $_POST[sender_email]\n"; 
$msg .= "Sender's Message:\t $_POST[message]\n"; 
$to = "[email protected]"; 
$subject = "DummyCode.com"; 
$headers = "From: My web site <www.dummycode.com>\n"; 
$headers .= "Reply to: $_POST[sender_email]\n"; 
mail($to, $subject, $msg, $headers); 
?> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Dummy Code Contact Sent</title> 
</head> 

<body> 

<h1>The following email has been sent</h1> 

<p>Your Name:<br /> 
<? echo "$_POST[sender_name]"; ?> 
<p>Your Email Adress:<br /> 
<? echo "$_POST[sender_email]"; ?> 
<p>Message:<br /> 
<? echo "$_POST[message]"; ?> 
</p> 
</body> 
</html> 

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

-Генри

+1

Вы не можете сделать что-то вроде этого '$ msg.= "Имя отправителя: \ t $ _POST [sender_name] \ n"; ', вы должны использовать что-то вроде этого' $ msg. = "Имя отправителя: \ t". $ _ POST [sender_name]. "\ N"; ' – HamZa

+0

@HamZaDzCyberDeV: И это исправить проблему? Или это не связано? – 2013-03-08 21:44:56

+1

@HamZaDzCyberDeV на самом деле, вы также можете это сделать: '' Имя отправителя: \ t {$ _POST [sender_name]} \ n "' – Havenard

ответ

1

Единственное, что вы можете сделать в сценарии, это проверить возвращаемое значение функции mail().

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

Простой пример:

if (mail(...)) 
{ 
    // mail was accepted for delivery 
} 
else 
{ 
    // not accepted 
} 
+0

И лучший способ сделать это? – 2013-03-08 21:51:49

+0

'var_dump (mail ($ to, $ subject, $ msg, $ headers));'? – HamZa

+0

@HamZaDzCyberDeV: Что это делает? Я немного новичок в PHP, не могли бы вы объяснить это немного? – 2013-03-08 21:53:05

0

Вы должны взглянуть на swiftmailer. Установки быстро просты, и ОЧЕНЬ хорошо документированы. Error handling - наверху!

0

Ну, у меня были ситуации, когда отправленные письма отправлялись, но я не могу видеть их в папке «Входящие», в которую я его отправляю. Так вот несколько вещей, которые я делаю:

  1. Не высылайте с локального хоста, кроме вас есть почтовый сервер, который может отправлять исходящие сообщения
  2. Предпочтительно, чтобы отправить или проверить свой почтовый скрипт на удаленном сервере
  3. Убедитесь, что отправители адрес электронной почты совпадает с доменом инициирующей
  4. не использовать ответные сообщения электронной почты, которые отличаются от электронной почты отправителя - это может быть съедено как спам или кайфом большинством почтовых клиентов
  5. Проверьте допустимый SMTP порт ваш сервер и установите его
  6. Проверьте сервер SMTP и установить, что
  7. Предоставлять реальные учетные данные для отправки электронной почты
  8. Места электронной почты пользователя где-то в теле сообщения с электронной почтой: ссылка, чтобы вы могли быстро ответить им. (Если они отправляются вам с использованием сценария). Если вы отправляете им, не нужно указать другой для ответа
  9. Обеспечить, чтобы указать кодировку кодировку, символ новой строки и, возможно, функцию переноса слов, которые следует слово
  10. Попробуйте использовать проверенный PHP Class от phpclasses.org

Я принимаю их по одному и обычно получаю, что мои письма отправляются, делая то, что правильно. В своем коде попробуйте также отрегулировать эти строки и тестирование:

$headers = "From: My web site <www.dummycode.com>\n"; //Same as originating domain or email (just for tweaks) 
$headers .= "Reply to: $_POST[sender_email]\n"; //Should be same as sender's email for a try 
Смежные вопросы