Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Отправка почты
 
 автор: SoftPower   (10.08.2004 в 22:38)   письмо автору
 
 

Помогите пожалуйста! Функция mail() не работает (во время отправки сообщения возвращает false). Если сможете расскажите поподробнее как с ней работать.

   
 
 автор: Кузнецов М.В.   (10.08.2004 в 22:52)   письмо автору
 
   для: SoftPower   (10.08.2004 в 22:38)
 

Я сейчас чего-нибудь выложу про эту функцию, но вы бы поподробнее написали, что и где не работает...

   
 
 автор: cheops   (10.08.2004 в 23:56)   письмо автору
 
   для: SoftPower   (10.08.2004 в 22:38)
 

А на какой системе происходит отправка почты? Дело в том, что для нормальной работы функции mail() требуется почтовый агент. На хостингах, где по большей части установлен UNIX используется sendmail. Под windows sendmail не портирован и следует использовать либо альтернативный почтовый агент, либо общаться с почтовым ретранслятором через сокеты, вручную отправляя ему все низкоуровневые команды.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=182&page=1

   
 
 автор: SoftPower   (11.08.2004 в 08:40)   письмо автору
 
   для: cheops   (10.08.2004 в 23:56)
 

Отправка почты происходит на локальной машине с операционной системой Windows. Но недавно на вашем форуме я нашел, как общаться с почтовым ретранслятором через сокеты, вручную отправляя ему все низкоуровневые команды. Ваш пример: function send_mail($server, $to, $from, $subject="", $headers=""). Но для отправки письма используется ретранслятор 'mx9.yandex.ru' и письма получается отправлять только на адрес: ttt@yandex.ru. Подскажите пожалуйста, как отправлять письма на email такого типа, как ttt@umc.com.ua или ttt@rambler.ru.

   
 
 автор: Кузнецов М.В.   (11.08.2004 в 10:36)   письмо автору
 
   для: SoftPower   (11.08.2004 в 08:40)
 

>Но для отправки письма используется
>ретранслятор 'mx9.yandex.ru' и письма получается отправлять
>только на адрес: ttt@yandex.ru.
Не факт. У меня получалось отправлять через их ретранслятор (правда через mx2, а не mx9, но это вряд ли имеет значение) сообщения адресату, совсем с яндексом не связанному. Вряд ли за последние две недели изменилось... Точно также обстояло дело с другими изветными мне ретрансляторами.
Но если вы хотите точно использовать тот ретранслятор, на который хотите писать, тогда вот:
Для umc.com.ua ретрансляторы:
n7.umc.com.ua
n8.umc.com.ua
(с одинаковым приоритетом)
Для rambler:
imx1.rambler.ru
В скрипте, который приведен на форуме просто поменяйте яндексовский ретранслятор на тот, который Вам нужен.

   
 
 автор: SoftPower   (12.08.2004 в 21:53)   письмо автору
 
   для: Кузнецов М.В.   (11.08.2004 в 10:36)
 

Подскажите пожалуйста, где Вы берете адреса ретрансляторов на различные сайты. С уважением, Икрянов Владимир.

   
 
 автор: Кузнецов М.В.   (12.08.2004 в 22:42)   письмо автору
 
   для: SoftPower   (12.08.2004 в 21:53)
 

>Подскажите пожалуйста, где Вы берете адреса ретрансляторов
>на различные сайты.
Узнаю при помощи вот такого несложного скрипта, который возвращает MX-записи:
<?php 
$email
="ttt@yandex.ru";
$email_arr explode("@" $email);  
$host $email_arr[1];  
getmxrr($host$mxhostsarr$weight); 
echo 
"На $email письма могут отправляться через следующие хосты:<br>";  
for (
$i=0$i count($mxhostsarr); $i++) 

  echo (
"$mxhostsarr[$i] = $weight[$i]<br>"); 

?>


Здесь используется функция getmxrr, принимающая в качестве аргумента имя хоста hostname в данном домене и заполняет массив mxhost списком почтовых ретрансляторов этого домена.
Подробнее про эту функцию смотрите по урлу.

http://www.softtime.ru/info/articlephp.php?id_article=4

   
 
 автор: Kirill   (13.08.2004 в 10:55)   письмо автору
 
   для: Кузнецов М.В.   (12.08.2004 в 22:42)
 

А как эту функцию (getmaxrr) включить?
Насколько я понял, её действие зависит от значение следующего параметра в php.ini
Установил в такое (default off), но не помогает...
define_syslog_variables = PHP_INI_ALL

   
 
 автор: cheops   (13.08.2004 в 11:14)   письмо автору
 
   для: Kirill   (13.08.2004 в 10:55)
 

Дело в том, что как и большинство других сетевых функций, эта функция не поддерживается для Windows-платформы, вам потребуется UNIX-система(хостинг) для её использования.

   
 
 автор: [b]elenaki[/b]   (08.10.2004 в 11:01)
 
   для: cheops   (13.08.2004 в 11:14)
 

под Линуксом тоже не работает :(

   
 
 автор: cheops   (08.10.2004 в 20:31)   письмо автору
 
   для: [b]elenaki[/b]   (08.10.2004 в 11:01)
 

От коварных греков этого следовало ожидать :)))

   
 
 автор: Кузнецов М.В.   (08.10.2004 в 20:52)   письмо автору
 
   для: [b]elenaki[/b]   (08.10.2004 в 11:01)
 

Хм... У нас на хостинге (под Linux) и на нескольких других хостингов тоже под Lin все работает отменно.

   
 
 автор: broker   (09.10.2004 в 22:37)   письмо автору
 
   для: cheops   (13.08.2004 в 11:14)
 

У меня хост юниксовый и эта функция работает. Но вот Я толком не разобрался в вашем Sendmail-е . Тут не разобратся что где :
<?php
    
include("mail_class.php");
    
$mail = new Mail();
    
$mail -> to "web-admin@mail.ru";
    
//сюда подставляется реальный адрес
    
$mail -> subject "test";
    
$mail -> msg "testing...";
    
$mail -> msg "testing...";
    
$mail -> rigorous_email_check 0;
    if(
$mail->send()){
        echo(
"Success");
    }else{
        echo(
"error");
    }
    echo(
"<br>");
    echo(
$mail -> msg);
?>


Тут написано дважды $mail -> msg = "testing..."; зачем это или это ошибка ?
Где тут имя отправителья или его е-майл.
Я протестировал этот скрипт и мне пришел письмо с е-майлом хост сервера а у меня другой домен ( Как можно изменить это. И еще мне дали с хостом SMTP доступ можно использовать его ?

   
 
 автор: cheops   (09.10.2004 в 23:12)   письмо автору
 
   для: broker   (09.10.2004 в 22:37)
 

Здесь лучше воспользоваться функцией mail() на прямую.
<?php
  mail
("web-admin@mail.ru""test""testing...");
?>


PS Лично я считаю, что в PHP практически нет задач для использования которых требуется объектно-ориентированных подход (хотя сам его очень люблю :) - это удел больших серьёзных библиотек и систем предназначенных для большой команды разработчиков. PHP ориентирован всё-таки на "быстрый" код, который часто подвергается изменениям и над которым работает небольшое число программистов.

   
 
 автор: broker   (09.10.2004 в 23:25)   письмо автору
 
   для: cheops   (09.10.2004 в 23:12)
 

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

   
 
 автор: cheops   (09.10.2004 в 23:33)   письмо автору
 
   для: broker   (09.10.2004 в 23:25)
 

Нет, от чего же... для этого достаточно передать функции mail соотвествующий заголовк:
mail("web-admin@mail.ru", "test", "testing...","From: Someone <someone@mail.com>\n");


http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=442&page=1

   
 
 автор: Кузнецов М.В.   (10.10.2004 в 16:38)   письмо автору
 
   для: broker   (09.10.2004 в 23:25)
 

Можно, без проблем - просто подставляете нужное значение в поле from.

   
 
 автор: Кузнецов М.В.   (10.10.2004 в 16:43)   письмо автору
 
   для: broker   (09.10.2004 в 22:37)
 

Это просто тестовый скрипт для тестирования класса, извиняюсь за тавтологию. Т.е. просто пример на классы. В реале (если уж только не совсем большое и расширяемое приложение, которое сопровождает несколько человек) лучше все делать без них (без классов) и просто использовать функцию mail.

>Тут написано дважды $mail -> msg = "testing..."; зачем это
>или это ошибка ?
Это - оплошность.
>Где тут имя отправителья или его е-майл.
>Я протестировал этот скрипт и мне пришел письмо с е-майлом
>хост сервера а у меня другой домен ( Как можно изменить
>это.
В этом скрипте поле from отсутствует, поэтому Вам пришло, в этом поле то, что подставляет сервер. Добавьте поле from в этот скрипт, и все будет как Вам надо.

   
 
 автор: broker   (11.10.2004 в 10:20)   письмо автору
 
   для: Кузнецов М.В.   (10.10.2004 в 16:43)
 

Мне кажется у вас в функции сенд ошибка

  function send()
  /* метод отправки сообщения */
  {
     if(!$this -> check_fields()) return true;
     if (mail($this -> to, htmlspecialchars( stripslashes(trim($this -> subject))),
        htmlspecialchars(stripslashes(trim($this -> msg)))))
     {
        return true;
     }else{
        return false;
     } 
  }
}


Тут mail($this -> to, htmlspecialchars( stripslashes(trim($this -> subject))),
htmlspecialchars(stripslashes(trim($this -> msg)))) последная переменная должно быть не $this -> msg, а $this -> headers

   
 
 автор: Кузнецов М.В.   (11.10.2004 в 23:26)   письмо автору
 
   для: broker   (11.10.2004 в 10:20)
 

Ошибки нет.
Переменная msg - это переменная, которая содержит сообщение. heаders - это массив, содержащий тело собщения дополнительных заголовков.
Для того, чтобы сообщить функции доп.заголовки надо после переменной, содержащей тело сообщения (в нашем случае $msg) добавить перменную, содержащую заголовки. К примеру:
<?php
mail
($this->to$this->subject$this->msg,implode("\r\n"$this->headers)))
?>

   
 
 автор: broker   (11.10.2004 в 10:25)   письмо автору
 
   для: Кузнецов М.В.   (10.10.2004 в 16:43)
 

Думаю поэтому у меня не получался изменить адрес отправителья

http://softtime.ru/scripts/sendmessage.php

   
 
 автор: Кузнецов М.В.   (11.10.2004 в 23:15)   письмо автору
 
   для: broker   (11.10.2004 в 10:25)
 

Адрес отправителя у Вас не получается изменить потому что в этом скрипте это в принципе нельзя сделать. Для того, чтобы ввести эту возможность, допишите поле from, вставив его через headers. Мне это было не надо, поэтому я эту возможность и не ввел.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования