За последние 24 часа нас посетили 16315 программистов и 1582 робота. Сейчас ищут 1535 программистов ...

Адрес отправителя в php mail()

Тема в разделе "Работа с почтой", создана пользователем Nisan, 8 апр 2011.

  1. Nisan

    Nisan Активный пользователь

    С нами с:
    5 окт 2008
    Сообщения:
    12
    Симпатии:
    0
    Добрый вечер, уважаемые!
    Подскажите, пожалуйста, как сделать так, чтобы при отправке почты посредством php mail() в заголовке письма в графе "От кого" была почта отправителя, которая присваивается переменной $from, а не адрес почтового сервера

    Вот сам код:

    Код (Text):
    1.  
    2.  
    3. <?php
    4. if (isset($_POST['name'])) {$name = $_POST['name'];}
    5. if (isset($_POST['email'])) {$email = $_POST['email'];}
    6. if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
    7. if (isset($_POST['mess'])) {$mess = $_POST['mess'];}
    8.  
    9. $to = "e@mail.ru";
    10. $charset = "windows-1251";
    11. $subject = "Тема";
    12. $message = "Имя: $name \ne-mail: $email \nТелефон: $phone \nСообщение: $mess";
    13. $from = "$email";
    14. $headers  = "MIME-Version: 1.0";
    15. $headers .= "Content-type: text/html; charset=windows-1251" . "\r\n";
    16. $headers .= "From: $from";
    17. $send = mail ($to,$subject,$message,$headers);
    18. if ($send == 'true')
    19. {
    20. echo "<center><p style='color:#339900; font-size:18px;'>Спасибо за отправку вашего сообщения!</p></center>";
    21. echo "<center><font size='3'><a href=/>Перейти на главную</a></font></center>";
    22. }
    23. // else
    24. // {
    25. // echo "<b>Ошибка. Сообщение не отправлено!</b>";
    26. // }
    27. ?>
    В результате сообщение приходит от имени сервера.
    Если же, для примера переменную обособить точками (случайно заметил):

    Код (Text):
    1.  
    2.  
    3. $headers .= "From: .$from.";
    то в поле от кого письмо уже приходит с адреса отправителя, только обособленного этими самыми точками (.example@mail.ru.)

    Кто знает как можно решить эту проблему?

    Заранее благодарю!
    С уважением, Андрей.
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Попробуй добавить перенос строки \n
    Код (Text):
    1. $headers .= "From: $from\n";
     
  3. Nisan

    Nisan Активный пользователь

    С нами с:
    5 окт 2008
    Сообщения:
    12
    Симпатии:
    0
    Спасибо за ответ!

    Пробовал и \n, и \r\n - не помогает
    В чем подвох - понять никак не могу...
     
  4. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Нашел у себя вот такое, заголовки в одной строке. Разницы, нет, но мало ли...
    Код (Text):
    1. $headers="Content-Type: text/html; charset=windows-1251\nFrom: {$email}\n";
    Потом попробуйте перед функцией mail сохранить параметры в файл
    Код (Text):
    1. file_put_contents('out.txt',$headers);
    Там будет видно, слепилась ли строка заголовка, как надо.
    ну и
    Код (Text):
    1. file_put_contents('out2.txt',$message);
    тоже
     
  5. Nisan

    Nisan Активный пользователь

    С нами с:
    5 окт 2008
    Сообщения:
    12
    Симпатии:
    0
    Заголовки в одну строку тоже не помогли.
    а на file_put_contents скрипт стопорится...
     
  6. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Вот уже польза есть.
    А включена выдача ошибок в браузер?
    Я бы ещё посоветовал инициализировать переменные перед взятием параметров и раскодировать емаил
    Код (Text):
    1. $email='text@test.ru';
    2. if (isset($_POST['email'])) {$email = urldecode($_POST['email']);}
     
  7. Nisan

    Nisan Активный пользователь

    С нами с:
    5 окт 2008
    Сообщения:
    12
    Симпатии:
    0
    Fatal error: Call to undefined function: file_put_contents()

    Инициализация и раскодировка тоже не принесли успеха
     
  8. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    4-й PHP, значит. Придется по-старому.

    Попробую у себя запустить...
     
  9. Nisan

    Nisan Активный пользователь

    С нами с:
    5 окт 2008
    Сообщения:
    12
    Симпатии:
    0
    Content-Type: text/html; charset=windows-1251
    From: example@mail.ru

    Может все дело в почтовом сервере (ru-center)?
     
  10. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Рабочий вариант. Запускал сейчас на jino.ru
    Код (Text):
    1. <?php
    2. //демо-скрипт только для ознакомительных целей. не рекоммендуется к употреблению в сыром виде
    3. $name='';
    4. $email='';
    5. $phone='';
    6. $mess='';
    7.  
    8. $msg='';
    9. $counter=0;
    10. if(isset($_POST['counter'])){$counter=$_POST['counter'];$counter+=1;}
    11. if(isset($_POST['name'])){$name=$_POST['name'];}
    12. if(isset($_POST['phone'])){$phone=$_POST['phone'];}
    13. if(isset($_POST['mess'])){$mess=$_POST['mess'];}
    14. if(isset($_POST['email']) && $_POST['email']!=''){
    15.     $email=$_POST['email'];
    16.    
    17.     $to='e@mail.ru';//тут, конечно, свой емаил
    18.     $subject='Тема';
    19.     $message="Имя: {$name}<br/>\ne-mail: {$email}<br/>\nТелефон: {$phone}<br/>\nСообщение: $mess";
    20.     $headers="MIME-Version: 1.0\nContent-type: text/html; charset=windows-1251\nFrom: {$email}\n";
    21.    
    22.     /*if($fh= fopen('out.txt','wb')){
    23.         fwrite($fh,"heades:\n".$headers."\nmessage:\n".$mess);
    24.         fclose($fh);
    25.     }*/
    26.    
    27.     $send=mail($to,$subject,$message,$headers);
    28.  
    29.     if ($send){
    30.         $msg='<p>Спасибо за отправку вашего сообщения!</p>'."\n".'<p><a href="/">Перейти на главную</a></p>';
    31.     }
    32. }
    33.  
    34. if($counter>0 && strlen($email)<5){$msg.='<p>Укажите ваш емаил!</p>';}
    35. echo <<<FORM
    36. <form method="post" action="" style="width:333px;margin:auto;text-align:right;">
    37.     <label>имя</label><input name="name" type="text" value="$name"/><br/>
    38.     <label>телефон</label><input name="phone" type="text" value="$phone"/><br/>
    39.     <label>сообщение</label><textarea name="mess" type="text">$mess</textarea><br/>
    40.     <label>емаил</label><input name="email" type="text" value="$email"/><br/>
    41.     <input name="counter" type="hidden" value="$counter"/>
    42.     <input type="submit"/>
    43. $msg
    44. </form>
    45. FORM;
    46. ?>
     
  11. Nisan

    Nisan Активный пользователь

    С нами с:
    5 окт 2008
    Сообщения:
    12
    Симпатии:
    0
    YSandro, спасибо большое за помощь!

    Все равно письма идут от сервера.
    Скорее всего дело именно в ru-centr
     
  12. Shumomer

    Shumomer Активный пользователь

    С нами с:
    12 мар 2011
    Сообщения:
    194
    Симпатии:
    1
    Адрес:
    из вашего вображения
    а если так:
    mail([email='nobody@example.com]'nobody@example.com[/email]', 'the subject', 'the message', null, '-fwebmaster@example.com');
     
  13. Nisan

    Nisan Активный пользователь

    С нами с:
    5 окт 2008
    Сообщения:
    12
    Симпатии:
    0
    Всем спасибо!

    Разобрался. Дело, как я и предполагал, оказалось в РУ-ЦЕНТРЕ.
    Если кто-нибудь пользуется их почтовым сервером и хочет реализовать возможность отправки почты со своего сайта от имени пользователей посредством php mail(), то необходимо:

    В панели управления хостингом перейти в раздел "Веб-сервер" -> "Почта веб-сервера" и для параметра "Исходящая - доверенные получатели" указать адрес, на который письма должны приходить от пользователей.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Nisan
    нормальный хостинг тебя спасет.
     
  15. Nisan

    Nisan Активный пользователь

    С нами с:
    5 окт 2008
    Сообщения:
    12
    Симпатии:
    0
    igordata
    Да, согласен, хостинг не фонтан! Просто нет времени на поиск более лучшего лучшего варианта.
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Nisan
    что там за поиск может быть? а бюджет какой?
     
  17. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Здесь http://ua.php.net/manual/en/function.mail.php довольно много примеров, также уместно вынести все это хозяйство (отправку почты) в функцию и облегчить себе жизнь в дальнейшем.
     
  18. devilman

    devilman Новичок

    С нами с:
    24 мар 2014
    Сообщения:
    3
    Симпатии:
    0
    Добрый день. Не могу никак разобраться. Задача следующая.
    Два сайта. Первый отправляет по почте 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);
    ?>