[英]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.