2011-01-01 2 views
1

На моем сервере я отправляю письма от PHP, но мои письма всегда попадают в папки спама. Я сделал запись spf, но это не имело значения. Также я использую службу Google Apps с этим доменом. Пожалуйста, помогитеМои электронные письма всегда идут в папку спама

почты Оригинал:

Delivered-To: [email protected] 
Received: by 10.42.178.133 with SMTP id bm5cs95762icb; 
     Fri, 31 Dec 2010 19:49:46 -0800 (PST) 
Received: by 10.223.112.1 with SMTP id u1mr875459fap.109.1293853785941; 
     Fri, 31 Dec 2010 19:49:45 -0800 (PST) 
Return-Path: <[email protected]> 
Received: from loft1397.serverloft.eu (loft1397.serverloft.eu [82.25.120.6]) 
     by mx.google.com with ESMTPS id 17si15455863fau.0.2010.12.31.19.49.45 
     (version=TLSv1/SSLv3 cipher=RC4-MD5); 
     Fri, 31 Dec 2010 19:49:45 -0800 (PST) 
Received-SPF: pass (google.com: best guess record for domain of [email protected] designates 82.25.120.6 as permitted sender) client-ip=82.25.120.6; 
Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of [email protected] designates 82.25.120.6 as permitted sender) [email protected] 
Received: from loft1397.serverloft.eu (unknown [127.0.0.1]) 
    by loft1397.serverloft.eu (Postfix) with ESMTP id 145B623A87F4 
    for <[email protected]>; Sat, 1 Jan 2011 03:49:45 +0000 (UTC) 
Received: by loft1397.serverloft.eu (Postfix, from userid 48) 
    id EED7623A8831; Sat, 1 Jan 2011 03:49:44 +0000 (UTC) 
To: [email protected] 
Subject: Test mail 
From: [email protected] 
Message-Id: <[email protected]> 
Date: Sat, 1 Jan 2011 03:49:44 +0000 (UTC) 

Hello! This is a simple email message. 

домена SPF записи: v = spf1 ip4: 82.25.120.6 ip4: 85.25.122.12 включают в себя: _spf.google.com ~ все

+0

Что вы используете, чтобы отправить электронное письмо? – RobertPitt

+0

Возможный дубликат [Как вы уверены, что адрес электронной почты, который вы отправляете программно, автоматически не помечен как спам?] (Http://stackoverflow.com/questions/371/how-do-you-make-sure-email-you-send -programmatically-is-not-automatic-marked) –

+0

RoberPitt: http://pastebin.com/1JWEfXnE – mTuran

ответ

3

Прежде всего, самое лучшее, что вы могли бы сделать для решения этой проблемы в долгосрочной перспективе, - это использовать службу для отправки своих электронных писем. Есть много из них, но я слышал хорошие вещи об этих трех:

Существует также новый участник, который должен быть крутым, http://www.emailyak.com/, но они все еще в бета-версии. Все сервисы очень доступны, имеют супер простые API-интерфейсы и, скорее всего, немедленно устранят проблему.

Если это не вариант, или если вы просто не хотите идти в этом направлении, вам нужно будет создать (или получить кого-то отправить) отчет о спаме, который покажет, почему ваши сообщения идут в их папку со спамом. Вот пример того, что я говорю о от спам-убийцы:

Content analysis details: (7.9 points, 6.0 required) 

pts rule name    description 
---- ---------------------- -------------------------------------------------- 
3.2 FH_DATE_PAST_20XX  The date is grossly in the future. 
1.1 DNS_FROM_OPENWHOIS  RBL: Envelope sender listed in bl.open-whois.org. 
0.6 SPF_SOFTFAIL   SPF: sender does not match SPF record (softfail) 
0.0 UNPARSEABLE_RELAY  Informational: message has unparseable relay lines 
1.6 HTML_IMAGE_ONLY_28  BODY: HTML: images with 2400-2800 bytes of words 
0.0 HTML_MESSAGE   BODY: HTML included in message 
0.0 BAYES_50    BODY: Bayesian spam probability is 40 to 60% 
          [score: 0.5000] 
1.5 MIME_HTML_ONLY   BODY: Message only has text/html MIME parts 

После того как вы эту информацию, вы можете диагностировать проблему. Я сомневаюсь, что это имеет какое-либо отношение к вашим записям SPF, но трудно быть позитивным, хотя они перечислены как «проход» в заголовках.

Удачи вам!

2

Как заявил Эрик, Ваш SPF формулируется Пройдена так я бы, но вплоть до заголовка мальформации в вашем PHP основной функции

Это код, у вас есть:

<?php 
$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
$headers .= "From: UzmanKirala <[email protected]>\r\n"; 

$mail_body = "This<br />is<br />a<br />test<br />mail."; 
mail('[email protected]', 'Subject', $mail_body, $headers); 
?> 

Google будет читать это и видеть, что почта искажена, поскольку нет границ. Отсутствие правильных новых строк и т. Д.

Я не собираюсь объяснять весь RFC для форматов электронной почты, а вместо этого указывать на файл, который я использую все время, и работает очень хорошо.

<?php 
class Mail { 
    protected $to; 
    protected $from; 
    protected $sender; 
    protected $subject; 
    protected $text; 
    protected $html; 
    protected $attachments = array(); 
    public $protocol = 'mail'; 
    public $hostname; 
    public $username; 
    public $password; 
    public $port = 25; 
    public $timeout = 5; 
    public $newline = "\n"; 
    public $crlf = "\r\n"; 
    public $verp = FALSE; 
    public $parameter = ''; 

    public function setTo($to) { 
     $this->to = $to; 
    } 

    public function setFrom($from) { 
     $this->from = $from; 
    } 

    public function addheader($header, $value) { 
     $this->headers[$header] = $value; 
    } 

    public function setSender($sender) { 
     $this->sender = html_entity_decode($sender, ENT_COMPAT, 'UTF-8'); 
    } 

    public function setSubject($subject) { 
     $this->subject = html_entity_decode($subject, ENT_COMPAT, 'UTF-8'); 
    } 

    public function setText($text) { 
     $this->text = $text; 
    } 

    public function setHtml($html) { 
     $this->html = $html; 
    } 

    public function addAttachment($file, $filename = '') { 
     if (!$filename) { 
      $filename = basename($file); 
     } 

     $this->attachments[] = array(
      'filename' => $filename, 
      'file'  => $file 
     ); 
    } 

    public function send() { 
     if (!$this->to) { 
      exit('Error: E-Mail to required!'); 
     } 

     if (!$this->from) { 
      exit('Error: E-Mail from required!'); 
     } 

     if (!$this->sender) { 
      exit('Error: E-Mail sender required!'); 
     } 

     if (!$this->subject) { 
      exit('Error: E-Mail subject required!'); 
     } 

     if ((!$this->text) && (!$this->html)) { 
      exit('Error: E-Mail message required!'); 
     } 

     if (is_array($this->to)) { 
      $to = implode(',', $this->to); 
     } else { 
      $to = $this->to; 
     } 

     $boundary = '----=_NextPart_' . md5(time()); 

     $header = ''; 

     if ($this->protocol != 'mail') { 
      $header .= 'To: ' . $to . $this->newline; 
      $header .= 'Subject: ' . $this->subject . $this->newline; 
     } 

     $header .= 'From: ' . $this->sender . '<' . $this->from . '>' . $this->newline; 
     //$header .= 'From: "' . $this->sender . '" <' . $this->from . '>' . $this->newline; 
     $header .= 'Reply-To: ' . $this->sender . '<' . $this->from . '>' . $this->newline; 
     $header .= 'Return-Path: ' . $this->from . $this->newline; 
     $header .= 'X-Mailer: PHP/' . phpversion() . $this->newline; 
     $header .= 'MIME-Version: 1.0' . $this->newline; 
     $header .= 'Content-Type: multipart/mixed; boundary="' . $boundary . '"' . $this->newline; 

     if (!$this->html) { 
      $message = '--' . $boundary . $this->newline; 
      $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; 
      $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; 
      $message .= $this->text . $this->newline; 
     } else { 
      $message = '--' . $boundary . $this->newline; 
      $message .= 'Content-Type: multipart/alternative; boundary="' . $boundary . '_alt"' . $this->newline . $this->newline; 
      $message .= '--' . $boundary . '_alt' . $this->newline; 
      $message .= 'Content-Type: text/plain; charset="utf-8"' . $this->newline; 
      $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline; 

      if ($this->text) { 
       $message .= $this->text . $this->newline; 
      } else { 
       $message .= 'This is a HTML email and your email client software does not support HTML email!' . $this->newline; 
      } 

      $message .= '--' . $boundary . '_alt' . $this->newline; 
      $message .= 'Content-Type: text/html; charset="utf-8"' . $this->newline; 
      $message .= 'Content-Transfer-Encoding: 8bit' . $this->newline . $this->newline; 
      $message .= $this->html . $this->newline; 
      $message .= '--' . $boundary . '_alt--' . $this->newline; 
     } 

     foreach ($this->attachments as $attachment) { 
      if (file_exists($attachment['file'])) { 
       $handle = fopen($attachment['file'], 'r'); 
       $content = fread($handle, filesize($attachment['file'])); 

       fclose($handle); 

       $message .= '--' . $boundary . $this->newline; 
       $message .= 'Content-Type: application/octetstream' . $this->newline; 
       $message .= 'Content-Transfer-Encoding: base64' . $this->newline; 
       $message .= 'Content-Disposition: attachment; filename="' . basename($attachment['filename']) . '"' . $this->newline; 
       $message .= 'Content-ID: <' . basename($attachment['filename']) . '>' . $this->newline . $this->newline; 
       $message .= chunk_split(base64_encode($content)); 
      } 
     } 

     $message .= '--' . $boundary . '--' . $this->newline; 

     if ($this->protocol == 'mail') { 
      ini_set('sendmail_from', $this->from); 

      if ($this->parameter) { 
       mail($to, $this->subject, $message, $header, $this->parameter); 
      } else { 
       mail($to, $this->subject, $message, $header); 
      } 

     } elseif ($this->protocol == 'smtp') { 
      $handle = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout); 

      if (!$handle) { 
       error_log('Error: ' . $errstr . ' (' . $errno . ')'); 
      } else { 
       if (substr(PHP_OS, 0, 3) != 'WIN') { 
        socket_set_timeout($handle, $this->timeout, 0); 
       } 

       while ($line = fgets($handle, 515)) { 
        if (substr($line, 3, 1) == ' ') { 
         break; 
        } 
       } 

       if (substr($this->hostname, 0, 3) == 'tls') { 
        fputs($handle, 'STARTTLS' . $this->crlf); 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if (substr($reply, 0, 3) != 220) { 
         error_log('Error: STARTTLS not accepted from server!'); 
        } 
       } 

       if (!empty($this->username) && !empty($this->password)) { 
        fputs($handle, 'EHLO ' . getenv('SERVER_NAME') . $this->crlf); 

        $reply = ''; 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if (substr($reply, 0, 3) != 250) { 
         error_log('Error: EHLO not accepted from server!'); 
        } 

        fputs($handle, 'AUTH LOGIN' . $this->crlf); 

        $reply = ''; 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if (substr($reply, 0, 3) != 334) { 
         error_log('Error: AUTH LOGIN not accepted from server!'); 
        } 

        fputs($handle, base64_encode($this->username) . $this->crlf); 

        $reply = ''; 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if (substr($reply, 0, 3) != 334) { 
         error_log('Error: Username not accepted from server!'); 
        } 

        fputs($handle, base64_encode($this->password) . $this->crlf); 

        $reply = ''; 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if (substr($reply, 0, 3) != 235) { 
         error_log('Error: Password not accepted from server!'); 
        } 
       } else { 
        fputs($handle, 'HELO ' . getenv('SERVER_NAME') . $this->crlf); 

        $reply = ''; 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if (substr($reply, 0, 3) != 250) { 
         error_log('Error: HELO not accepted from server!'); 
        } 
       } 

       if ($this->verp) { 
        fputs($handle, 'MAIL FROM: <' . $this->from . '>XVERP' . $this->crlf); 
       } else { 
        fputs($handle, 'MAIL FROM: <' . $this->from . '>' . $this->crlf); 
       } 

       $reply = ''; 

       while ($line = fgets($handle, 515)) { 
        $reply .= $line; 

        if (substr($line, 3, 1) == ' ') { 
         break; 
        } 
       } 

       if (substr($reply, 0, 3) != 250) { 
        error_log('Error: MAIL FROM not accepted from server!'); 
       } 

       if (!is_array($this->to)) { 
        fputs($handle, 'RCPT TO: <' . $this->to . '>' . $this->crlf); 

        $reply = ''; 

        while ($line = fgets($handle, 515)) { 
         $reply .= $line; 

         if (substr($line, 3, 1) == ' ') { 
          break; 
         } 
        } 

        if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { 
         error_log('Error: RCPT TO not accepted from server!'); 
        } 
       } else { 
        foreach ($this->to as $recipient) { 
         fputs($handle, 'RCPT TO: <' . $recipient . '>' . $this->crlf); 

         $reply = ''; 

         while ($line = fgets($handle, 515)) { 
          $reply .= $line; 

          if (substr($line, 3, 1) == ' ') { 
           break; 
          } 
         } 

         if ((substr($reply, 0, 3) != 250) && (substr($reply, 0, 3) != 251)) { 
          error_log('Error: RCPT TO not accepted from server!'); 
         } 
        } 
       } 

       fputs($handle, 'DATA' . $this->crlf); 

       $reply = ''; 

       while ($line = fgets($handle, 515)) { 
        $reply .= $line; 

        if (substr($line, 3, 1) == ' ') { 
         break; 
        } 
       } 

       if (substr($reply, 0, 3) != 354) { 
        error_log('Error: DATA not accepted from server!'); 
       } 

       fputs($handle, $header . $message . $this->crlf); 
       fputs($handle, '.' . $this->crlf); 

       $reply = ''; 

       while ($line = fgets($handle, 515)) { 
        $reply .= $line; 

        if (substr($line, 3, 1) == ' ') { 
         break; 
        } 
       } 

       if (substr($reply, 0, 3) != 250) { 
        error_log('Error: DATA not accepted from server!'); 
       } 

       fputs($handle, 'QUIT' . $this->crlf); 

       $reply = ''; 

       while ($line = fgets($handle, 515)) { 
        $reply .= $line; 

        if (substr($line, 3, 1) == ' ') { 
         break; 
        } 
       } 

       if (substr($reply, 0, 3) != 221) { 
        error_log('Error: QUIT not accepted from server!'); 
       } 

       fclose($handle); 
      } 
     } 
    } 
} 
?> 

Прочитайте файл класса и unserstand, как использовать его в полной мере, но на текущий момент ЭРВО стартера, например:

$mail = new Mail(); 

$mail->setTo("[email protected]"); 
$mail->setFrom("[email protected]"); 
$mail->setSender("Bilgi"); 
$mail->setSubject("Test mail"); 
$mail->setHtml("<b>Some html email</b>"); 

$mail->send(); 
+0

Я пытался, но ничего не изменилось, почта отправилась в папку со спамом, но когда я пытаюсь использовать тот же код на другом сервере, он работал. Я думаю, проблема в моем сервере, но что? спасибо – mTuran

+0

ваш IP-адрес, должен быть включен в черный список, или домен * из * электронной почты может быть внесен в черный список, скорее всего, это IP-адрес – RobertPitt

+0

. Это, безусловно, решило мою проблему, у меня также был SPF-пропуск, но он получал спам-консервы. Спасибо! – Simon

0

ли вы сделать DNS настройки для отправки почты от вас сайта. Не делая этого, ваш почтовый получатель не будет идентифицировать вас, тем самым отправляя почту на спам. Поговорите со своей поддержкой хостинга, они помогут вам выполнить такие настройки DNS.

Смежные вопросы