簡體   English   中英

當使用Amazon SES通過PHP發送郵件時,收件人不會收到所有郵件

[英]Not all mails being received by recipients when sent via PHP using Amazon SES

我編寫了簡單的PHP(codeigniter)腳本以使用Amazon SES發送新聞稿。 我在MySQL表和腳本中有大約8000封電子郵件,它提取所有行(電子郵件地址),將其拆分成較小的包(由於SES限制),然后通過SMTP發送電子郵件。 我正在使用sleep()*和每分鍾運行一次的cronjob。 我知道這不是最好的解決方案,但從概念上講,它可以正常工作。

要允許與發送郵件bcc ,我必須確保有在最后一個收件人to外地或亞馬遜SES將不會發送它。 因此,我的地址( news@baulink.rs )始終在其中to而其他地址在bcc 每次迭代都會在bcc放入8個不同的地址(BTW,是否有更好的解決方案?)。 我還有一個簡單的日志文件,其中記錄了我的應用程序操作的每個地址。

如我所見,有些收件人沒有收到新聞通訊。 Amazon SES返回退回的電子郵件,效果很好,但有些地址根本無法接收,並且Amazon SES沒有任何反饋。 這些地址在我的日志中,這意味着它們由PHP腳本處理。 然后,我只是刪除該地址,然后再次插入MySQL表中-它起作用了! 一些電子郵件是從CSV文件解析的,其中一些是手動插入的。 我真的不知道,也無法與所有收件人核實他們是否收到時事通訊。 您知道什么可能導致這種奇怪的行為嗎?

我不知道是什么問題。

我正在使用CodeIgniter和PHPMailer。

 public function cronSendMail(){
    $newsletter = $this->baumodel->getNewsletter();

    if(is_array($newsletter)){
        echo "No job for me!";    
        return;
    }elseif(is_object($newsletter)){ //means there is a newsletter ready for sending                        
        $limit = 104;
        $newsOfset = $newsletter->news_slanje_ofset;                        
        $noviOfset = $newsOfset+$limit;

        $adrese = $this->baumodel->getAdresar($limit, $newsOfset); 
        $brojAdresa = count($this->baumodel->getSveAdrese()); //number of recipients in whole MySQL table

        if($brojAdresa < $newsOfset){ 
            echo "Adrese: ".$brojAdresa;
            echo " Ofset: " .$newsOfset;
            die('Job is finished! ');
        }

        $this->baumodel->setNewsletterOfset($newsletter->news_id, $noviOfset);                      
        $emailArray = array();

        foreach($adrese as $adr){
            array_push($emailArray, trim($adr['adr_email']));
        }

        $newsletterContent = $newsletter->news_sadrzaj;                                                                                     
        $this->load->library('email');
        $this->email->clear();                

        $maliNiz = array();
        for($i=0; $i<13; $i++){
            //13 times with 2 seconds sleep is ~30-35 seconds of execution time.
            //CronJob runs every minute
            $j=0;
            $maliNiz[$j] = array_pop($emailArray);
            $j++;
            $maliNiz[$j] = array_pop($emailArray);
            $j++;
            $maliNiz[$j] = array_pop($emailArray);
            $j++;
            $maliNiz[$j] = array_pop($emailArray);
            $j++;                           
            $maliNiz[$j] = array_pop($emailArray);
            $j++;
            $maliNiz[$j] = array_pop($emailArray);
            $j++;
            $maliNiz[$j] = array_pop($emailArray);
            $j++;
            $maliNiz[$j] = array_pop($emailArray);
            $j++;                           

            $this->email->to('news@baulink.rs');
            $this->email->bcc($maliNiz); //This is my BCC array of 8 addresses
            $this->email->from('office@baulink.rs', 'Baulink Portal');
            $this->email->subject('Gradjevinski portal Baulink - Novo na portalu');
            $this->email->message($newsletterContent);
            $this->email->send();
            //echo $this->email->print_debugger();

            sleep(2);               

            //log file start
            $filepath = APPPATH . 'logs/mail-log-' . date('Y-m-d') . '.php';
            $handle = fopen($filepath, "a+");                                                       
            $currentDateTime = date('d.M.Y H:i:s');
            foreach($maliNiz as $emailAdresa){
                    $infoLog = $emailAdresa . " // ".$currentDateTime . " \n";
                    fwrite($handle, $infoLog);
            }
            fclose($handle);
            //log file end
        }
    }
}

根據亞馬遜文檔,這可能是問題所在。

重要信息當您向多個收件人(收件人為“收件人”,“ CC”和“ BCC”地址)發送電子郵件且對Amazon SES的呼叫失敗時,整個電子郵件將被拒絕,並且任何收件人都不會收到預期的電子郵件。 因此,我們建議您一次發送一封電子郵件給一個收件人。

http://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-email.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM