![](/img/trans.png)
[英]What would cause PHPMailer's $mail->send() to return false?
[英]What's the best way to send a newsletter with PHPMailer?
我正在嘗試通過PHPMailer發送時事通訊,同時保護客戶的隱私。
首先,我使用mail->addAddress('customerEmail']);
設置接收器配置mail->addAddress('customerEmail']);
但是我發現以這種方式發送郵件時,每個接收者都可以看到其他客戶的訂戶的電子郵件地址。 我將addAddress
更改為mail->addBCC('customerEmail']);
這樣它就不會顯示每個電子郵件地址(實際上,現在甚至都沒有顯示要發送給其的客戶的收件人電子郵件地址),但是如果有人想回復該電子郵件,就可以采用這種方式,他們的回復也將發送給其他訂閱者...
面對這個問題的最佳選擇是什么?
電子郵件服務器不使用郵件頭發送郵件。 當您發送電子郵件時,您的電子郵件客戶端會保持對話*,如下所示:
EHLO example.com
MAIL FROM: mail@example.com
RCPT TO: info@example.net, customers@example.org, john@example.com
DATA
From: Me <webmaster@example.com>
To: Customers <whatever@example.com>
Subject: Important info
Dear Blah,
Blah blah.
Regards,
.
(*)這是一次對話,因為它包括服務器對每個命令的響應,但是我省略了該部分。
真正重要的是DATA
塊之前的特定命令中提供的信息。 當然,大多數郵件工具都會創建標頭以匹配處理指令中的地址,但是此類標頭僅用於提供信息,它們不必完全相同。 實際上,密件抄送實際上就是這樣工作的:您指示郵件發件人將電子郵件發送到該地址,但在標頭中將其省略。
所以:
如果您征求我的意見,總是很高興知道將新聞通訊發送到的確切電子郵件地址-我們中的許多人都有多個地址。 如果您要提供自動退訂鏈接,則實際上必須發送自定義消息。
據我所知,管理新聞通訊的最佳方法是將電子郵件分別發送給每個客戶,盡管這意味着發送時間會略有增加。 這樣,您可以提供自動取消訂閱鏈接和其他您無法提供的功能。
為了實現這一點,我做了一個簡單的循環,從我的數據庫中獲取地址:
$sql = "SELECT `email` FROM `emails`";
$statement = $db->prepare($sql);
$statement->execute();
while ($fila = $statement->fetch()) {
if(!empty($fila['email'])){
$mail->addAddress($fila['email']);
$success = $mail->Send();
$mail->clearAllRecipients(); //Don't forget this!
}
}
方法clearAllRecipients();
這是非常重要的,因為它將清除最后一圈收件人,以便電子郵件的“收件人”部分不會顯示您的所有通訊收件人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.