Как установить адрес «От» в контактной форме PHP? - PullRequest
2 голосов
/ 09 февраля 2010

У меня проблема с контактной формой PHP, которую я создал. Когда я ввожу информацию в форму и нажимаю кнопку отправить, информация отправляется на адрес электронной почты, но к сообщению не прикрепляется адрес отправителя.

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

Код для моей формы показан ниже:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Email Form </title>
</head>
<body>

<form method="post" action="sendeail.php">

<?php
$ipi = getenv("REMOTE_ADDR");
$httprefi = getenv ("HTTP_REFERER");
$httpagenti = getenv ("HTTP_USER_AGENT");
?>

<input type="hidden" name="ip" value="<?php echo $ipi ?>" />
<input type="hidden" name="httpref" value="<?php echo $httprefi ?>" />
<input type="hidden" name="httpagent" value="<?php echo $httpagenti ?>" />


---------------(Sending Scripit below)-----------------------------

Name: <br />
<input type="text" name="visitor" size="35" />
<br />
Address:<br />
<input type="text" name="visitoradd" size="35" />
<br />

City<br />
<input type="text" name="visitorcity" size="35" />
<br />

Postcode<br />
<input type="text" name="visitorpost" size="35" />
<br />

Email:<br />
<input type="text" name="visitormail" size="35" />
<br />

Telephone Number:<br />
<input type="text" name="visitortel" size="35" />
<br />
Bookkeeping / Payroll :<br />
<select name="bp" size="1">
<option value=" Bookkeeping">Bookkeeping </option>
<option value=" Payroll ">Payroll</option>
</select>
<br />
<br />
Number of transactions : <br />
<input type="text" name="transcations" size="35" />
<br />
Number of employees <br />
<input type="text" name="employees" size="35" />
<br />
<br />
Payroll weekly / monthly:<br />
<select name="pmw" size="1">
<option value=" Weekly">Weekly</option>
<option value=" Monthly">Monthly</option>
</select>
<br />
<br />
<input type="submit" value="Submit" />
<br />
</form>
</body>
</html>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sendemail Script</title>
</head>
<body>
<?php

$visitor = $_POST['visitor'];
$visitoradd = $_POST['visitoradd'];
$visitorcity= $_POST['visitorcity'];
$visitorpost= $_POST['visitorpost'];
$visitormail = $_POST['visitormail'];
$visitortel = $_POST['visitortel'];
$bp = $_POST['bp'];
$transcations = $_POST['transcations'];
$employees = $_POST['employees'];
$pmw = $_POST['pmw'];


if(!$visitormail == "" && (!strstr($visitormail,"@") || !strstr($visitormail,".")))
{
echo "<h2>Use Back - Enter valid e-mail</h2>\n";
$badinput = "<h2>Information was NOT submitted</h2>\n";
echo $badinput;
die ("Go back! ! ");
}

if(empty($visitor) || empty($visitormail)  || empty($visitorcity) || empty($visitorpost) || empty($visitoradd)   || empty($visitortel) || empty($bp) || empty($transcations)  || empty($employees) || empty($pmw) || empty($pmw)) 
{
echo "<h2>Use Back - fill in all fields</h2>\n";
die ("Use back! ! ");
}

$message = "
Name: $visitor\n
Address: $visitoradd\n
City: $visitorcity\n
Post Code: $visitorpost\n
Email: $visitormail\n
Phone Number: $visitortel\n
Bookkeeping/Payroll: $bp\n
Number of Transactions: $transcations\n
Number Of Employees: $employees\n
Payroll Weekly/Monthly: $pmw\n"
;

$subject = "Payment Details";

mail("sd07sb@leeds.ac.uk",$subject,$message,$visitormail);

?>

<p align="center">
<br />
Thank You : <?php echo $visitor ?> ( <?php echo $visitormail ?> )
<br />

<br />
<a href="contact3.php">Click here to Finish</a>
</p> 

</body>
</html>

Я новичок в PHP и был бы признателен за любую помощь, которую я могу получить с этим.

Заранее спасибо

Ответы [ 6 ]

8 голосов
/ 09 февраля 2010

Вы можете добавить несколько дополнительных заголовков в вызове mail () в качестве четвертого аргумента (в настоящее время вы добавляете только $ visitoremail. Заголовки должны быть разделены символом "\ r \ n". Вот выдержка из PHP. net / руководство о том, как сделать дополнительные заголовки:

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";

// Mail it
mail($to, $subject, $message, $headers);
5 голосов
/ 09 февраля 2010

mail("sd07sb@leeds.ac.uk",$subject,$message, 'From: ' . $visitormail);

2 голосов
/ 09 февраля 2010

Вы можете добавить заголовок «От:» при вызове mail(), чтобы установить адрес отправителя.

$headers = "From: ".$visitor."<".$visitormail.">\r\n";    
mail("sd07sb@leeds.ac.uk", $subject, $message, $headers);

Вы также можете добавить заголовок «Reply-To:», если хотите (или любое другое количество заголовков, которые вы хотите включить),

$headers .= "Reply-To: ".$visitor."<".$visitormail.">\r\n";

Другой вариант - установить адрес по умолчанию в файле php.ini или установить его в скрипте следующим образом:

ini_set(sendmail_from, "your_from@address_here.com"); 

На странице PHP Manual для mail () есть больше информации.

1 голос
/ 09 февраля 2010

Другие ответы объясняют, как добавить заголовок From. Существует важная возможная уязвимость безопасности, если вы не тщательно проверяете ввод скрипта. Ваша форма может быть превращена в спам-машину, которая может причинить вам всякое горе.

Читайте о внедрении заголовка письма: http://www.damonkohler.com/2008/12/email-injection.html

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

1 голос
/ 09 февраля 2010

Вы должны сделать что-то вроде этого:

$sanitizedEmail = filter_var($visitormail, FILTER_SANITIZE_EMAIL);
mail('recipient@email.com', $subject, $message, 'From: ' . $sanitizedEmail);

Начало строки $sanitizedEmail гарантирует, что пользователь не сможет отправлять спам-сообщения из вашей формы.

0 голосов
/ 09 февраля 2010

Посмотрите на PHPMailer

Вы можете делать практически все, используя PHPMailer. Нажмите здесь, чтобы посетить сайт и получить копию

http://phpmailer.worxware.com/index.php?pg=phpmailer

PHPMailer делает всю логику за вас.

Например. $ Mailer-> addAddress ('sd07sb@leeds.ac.uk ');

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