我想在圣诞节前夕从WordPress网站发送总共1650封邮件。
这是我目前的代码:
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=" . get_bloginfo('charset') . "" . "\r\n";
$customers = get_users($args);
$cus_arr = array();
foreach($customers as $customer){
array_push($cus_arr,$customer->data->user_email);
}
wp_mail($cus_arr, $subject, $message, $headers);
/*another way*/
...
foreach($customers as $customer){
wp_mail($customer->data->user_email, $subject, $message, $headers);
}
问题1:上述方式是否是向这一数量的客户发送邮件的好选择?可能有任何问题吗?有没有更好的方法呢?
此外,我不希望客户看到对方邮件。这是我目前的代码:
wp_mail(array("BCC: xyz@xyz.com","BCC: abc@abc.com"), $subject, $message, $headers);
但它不起作用。没有BCC:
邮件实际上已发送。
问题2.如何阻止用户查看其他邮件ID?
答案 0 :(得分:1)
问题1:使用速率限制(限制)的良好做法,例如最多100封邮件/ 10分钟。您可以通过将收件人存储在数据库中,并使用cronjob每10分钟发送一次邮件来完成此操作。另一种选择是使用第三方邮件服务,例如Mandrill或Sendgrid,他们将为您处理限制。
问题2:您当前的代码会为每个收件人调用wp_mail,因此他们永远不会看到其他邮件地址(不需要BCC标头)。但是,如果您决定使用wp_mail在1次呼叫中发送给多个收件人,则需要使用密件抄送标头,例如:
wp_mail('', $subject, $message, array("BCC: xyz@xyz.com","BCC: abc@abc.com"));
答案 1 :(得分:1)
嘿,我认为你的代码是个坏主意,原因如下:
wp_mail
不是发送大量电子邮件的好方法我建议使用库来发送批量电子邮件。现有的WordPress插件就是为了这个目的,但你可以自己轻松完成 - 这是我的经典,经过良好测试的PHPMailerLibrary(https://github.com/PHPMailer/PHPMailer)的解决方案:
在你的functions.php中:
require("libs/phpmailer/PHPMailerAutoload.php");
/**
@param $from: The senders E-Mail
@param $from_name: The senders Name
@param $subject: The E-Mail subject
@param $mesesage: The E-Mail content HTML
@param $to: An array of receivers
*/
function my_custom_send_mass_mail($from,$from_name,$subject,$message,$to) {
// first use PHPMailer to send all the emails
$email = new PHPMailer();
$email->isSMTP();
$email->CharSet = 'utf-8';
$email->From = $from;
$email->FromName = $from_name;
$email->Subject = $subject;
$email->Body = $message;
$email->IsHTML();
if(is_array($to)) {
foreach($to as $t) {
$email->addBCC($t);
}
}
$ac = time();
update_option('mailsent-'.$ac,$email);
$success = $email->send();
if($success) {
update_option('mailsent-suc-'.$ac,"yes");
return "Bulk E-Mail successfully sent.";
}
update_option('mailsent-suc-'.$ac,$email->ErrorInfo);
return "Bulk E-Mail Error: Please contact admin.";
}
只需调用此函数并确保$ to是接收方电子邮件数组。
这是我每周发送10000封电子邮件通讯的客户使用的解决方案,目前效果很好。