我在StackOverflow上已经阅读了很多关于这个问题的问题和答案,但我读过的都没有特别回答我的问题。
我不想有邮件列表。如果用户希望收到批量电子邮件,则会勾选一个框。没有错误的电子邮件,因为帐户是使用电子邮件激活的。所以没有反弹检查。但是,我已经使用了PHPMailer(因此没有标题等问题)并将每个地址添加到电子邮件的“to”字段中。这意味着每个人都可以查看所有电子邮件(通过阅读电子邮件来源或点击其电子邮件客户端中的“回复所有”),这是其他用户不可取的。问题是:
1)我应该单独发送每封电子邮件,还是将所有地址都放在“密件抄送”字段中? 2)这不会使一些邮件服务器将电子邮件标记为“垃圾邮件”,无论它的结构如何良好?如果是这样,有没有办法进一步防止这种情况(除了将地址添加到某些白名单或设置域密钥或Unix cron作业)?
谢谢!
此处提到的所有内容都要求用户使用表单“订阅”,然后确认他们的电子邮件地址(如PHPList中)。但是,当人们注册时我已经要求确认,所以一次又一次地询问他们是没有意义的。我现有的代码检查数据库;如果他们的“receive-movie-mail”位设置为1(这些是使用sql查询收集的),则在将新电影添加到数据库时会向他们发送电子邮件。所以,如果你仍然相信这是一个邮件列表(我认为它的类型,但也许我的定义违反现有的软件功能),我希望它有,1)某种方式订阅用户到列表中PHP代码(EG,如果“我希望每次上传电影到数据库时都收到一封电子邮件”复选框被选中,在我的表格处理代码中我会订阅它们),以及2)用PHP邮寄人的方式( IE是一个类似send_mail_to_list($ content)的函数,当提交“添加电影”表单时,它会将电子邮件发送给我订阅的人。有没有这样的邮件列表管理软件?
答案 0 :(得分:3)
您应该遍历电子邮件列表并为每个地址发送单独的电子邮件:
$mail = new PHPMailer();
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "mail.{domain_name}.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "{username}"; // SMTP username
$mail->Password = "{password}"; // SMTP password
$emailFrom = '{email_address}';
$mail->From = $emailFrom;
$mail->IsHTML(true); // set email format to HTML if needed
$emailSubject = '{your subject}';
$emailBody = "Whatever content you are sending.";
$mail->Subject = $emailSubject;
$mail->Body = $emailBody;
foreach($emails => $email) {
$emailTo = $email['email'];
$emailToName = $email['name'];
// send an email to customer
$mail->AddAddress($emailTo, $emailToName);
if(!$mail->Send())
{
echo 'failed';
}
$mail->ClearAddresses();
}
答案 1 :(得分:1)
1)我应该单独发送每封电子邮件,还是将所有地址放入 'bcc'字段?
绝对是个人的。密件抄送将您的电子邮件视为垃圾邮件。
2)这不会使一些邮件服务器将电子邮件标记为“垃圾邮件”,不 这是多么好的结构?如果是这样,有没有办法进一步发展 防止这种情况(除了将地址添加到某些白名单或 设置域密钥或Unix cron作业)?
使用SPF记录可能有所帮助。确保服务器的反向dns未列入黑名单,特别是如果它是共享主机。
答案 2 :(得分:0)
我还没有在php中这样做,因为我知道默认情况下php中没有超线程。
在Ruby或.NET等其他语言/框架中,您可以通过超级/多线程将各个电子邮件一起发送出去。这类似于你所知道的* nix cron jobs方法,除了它在运行时执行 - 你为你发送的每5个地址创建一个线程,然后所有线程一个接一个地发送5个邮件。
请记住,即使采用这种方法,瓶颈也会从应用程序转移到您正在使用的邮件服务器。因此,假设您正在使用随附apache的内置postgre - 它将无法处理大量卷,因为每个线程都会为其添加负载。
当然,如果你可以使用MailChimp !!你应该一起避免这一切。
答案 3 :(得分:0)
向每个用户发送一封单独的电子邮件,仅发送给他们。
设置DKIM和SPF,或者至少创建适当的SPF记录。 DKIM需要对实际为您发送邮件的邮件服务器进行一些配置,但可以极大地提高可传递性,尤其是对于大型电子邮件提供商。
答案 4 :(得分:0)
我的旁边的其他提示是:维护一个电子邮件队列,您可以限制投放率。当您尝试一次向其域中发送数千封电子邮件时,某些电子邮件提供商不喜欢。
这应该可以通过一些MTA来实现..但我还没有看到一个足够灵活的方法来做到这一点。我用的是Pear class Mail_Queue + cron job。