Добрый вечер, уважаемые! Подскажите, пожалуйста, как сделать так, чтобы при отправке почты посредством php mail() в заголовке письма в графе "От кого" была почта отправителя, которая присваивается переменной $from, а не адрес почтового сервера Вот сам код: Код (Text): <?php if (isset($_POST['name'])) {$name = $_POST['name'];} if (isset($_POST['email'])) {$email = $_POST['email'];} if (isset($_POST['phone'])) {$phone = $_POST['phone'];} if (isset($_POST['mess'])) {$mess = $_POST['mess'];} $to = "e@mail.ru"; $charset = "windows-1251"; $subject = "Тема"; $message = "Имя: $name \ne-mail: $email \nТелефон: $phone \nСообщение: $mess"; $from = "$email"; $headers = "MIME-Version: 1.0"; $headers .= "Content-type: text/html; charset=windows-1251" . "\r\n"; $headers .= "From: $from"; $send = mail ($to,$subject,$message,$headers); if ($send == 'true') { echo "<center><p style='color:#339900; font-size:18px;'>Спасибо за отправку вашего сообщения!</p></center>"; echo "<center><font size='3'><a href=/>Перейти на главную</a></font></center>"; } // else // { // echo "<b>Ошибка. Сообщение не отправлено!</b>"; // } ?> В результате сообщение приходит от имени сервера. Если же, для примера переменную обособить точками (случайно заметил): Код (Text): $headers .= "From: .$from."; то в поле от кого письмо уже приходит с адреса отправителя, только обособленного этими самыми точками (.example@mail.ru.) Кто знает как можно решить эту проблему? Заранее благодарю! С уважением, Андрей.
Нашел у себя вот такое, заголовки в одной строке. Разницы, нет, но мало ли... Код (Text): $headers="Content-Type: text/html; charset=windows-1251\nFrom: {$email}\n"; Потом попробуйте перед функцией mail сохранить параметры в файл Код (Text): file_put_contents('out.txt',$headers); Там будет видно, слепилась ли строка заголовка, как надо. ну и Код (Text): file_put_contents('out2.txt',$message); тоже
Вот уже польза есть. А включена выдача ошибок в браузер? Я бы ещё посоветовал инициализировать переменные перед взятием параметров и раскодировать емаил Код (Text): $email='text@test.ru'; if (isset($_POST['email'])) {$email = urldecode($_POST['email']);}
Fatal error: Call to undefined function: file_put_contents() Инициализация и раскодировка тоже не принесли успеха
Content-Type: text/html; charset=windows-1251 From: example@mail.ru Может все дело в почтовом сервере (ru-center)?
Рабочий вариант. Запускал сейчас на jino.ru Код (Text): <?php //демо-скрипт только для ознакомительных целей. не рекоммендуется к употреблению в сыром виде $name=''; $email=''; $phone=''; $mess=''; $msg=''; $counter=0; if(isset($_POST['counter'])){$counter=$_POST['counter'];$counter+=1;} if(isset($_POST['name'])){$name=$_POST['name'];} if(isset($_POST['phone'])){$phone=$_POST['phone'];} if(isset($_POST['mess'])){$mess=$_POST['mess'];} if(isset($_POST['email']) && $_POST['email']!=''){ $email=$_POST['email']; $to='e@mail.ru';//тут, конечно, свой емаил $subject='Тема'; $message="Имя: {$name}<br/>\ne-mail: {$email}<br/>\nТелефон: {$phone}<br/>\nСообщение: $mess"; $headers="MIME-Version: 1.0\nContent-type: text/html; charset=windows-1251\nFrom: {$email}\n"; /*if($fh= fopen('out.txt','wb')){ fwrite($fh,"heades:\n".$headers."\nmessage:\n".$mess); fclose($fh); }*/ $send=mail($to,$subject,$message,$headers); if ($send){ $msg='<p>Спасибо за отправку вашего сообщения!</p>'."\n".'<p><a href="/">Перейти на главную</a></p>'; } } if($counter>0 && strlen($email)<5){$msg.='<p>Укажите ваш емаил!</p>';} echo <<<FORM <form method="post" action="" style="width:333px;margin:auto;text-align:right;"> <label>имя</label><input name="name" type="text" value="$name"/><br/> <label>телефон</label><input name="phone" type="text" value="$phone"/><br/> <label>сообщение</label><textarea name="mess" type="text">$mess</textarea><br/> <label>емаил</label><input name="email" type="text" value="$email"/><br/> <input name="counter" type="hidden" value="$counter"/> <input type="submit"/> $msg </form> FORM; ?>
YSandro, спасибо большое за помощь! Все равно письма идут от сервера. Скорее всего дело именно в ru-centr
а если так: mail([email='nobody@example.com]'nobody@example.com[/email]', 'the subject', 'the message', null, '-fwebmaster@example.com');
Всем спасибо! Разобрался. Дело, как я и предполагал, оказалось в РУ-ЦЕНТРЕ. Если кто-нибудь пользуется их почтовым сервером и хочет реализовать возможность отправки почты со своего сайта от имени пользователей посредством php mail(), то необходимо: В панели управления хостингом перейти в раздел "Веб-сервер" -> "Почта веб-сервера" и для параметра "Исходящая - доверенные получатели" указать адрес, на который письма должны приходить от пользователей.
igordata Да, согласен, хостинг не фонтан! Просто нет времени на поиск более лучшего лучшего варианта.
Здесь http://ua.php.net/manual/en/function.mail.php довольно много примеров, также уместно вынести все это хозяйство (отправку почты) в функцию и облегчить себе жизнь в дальнейшем.
Добрый день. Не могу никак разобраться. Задача следующая. Два сайта. Первый отправляет по почте user@user.ru имя отправления "Привет" Второй сайт (как раз не понимаю как сделать) отправляет с той же почты user@user.com НО имя отправителя должно быть не "Привет" (допустим) а "Hello" как это можно воплотить? Собственно код <?php $to = "email1"; $subject = "Тема письма"; $mailheaders = "Content-type:text/html;charset=utf-8"; $mailheaders .= "From: SiteRobot <noreply@user.ru>rn"; $mailheaders .= "Reply-To: noreply@user.rurn"; mail($to, $subject, $_POST['text'], $mailheaders); ?>