За последние 24 часа нас посетили 17613 программистов и 1314 роботов. Сейчас ищут 1773 программиста ...

Письмоотправляемое функцией mail определяется как спам

Тема в разделе "Работа с почтой", создана пользователем White Wolf, 13 окт 2009.

  1. White Wolf

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

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    Здравствуйте!
    Проблема такая. Я написал скрипт, который используя функцию mail отправляет почту. Вроде бы все хорошо, кроме одного. Письма на некоторых почтовых серверах определяются как спам. Я прочитал как определяют спам на почтовых серверах. Вроде как используют спамасассин и подобные программы (или модули, точно не знаю). Вот такой ассасин добавляет к моему письму заголовок спам или поссибл спам. Что не очень то хорошо. Так же нашел статью где описывалось что определенные очки за спам засчитывают если поле replay-to пустое. У меня его вообще нет. Попробовал вставить такое поле в свой класс отправки почты и он перестал отправлять почту. ошибка где то видимо. Помогите найти ошибку, замучился уже.
    Вот код
    PHP:
    1.  
    2. class Mailer
    3. {
    4. var $subject;       // (string) Тема
    5. var $text;          // (string) Текст сообщения (txt-вариант)
    6. var $html;          // (string) Текст сообщения (html-вариант)
    7. var $from;          // (string) От кого
    8. var $to;            // (string) Кому
    9. var $charset;       // (string) Кодировка (по умолчанию Windows-1251)
    10.  
    11. var $sHeaders;       // (string)
    12. var $sBody;          // (string)
    13. var $sContentType;   // (string)
    14. var $sHtmlTemplate;  // (string)
    15. var $sBoundary;      // (string)
    16. var $aAttaches;      // (array)
    17.  
    18. // Конструктор класса
    19. function Mailer()
    20.          {
    21.          $this->charset      = 'UTF-8';
    22.          $this->aAttaches     = array();
    23.          $this->sBoundary     = substr(md5(uniqid(rand(),true)),0,16);
    24.          $this->sHtmlTemplate = '<html><head><title>{title}</title></head><body>{body}</body></html>';
    25.          }
    26.  
    27. // Добавить заголовок
    28. function DoHeader($sHeader)
    29.          {
    30.          $this->sHeaders .= $sHeader."\r\n";
    31.          }
    32.  
    33. // Прикрепить файл
    34. function Attach($sPath,$mimeType)
    35.          {
    36.          if (file_exists($sPath))
    37.             {
    38.             $sName=basename($sPath);
    39.             $sAttach ="Content-Type: $mimeType; name=\"$sName\"\r\n";
    40.             $sAttach.="Content-Disposition: attachment; filename=\"$sName\"\r\n";
    41.             $sAttach.="Content-Transfer-Encoding: base64\r\n";
    42.             $sAttach.="\r\n";
    43.             $sAttach.=base64_encode(file_get_contents($sPath))."\r\n";
    44.             $this->aAttaches[] = $sAttach;
    45.             }
    46.          }
    47.  
    48. // Добавить HTML
    49. function AddHtml($sHtml)
    50.          {
    51.          $this->html.=$sHtml."\r\n";
    52.          }
    53.  
    54. // Установить шаблон
    55. function SetTemplate($sPath)
    56.          {
    57.          if (file_exists($sPath)) $this->sHtmlTemplate = file_get_contents($sPath);
    58.          }
    59. // Отправить
    60. function Send()
    61.          {
    62.          $iCountAtt=count($this->aAttaches);
    63.          $this->sHeaders ="From: {$this->from}\r\n";
    64.          $this->sHeaders ="Reply-To: {$this->reply-to}\r\n" ;
    65.          $this->sHeaders.="MIME-Version: 1.0\r\n";
    66.          if (!$this->html && !$iCountAtt)
    67.             {
    68.             $this->sHeaders.='Content-Type: text/plain; charset='.$this->charset."\r\n";
    69.             $this->sBody = $this->text;
    70.             }
    71.          elseif ($this->html && !$iCountAtt)
    72.                 {
    73.                 $this->sHeaders.='Content-Type: text/html; charset='.$this->charset."\r\n";
    74.                 $aFields=array();
    75.                 $aFields['{title}'] = $this->subject;
    76.                 $aFields['{body}']  = $this->html;
    77.                 $this->sBody = strtr($this->sHtmlTemplate,$aFields);
    78.                 }
    79.          elseif (!$this->html && $iCountAtt)
    80.                 {
    81.                 $this->sHeaders.="Content-Type: multipart/mixed; boundary=\"{$this->sBoundary}\"\r\n";
    82.                 foreach ($this->aAttaches as $sAttach)
    83.                         {
    84.                         $this->sBody .= "--{$this->sBoundary}\r\n";
    85.                         $this->sBody .= $sAttach;
    86.                         }
    87.                 $this->sBody .= "--{$this->sBoundary}--\r\n";
    88.                 }
    89.          elseif ($this->html && $iCountAtt)
    90.                 {
    91.                 $this->sHeaders.="Content-Type: multipart/mixed; boundary=\"{$this->sBoundary}\"\r\n";
    92.                 $this->sBody .= "--{$this->sBoundary}\r\n";
    93.                 $this->sBody .= "Content-Type: text/html; charset={$this->charset}\r\n";
    94.                 $this->sBody .= "Content-Transfer-Encoding: 8bit\r\n";
    95.                 $this->sBody .= "\r\n";
    96.                 $aFields=array();
    97.                 $aFields['{title}'] = $this->subject;
    98.                 $aFields['{body}']  = $this->html;
    99.                 $this->sBody .= strtr($this->sHtmlTemplate,$aFields);
    100.                 $this->sBody .= "\r\n";
    101.                 foreach ($this->aAttaches as $sAttach)
    102.                         {
    103.                         $this->sBody .= "--{$this->sBoundary}\r\n";
    104.                         $this->sBody .= $sAttach;
    105.                         }
    106.                 $this->sBody .= "--{$this->sBoundary}--\r\n";
    107.                 }
    108.          if (mail($this->to, $this->subject, $this->sBody, $this->sHeaders)) {echo 'successfull';} else { echo 'failure'; };
    109.          }
    110.  
    111. } // End of class Mailer
    112.  
    отправляю так
    PHP:
    1.  
    2. $Message = new Mailer();
    3. $Message->from    =  $user_mail;
    4. $Message->replay-to    =  $user_mail;
    5. $Message->to      =  $email.",".$user_mail;
    6. $Message->subject = 'Order #'.$neworder.' '.$today.' '.$ordername;
    7. $Message->charset = 'UTF-8';
    8. $Message->html    = '<br /><br /><strong>Address sender\'s:</strong><br>'.$lastname.'&nbsp;'.$firstname.'<br>Country:&nbsp;'.$country.'<br>State:&nbsp;'.$state.'<br>City:&nbsp;'.$city.'<br>Address:&nbsp;'.$address.'<br><br><strong>Contacts info:</strong><br>Phone:&nbsp;'.$phone.'<br>Mobile:&nbsp;'.$mobile.'<br>e-mail: '.$user_mail;
    9. $Message->Attach($order_pic_jpg,'image/jpg');
    10. $Message->Attach($order_info_xml,'application/xml');
    11. $Message->Send();
    12.  
    Что не так? буду очень благодарен за помошь.
     
  2. White Wolf

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

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    Ошибку то я нашел, а вот что делать с тем что определяется как спам, ума не приложу. Заголовки сравнивать? не пойдет. Все необходимые тут есть. Все дело в алгоритме, которым письмо помечают как спам. И как это обойти, понятия не имею.
     
  3. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    1й вопрос
    Ты точно уверен что у свойства класса, да и у переменной, может быть такое имя?
    Правила формирования имени переменой

    2й вопрос
    Как ты полагаешь, что в результате будет содержать в себе sHeaders?
     
  4. White Wolf

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

    С нами с:
    5 авг 2009
    Сообщения:
    29
    Симпатии:
    0
    Адрес:
    Томск
    эти строки из коеа где есть >reply-tо надо убрать. я ошибся. это тут вообще не нужно. У меня уже есть поле to. Код я поправил. Чуть позже выложу поправленный код. )) Сейчас меня беспокит "спам", вернее почему письмо определется как спам.
     
  5. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Текст, блэклисты и т.д.