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

Форум PHP

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

 

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

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

тема: Отправка Email
 
 автор: nameivan   (23.03.2009 в 09:00)   письмо автору
 
 

Добрый день!
Не работает отправка писем, подскажите где напортачил?

include("send_mail.php");
    $mail = new Mail();
    $mail -> to = $email; //сюда подставляется реальный адрес
    $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);   
 





<?php 
session_start
();
 
  
$email=$_SESSION['userMail'];
class 
Mail 
  
{
  
// создаем переменные, в которых хранится содержимое заголовков
  
var $to '$email';
  var 
$from '';
  var 
$reply_to '';
  var 
$cc '';
  var 
$bcc '';
  var 
$subject '';
  var 
$msg '';
  var 
$validate_email true
  
// проверяет допустимость почтовых адресов
  
var $rigorous_email_check true
  
// проверяет допустимость доменных имен по записям DNS
  
var $allow_empty_subject false
  
// допустимость пустого поля subject
  
var $allow_empty_msg false
  
// допустимость пустого поля msg
    
  
var $headers = array();   
  
/* массив $headers содержит все поля заголовка, кроме to и subject*/
    
  
function check_fields()
    
/* метод, проверяющий, переданы ли все значения заголовков
    и проверку допустимости почтовых адресов */
  
{
    if(empty(
$this -> to))
    {
      return 
false;       
    }
    if(!
$this -> allow_empty_subject && empty($this -> subject))
    {
      return 
false;       
    }
    if(!
$this -> allow_empty_msg && empty($this -> msg))
    {
      return 
false;       
    }
    
/* если есть дополнительные заголовки, помещаем их в массив $headers*/
    
if(!empty($this -> from))
    {
      
$this->headers[] = "From: $this -> from";
    }
    if(!empty(
$this -> reply_to))
    {
      
$this -> headers[] = "Reply_to: $this -> reply_to";
    } 
    
// проверяем допустимость почтового адреса      
    
if ($this -> validate_email)
    {
       if (!
preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i"$this -> to))
       {
          return 
false;
       }
       return 
true;
    }
  }
    
  function 
send()
  
/* метод отправки сообщения */
  
{
     if(!
$this -> check_fields()) return true;
     if (
mail($this -> tohtmlspecialcharsstripslashes(trim($this -> subject))),
        
htmlspecialchars(stripslashes(trim($this -> msg)))))
     {
        return 
true;
     }else{
        return 
false;
     } 
  }
}
?>

  Ответить  
 
 автор: Trianon   (23.03.2009 в 09:07)   письмо автору
 
   для: nameivan   (23.03.2009 в 09:00)
 

Файл с классом отправки откуда брали?

  Ответить  
 
 автор: nameIvan   (23.03.2009 в 13:03)   письмо автору
 
   для: Trianon   (23.03.2009 в 09:07)
 

с софттайма и брал

вот этого не было
session_start();
$email=$_SESSION['userMail'];
я уже добавил

  Ответить  
 
 автор: Trianon   (23.03.2009 в 13:53)   письмо автору
 
   для: nameIvan   (23.03.2009 в 13:03)
 

>с софттайма и брал
тогда ждите cheops'a... может он посоветует чего...

  Ответить  
 
 автор: Dobrynin   (23.03.2009 в 14:01)   письмо автору
 
   для: nameivan   (23.03.2009 в 09:00)
 

какая хоть ошибка-то возникает? тогда легче будет рассуждать.
у вас функция mail работает? может ваш сервер не поддерживает отправку писем. Или вы с localhost у себя на компе пытаетесь запустить? (тогда точно не сработает)

попробуйте такой код:

<?php
mail 
'ваша_почта@почтовый_сервер.ru''странная тема письма''тело письма' );
?>


если и это не сработает, тогда вопрос решается сам собой. Ваш компьютер не поддерживает отправку почты =)

  Ответить  
 
 автор: Trianon   (23.03.2009 в 14:04)   письмо автору
 
   для: Dobrynin   (23.03.2009 в 14:01)
 

там класс дохлый

  Ответить  
 
 автор: nameIvan   (23.03.2009 в 14:19)   письмо автору
 
   для: Dobrynin   (23.03.2009 в 14:01)
 

в том то и дело что нет никаких ошибок. выдает сообщение что все ОК и письмо отправлено, но при этом письма в tmp нет

  Ответить  
 
 автор: Dobrynin   (23.03.2009 в 14:36)   письмо автору
 
   для: nameIvan   (23.03.2009 в 14:19)
 

проверил класс, всё замечательно работает, только есть одна маленькая недоработка:
var $to = '$email';

напиши что-нибудь типа:
var $to = 'mail@mail.ru';

  Ответить  
 
 автор: Trianon   (23.03.2009 в 14:39)   письмо автору
 
   для: nameIvan   (23.03.2009 в 14:19)
 

замечу, что строки var $to = '$email'; в том варианте что висит в примерах скриптов портала - нет.

  Ответить  
 
 автор: nameIvan   (23.03.2009 в 14:55)   письмо автору
 
   для: Trianon   (23.03.2009 в 14:39)
 

верно, там написано так
var $to = '';

я же попытался передать в эту переменную адрес который ввел пользователь

  Ответить  
 
 автор: Dobrynin   (23.03.2009 в 14:58)   письмо автору
 
   для: nameIvan   (23.03.2009 в 14:55)
 

теперь всё работает?

  Ответить  
 
 автор: Trianon   (23.03.2009 в 14:59)   письмо автору
 
   для: nameIvan   (23.03.2009 в 14:55)
 

вообще-то там в примере указано, как задавать адрес назначения. Делайте как в примере, если уж взялись использовать чужой класс.
Другое дело, что скрипт рушится, при попытке задать from или reply_to, но Вы же их не применяете...

  Ответить  
 
 автор: nameIvan   (23.03.2009 в 15:01)   письмо автору
 
   для: Trianon   (23.03.2009 в 14:59)
 

нет не работает
проблема здесь $mail -> to = "$email"; переменная $email хранит адрес который ввел пользователь, и если здесь вписать конктерный алрес то все ОК, а если передавать через переменную то не работат

  Ответить  
 
 автор: Trianon   (23.03.2009 в 15:10)   письмо автору
 
   для: nameIvan   (23.03.2009 в 15:01)
 

значит в переменной $email нет адреса.

  Ответить  
 
 автор: nameIvan   (23.03.2009 в 15:13)   письмо автору
 
   для: Trianon   (23.03.2009 в 15:10)
 

странно
если выводить $email до
include("send_mail.php");
$mail = new Mail();
$mail -> to = $email; //сюда подставляется реальный адрес
$mail -> subject = "test";
$mail -> msg = "testing...";
$mail -> msg = "testing...";
$mail -> rigorous_email_check = 0;

то адрес есть, а если после то ничего не выводит

  Ответить  
 
 автор: Trianon   (23.03.2009 в 15:14)   письмо автору
 
   для: nameIvan   (23.03.2009 в 15:13)
 

показывайте фрагмент обращения к классу.
и лучше бы Вы сделали echo( $mail -> to );

  Ответить  
 
 автор: nameIvan   (23.03.2009 в 15:20)   письмо автору
 
   для: Trianon   (23.03.2009 в 15:14)
 


<?php 

class Mail 
  
{
  
// создаем переменные, в которых хранится содержимое заголовков
  
var $to '';
  var 
$from '';
  var 
$reply_to '';
  var 
$cc '';
  var 
$bcc '';
  var 
$subject '';
  var 
$msg '';
  var 
$validate_email true
  
// проверяет допустимость почтовых адресов
  
var $rigorous_email_check true
  
// проверяет допустимость доменных имен по записям DNS
  
var $allow_empty_subject false
  
// допустимость пустого поля subject
  
var $allow_empty_msg false
  
// допустимость пустого поля msg
    
  
var $headers = array();   
  
/* массив $headers содержит все поля заголовка, кроме to и subject*/
    
  
function check_fields()
    
/* метод, проверяющий, переданы ли все значения заголовков
    и проверку допустимости почтовых адресов */
  
{
    if(empty(
$this -> to))
    {
      return 
false;       
    }
    if(!
$this -> allow_empty_subject && empty($this -> subject))
    {
      return 
false;       
    }
    if(!
$this -> allow_empty_msg && empty($this -> msg))
    {
      return 
false;       
    }
    
/* если есть дополнительные заголовки, помещаем их в массив $headers*/
    
if(!empty($this -> from))
    {
      
$this->headers[] = "From: $this -> from";
    }
    if(!empty(
$this -> reply_to))
    {
      
$this -> headers[] = "Reply_to: $this -> reply_to";
    } 
    
// проверяем допустимость почтового адреса      
    
if ($this -> validate_email)
    {
       if (!
preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i"$this -> to))
       {
          return 
false;
       }
       return 
true;
    }
  }
    
  function 
send()
  
/* метод отправки сообщения */
  
{
     if(!
$this -> check_fields()) return true;
     if (
mail($this -> tohtmlspecialcharsstripslashes(trim($this -> subject))),
        
htmlspecialchars(stripslashes(trim($this -> msg)))))
     {
        return 
true;
     }else{
        return 
false;
     } 
  }
}
?>


include("send_mail.php");
    $mail = new Mail();
    $mail -> to = $email; //сюда подставляется реальный адрес
    $mail -> subject = "test";
    $mail -> msg = "testing...";
    $mail -> msg = "testing...";
    $mail -> rigorous_email_check = 0;
    if($mail->send()){
        echo $email; 
        echo("<br>Success");
        
    }else{
        echo("error");
    }
    echo("<br>");
    echo($mail -> msg);        

  Ответить  
 
 автор: yuk   (23.03.2009 в 15:13)   письмо автору
 
   для: nameIvan   (23.03.2009 в 15:01)
 

var $to = '$email';

РНР код не обрабатывается в одинарных кавычках - ставьте двойные.
В данном случае лучше уж совсем без них.

  Ответить  
Rambler's Top100
вверх

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