Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > функция mail()


Автор: artsb 8.11.2008, 00:09
Всем привет!

Знаю что таких тем много smile

Помогите разобраться с функцией mail(string $to, string $subject, string $message [, string $additional_headers [, string $additional_parameters]] ).

Вот кусок кода из примера:
Код

$headers = 'From: [email protected]' . "\r\n" .
    'Reply-To: [email protected]' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
$headers .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n";
$headers .= 'Cc: [email protected]' . "\r\n";
$headers .= 'Bcc: [email protected]' . "\r\n";

From: - это от кого пришло, а остальные? И что здесь делает To:, если оно есть отдельно? Что ещё здесь можно передать?
Зачем нужен четвёртый параметр?
Как сделать, чтобы вместо мыла, при просмотре почты, отображался текс. (Например, если мыло есть в адресной книге, отображается не мыло, а имя отправителя).

Спасибо.

Автор: seos 12.11.2008, 05:12
скачай пример на php .. там све есть и описание всех параметров и как отображать имя вместо мыла( Mary <[email protected]>)

Автор: artsb 17.11.2008, 17:52
Решил не создавать новую тему.

Отправляю письмо так:
Код

mail("адрес моей почты", $subject, $message, 'MIME-Version: 1.0' . "\r\n".
                    'Content-type: text/html; charset=windows-1251' . "\r\n".
                    'From: '.$name.' <'.$email.'>' . "\r\n");

$name - имя, которое посетитель сайта ввёл в форму.
$email - адрес почты, который ввёл посетитель сайта.

Хочу, чтобы при просмотре почтового ящика, письма выглядели так, как-будто их отправил посетитель сайта со своего почтового ящика, а именно, чтобы в поле 'От кого' было написано имя отправителя и его e-mail адрес.
При использовании приведённого выше кода, имя отопражается правильно, а вот вместо адреса, хранящегося в $email отображаетя адрес сервера на котором находится сайт.
Реально, вообще, подставить другой адрес?

Автор: ZlojEzh 17.11.2008, 19:36
помимо From надо указывать дополнительные заголовки - Reply-to, Sender

Автор: destrd 17.11.2008, 19:48
Выдерните класс для отправки писем из какого-нибудь framework'a. Там и отправка файлов будет и проч.

Автор: ksnk 17.11.2008, 20:08
Цитата

Реально, вообще, подставить другой адрес? 

Реально! 

Ситуация, однако, странная. Было бы более представимо, если бы полностью замещался заголовок From на собственный, это бы значило, что mail все равно подставляет свой From, не взирая на его наличие, а так даже не могу вообразить. Может вирус?  smile 

У Денвера есть забавная фенечка - эмулятор-затычка для sendmai'а. Отправленное письмо сохраняется на диске и его можно просмотреть хоть аутлуком, хоть текстовым редактором и проверить в точности чего-ж там нагенерилось. Очень удобно для отладки.

Автор: artsb 17.11.2008, 20:11
Цитата

надо указывать дополнительные заголовки - Reply-to, Sender

Добавил Reply-to - ничего.
Про Sender ничего не нашёл. Не знаю как егго записывать. Можно пример?

Цитата

Выдерните класс для отправки писем из какого-нибудь framework'a. Там и отправка файлов будет и проч. 

Тоже вариант. Но лучше, когда понимаешь что делаешь. smile

Добавлено через 1 минуту и 44 секунды
Цитата

У Денвера есть забавная фенечка - эмулятор-затычка для sendmai'а. Отправленное письмо сохраняется на диске и его можно просмотреть хоть аутлуком, хоть текстовым редактором и проверить в точности чего-ж там нагенерилось. Очень удобно для отладки. 

Можете описать как?

Автор: destrd 17.11.2008, 21:04
Цитата(artsb @  17.11.2008,  20:11 Найти цитируемый пост)
Но лучше, когда понимаешь что делаешь. 

Посмотреть как это там реализовано, и сделать похоже, проще и самому.

Автор: ksnk 17.11.2008, 22:55
Цитата

Можете описать как? 

Как поставить http://www.denwer.ru/? Вообще-то это Виндовая сборка php+Апач+MySql. В принципе - она заточена под отладку веб-приложений локально. Она ставится относительно безболезненно даже при минимальном понимании смысла всех действий по инициализации всего этого добра smile

Сама затычка представляет собой файл sendmail.exe, который уже размещен в том месте, который ожидает установленный Денвером php. Функция mail по умолчанию посылает письма через этот самый sendmail, а этот самый sendmail выкладывает их на диск. То есть самостоятельного смысла затычка не имеет.

В Юниксах, насколько мне не изменяет мой склероз, можно настроить базовый sendmail, чтобы он вел себя точно так-же, то есть складировал письма вместо отправки или вместе с отправкой.

Кстати, почти все примеры в описании функции http://ru2.php.net/manual/ru/function.mail.php содержат использование заголовка From:. Это наводит на мысль, что проблем с Фромом ни у кого нет smile

Автор: artsb 18.11.2008, 09:09
Цитата

Посмотреть как это там реализовано, и сделать похоже, проще и самому. 

Там, насколько мне известно, довольно много мусора. Но всё равно спасибо за совет.

Да не-е-е. Денвер уже стоит. Я спрашиваю как сделать чтобы просмотреть
Цитата

проверить в точности чего-ж там нагенерилось

Но вообще-то, что там смотреть если и так всё видно: имя то, кторое я подставил, а адрес другой. Могу выложить скрин.

Добавлено через 14 минут и 19 секунд
Вот:
user posted image

Автор: ksnk 18.11.2008, 10:25
artsb, Все страньше и страньше smile
Код

+-------------------------------------------------------------------------+
| Джентльменский набор Web-разработчика                                   |
| Версия: Денвер-3 2008-01-13                                             |


Про то, что Денверовский sendmail состоит из одного только exe я, видимо, погорячился. Каталог там довольно представительный - 11 файлов ... 

У меня такого эффекта нет. Хотя я посылаю адрес попроще, без угловых скобок. Может в этом дело?




Автор: artsb 18.11.2008, 10:45
Цитата(ksnk @  18.11.2008,  10:25 Найти цитируемый пост)
Может в этом дело?

Скорее всего нет. Т.к. я пытался отправлять просто адрес без имени - то же самое.

Автор: ksnk 18.11.2008, 10:57
А если просто тупо исполнить кусок из документации
Код

<?php
$to      = '[email protected]';
$subject = 'the subject';
$message = 'hello';
$headers = 'From: [email protected]' . "\r\n" .
   'Reply-To: [email protected]' . "\r\n" .
   'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);
?>

?


Автор: artsb 18.11.2008, 12:20
ksnk, попробую вечером. Сейчас времени нет.

Автор: artsb 18.11.2008, 23:21
ksnk, всё равно :(

Автор: ZlojEzh 19.11.2008, 09:42
artsb, покажите полный заголовок получаемого письма

на какой платформе это должно работать? загвоздка еще может быть в настройках sendmail

Автор: artsb 19.11.2008, 10:23
Цитата(ZlojEzh @  19.11.2008,  09:42 Найти цитируемый пост)
покажите полный заголовок получаемого письма

Дык я же показал скрин. Там больше ничего нет. Или нужно что-то ещё?

Цитата(ZlojEzh @  19.11.2008,  09:42 Найти цитируемый пост)
на какой платформе это должно работать?

Вы имеете ввиду ОС?

Цитата(ZlojEzh @  19.11.2008,  09:42 Найти цитируемый пост)
загвоздка еще может быть в настройках sendmail 

Как её решить?

Автор: unicross 19.11.2008, 18:04
artsb, попробуйте так
Код

<?php
$to = '[email protected]';
$subject = 'Тема сообщения';
$message = 'Привет мир!';
$name = "Николай";
$email = "[email protected]";
$name = '=?windows-1251?B?' . base64_encode($name) . '?=';
$subject = '=?windows-1251?B?' . base64_encode($subject) . '?=';
$headers = 'Content-type: text/html; charset=windows-1251' . "\r\n" . 
   'From: '.$name.' <'.$email.'>' . "\r\n"  . 
   'Reply-To: ' . $email;
mail($to, $subject, $message, $headers, '-f' . $email);
?>

Автор: ZlojEzh 19.11.2008, 19:25
Цитата(artsb @  19.11.2008,  10:23 Найти цитируемый пост)
Дык я же показал скрин

нужен полный заголовок
в outlook его можно получить из "свойства" письма - Подробнее
в gmail - показать все заголовки, или что-то в этом роде

просто не ясно в чем проблема - не устанавливается заголовок From, или его перекрывает какой-нить другой

Цитата(ZlojEzh @  19.11.2008,  09:42 Найти цитируемый пост)
загвоздка еще может быть в настройках sendmail

я сталкивался с похожей проблемой в sendmail под *nix, когда в настройках его запуска был жестко задан обратный адрес (-v или -f, не помню точно)

Автор: artsb 19.11.2008, 19:32
unicross, не помогло :(

Автор: artsb 19.11.2008, 20:26
В почте на сервере, в общем списке писем в поле "От:" отображается только имя отправителя, а при открытии письма - ещё и адрес отправителя.

При использовании первого приведённого мною кода.
В общем списке: Указанное_мною_имя
При открытии письма: Указанное_мною_имя <[email protected]>

Потом воспользовался кодом unicross.
Не помогло.

Убрал угловые скобки.
В общем списке: ???????????? Указанный_мною_адрес
При открытии письма: Указанное_мною_имя Указанный_мною_адрес

Но, в этом случае, при отправке ответа, в поле "Кому:" всё равно вставляется <[email protected]>


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

Автор: artsb 19.11.2008, 22:32
Настроил The Bat! smile

Отправляю с сайта из формы письмо:

Имя: Artsb
E-mail:    здесь_моё_мыло
Тема: Просто так
Сообщение: Тестовое сообщение

Вот исходный код письма (из The Bat!):
<< Убрал на всякий случай smile >>

Автор: ZlojEzh 20.11.2008, 01:33
а что выдает ini_get('sendmail_path') ?

Автор: Sanchezzz 20.11.2008, 06:53
выкиньте свой майл лучше используйте SNTP хоть за спам не посчитают класс для работы с SNTP атаче

минус в отправке SNTP нужна авторизация реального email

мини пример:

Код

$mymail = new PHPMailer();
$mymail->IsSMTP();                                     
$mymail->Host = "localhost";  
$mymail->SMTPAuth = true;    
$mymail->Username = "username"; 
$mymail->Password = "passsword"; 
$mymail->From = "[email protected]";
$mymail->FromName = "fromname";
                  
$mymail->CharSet=$char_set;   
$mymail->ClearAddresses();
$mymail->AddAddress('[email protected]'); //можно добовлять адреса в  список отправке
$mymail->Body='текст сообщения';
$mymail->Subject='Тема сообщения';

$mymail->Send())


+ в архиве есть отправка и через mail нормальным способом ... 



Автор: artsb 20.11.2008, 10:44
ZlojEzh/usr/sbin/sendmail -t -i

Sanchezzz, спасибо. Уже скачал, но разбираться буду вечером. Потом отпишусь.

Автор: artsb 20.11.2008, 22:56
Sanchezzz, спасибо. Теперь всё ОК.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)