Нужна ли конфигурация php mail для работы? - PullRequest
0 голосов
/ 15 ноября 2009

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

Уведомление PHP: неопределенный индекс: в /var/www/html/sites/send_contact.php в строке 10, реферер: http://example.com/contact2.php

Мой PHP-файл выглядит так:

<?php // send_contact.php
// Contact subject
$subject =$_POST["$subject"]; 
// Details
$message=$_POST["$detail"];

// Mail of sender
$mail_from=$_POST["$customer_mail"]; 
// From 
$name2=$_POST["$name2"];

$header="From: $mail_from\r\n";

// Enter your email address
$to="joe@mail.com";

$send_contact=mail($to,$subject,$message,$header);

// Check, if message sent to your email 
// display message "We've recived your information"
if($send_contact){
echo "We've recived your contact information";
}
else {
echo "ERROR";
}
?>

Ответы [ 3 ]

4 голосов
/ 15 ноября 2009

Самое простое предположение, что вы делаете ошибку при доступе к вашим переменным.

вместо:

$name2=$_POST["$name2"];

используйте это:

$name2=$_POST["name2"];

Или, если вы знаете разницу и делаете это специально, убедитесь, что ваша переменная $name2 определена с правильным именем поля формы HTML.

Кроме того, я настоятельно рекомендую использовать такую ​​библиотеку, как PHPMailer для отправки электронных писем.
Ваш пример довольно прост, и mail () должен работать просто отлично, но для чего-то более сложного (например, с вложениями или html) или необходимости отправки с использованием внешнего почтового сервера по SMTP (с аутентификацией или без нее), он сделает гораздо лучшая работа и сэкономит много времени.

Для лучшей идеи, проверьте этот пример с их сайта:

require_once('../class.phpmailer.php');
$mail = new PHPMailer(true); // the true param means it will throw exceptions on     errors, which we need to catch

$mail->IsSMTP(); // telling the class to use SMTP

try {
  $mail->Host       = "mail.yourdomain.com"; // SMTP server
  $mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
  $mail->SMTPAuth   = true;                  // enable SMTP authentication
  $mail->Host       = "mail.yourdomain.com"; // sets the SMTP server
  $mail->Port       = 26;                    // set the SMTP port for the GMAIL server
  $mail->Username   = "yourname@yourdomain"; // SMTP account username
  $mail->Password   = "yourpassword";        // SMTP account password
  $mail->AddReplyTo('name@yourdomain.com', 'First Last');
  $mail->AddAddress('whoto@otherdomain.com', 'John Doe');
  $mail->SetFrom('name@yourdomain.com', 'First Last');
  $mail->AddReplyTo('name@yourdomain.com', 'First Last');
  $mail->Subject = 'PHPMailer Test Subject via mail(), advanced';
  $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!';     // optional - MsgHTML will create an alternate automatically
  $mail->MsgHTML(file_get_contents('contents.html'));
  $mail->AddAttachment('images/phpmailer.gif');      // attachment
  $mail->AddAttachment('images/phpmailer_mini.gif'); // attachment
  $mail->Send();
  echo "Message Sent OK<p></p>\n";
} catch (phpmailerException $e) {
  echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
  echo $e->getMessage(); //Boring error messages from anything else!
}
1 голос
/ 15 ноября 2009

Ошибка говорит вам точно, что не так:

Строка 10:

$name2=$_POST["$name2"];

Вы используете '$ name2' до того, как оно будет определено.

PHP может подставлять переменные в строки:

$var1 = "bar";
echo "foo $var1"; // prints "foo bar"

В вашем HTML используйте что-то похожее на следующее:

<input type="...whatever..." name="name2" />

Затем в PHP, предполагая, что данные были POSTed, вы получите доступ к ним, используя:

$name2 = $_POST["name2"];
0 голосов
/ 15 ноября 2009

Кажется, что ваш код не передает данные $ _POST, как вы ожидаете. Я рекомендую вам проверить ключи $ _POST следующим образом:

<?php
print_r(array_keys($_POST));
?>

Если значение $ name2 не отображается, это означает, что вам следует изменить данные формы отправки веб-страницы на send_contact.php.

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