Здравствуйте! Проблема такая. Я написал скрипт, который используя функцию mail отправляет почту. Вроде бы все хорошо, кроме одного. Письма на некоторых почтовых серверах определяются как спам. Я прочитал как определяют спам на почтовых серверах. Вроде как используют спамасассин и подобные программы (или модули, точно не знаю). Вот такой ассасин добавляет к моему письму заголовок спам или поссибл спам. Что не очень то хорошо. Так же нашел статью где описывалось что определенные очки за спам засчитывают если поле replay-to пустое. У меня его вообще нет. Попробовал вставить такое поле в свой класс отправки почты и он перестал отправлять почту. ошибка где то видимо. Помогите найти ошибку, замучился уже. Вот код PHP: class Mailer { var $subject; // (string) Тема var $text; // (string) Текст сообщения (txt-вариант) var $html; // (string) Текст сообщения (html-вариант) var $from; // (string) От кого var $to; // (string) Кому var $charset; // (string) Кодировка (по умолчанию Windows-1251) var $sHeaders; // (string) var $sBody; // (string) var $sContentType; // (string) var $sHtmlTemplate; // (string) var $sBoundary; // (string) var $aAttaches; // (array) // Конструктор класса function Mailer() { $this->charset = 'UTF-8'; $this->aAttaches = array(); $this->sBoundary = substr(md5(uniqid(rand(),true)),0,16); $this->sHtmlTemplate = '<html><head><title>{title}</title></head><body>{body}</body></html>'; } // Добавить заголовок function DoHeader($sHeader) { $this->sHeaders .= $sHeader."\r\n"; } // Прикрепить файл function Attach($sPath,$mimeType) { if (file_exists($sPath)) { $sName=basename($sPath); $sAttach ="Content-Type: $mimeType; name=\"$sName\"\r\n"; $sAttach.="Content-Disposition: attachment; filename=\"$sName\"\r\n"; $sAttach.="Content-Transfer-Encoding: base64\r\n"; $sAttach.="\r\n"; $sAttach.=base64_encode(file_get_contents($sPath))."\r\n"; $this->aAttaches[] = $sAttach; } } // Добавить HTML function AddHtml($sHtml) { $this->html.=$sHtml."\r\n"; } // Установить шаблон function SetTemplate($sPath) { if (file_exists($sPath)) $this->sHtmlTemplate = file_get_contents($sPath); } // Отправить function Send() { $iCountAtt=count($this->aAttaches); $this->sHeaders ="From: {$this->from}\r\n"; $this->sHeaders ="Reply-To: {$this->reply-to}\r\n" ; $this->sHeaders.="MIME-Version: 1.0\r\n"; if (!$this->html && !$iCountAtt) { $this->sHeaders.='Content-Type: text/plain; charset='.$this->charset."\r\n"; $this->sBody = $this->text; } elseif ($this->html && !$iCountAtt) { $this->sHeaders.='Content-Type: text/html; charset='.$this->charset."\r\n"; $aFields=array(); $aFields['{title}'] = $this->subject; $aFields['{body}'] = $this->html; $this->sBody = strtr($this->sHtmlTemplate,$aFields); } elseif (!$this->html && $iCountAtt) { $this->sHeaders.="Content-Type: multipart/mixed; boundary=\"{$this->sBoundary}\"\r\n"; foreach ($this->aAttaches as $sAttach) { $this->sBody .= "--{$this->sBoundary}\r\n"; $this->sBody .= $sAttach; } $this->sBody .= "--{$this->sBoundary}--\r\n"; } elseif ($this->html && $iCountAtt) { $this->sHeaders.="Content-Type: multipart/mixed; boundary=\"{$this->sBoundary}\"\r\n"; $this->sBody .= "--{$this->sBoundary}\r\n"; $this->sBody .= "Content-Type: text/html; charset={$this->charset}\r\n"; $this->sBody .= "Content-Transfer-Encoding: 8bit\r\n"; $this->sBody .= "\r\n"; $aFields=array(); $aFields['{title}'] = $this->subject; $aFields['{body}'] = $this->html; $this->sBody .= strtr($this->sHtmlTemplate,$aFields); $this->sBody .= "\r\n"; foreach ($this->aAttaches as $sAttach) { $this->sBody .= "--{$this->sBoundary}\r\n"; $this->sBody .= $sAttach; } $this->sBody .= "--{$this->sBoundary}--\r\n"; } if (mail($this->to, $this->subject, $this->sBody, $this->sHeaders)) {echo 'successfull';} else { echo 'failure'; }; } } // End of class Mailer отправляю так PHP: $Message = new Mailer(); $Message->from = $user_mail; $Message->replay-to = $user_mail; $Message->to = $email.",".$user_mail; $Message->subject = 'Order #'.$neworder.' '.$today.' '.$ordername; $Message->charset = 'UTF-8'; $Message->html = '<br /><br /><strong>Address sender\'s:</strong><br>'.$lastname.' '.$firstname.'<br>Country: '.$country.'<br>State: '.$state.'<br>City: '.$city.'<br>Address: '.$address.'<br><br><strong>Contacts info:</strong><br>Phone: '.$phone.'<br>Mobile: '.$mobile.'<br>e-mail: '.$user_mail; $Message->Attach($order_pic_jpg,'image/jpg'); $Message->Attach($order_info_xml,'application/xml'); $Message->Send(); Что не так? буду очень благодарен за помошь.
Ошибку то я нашел, а вот что делать с тем что определяется как спам, ума не приложу. Заголовки сравнивать? не пойдет. Все необходимые тут есть. Все дело в алгоритме, которым письмо помечают как спам. И как это обойти, понятия не имею.
1й вопрос Ты точно уверен что у свойства класса, да и у переменной, может быть такое имя? Правила формирования имени переменой 2й вопрос Как ты полагаешь, что в результате будет содержать в себе sHeaders?
эти строки из коеа где есть >reply-tо надо убрать. я ошибся. это тут вообще не нужно. У меня уже есть поле to. Код я поправил. Чуть позже выложу поправленный код. )) Сейчас меня беспокит "спам", вернее почему письмо определется как спам.