从其他服务器发送大量电子邮件

时间:2014-03-23 09:52:00

标签: php phpmailer remote-server spam-prevention massmail

我有两台服务器,ServerA& ServerB.ServerA不支持群发邮件,而ServerB支持(我在MySQL表中有超过4000个电子邮件地址)。

在ServerA上我正在为电子邮件创建HTML而在ServerB上我把脚本发送到电子邮件。我在ServerA上运行此代码

ob_end_clean();
header("Connection: close");
ignore_user_abort(); // optional
ob_start();
echo ('Sending email...');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();     // Will not work
flush();            // Unless both are called !
$postdata = http_build_query(
array(
    'subject'=>'Latest Rentals Properties',
    'message' => $message   //email body html
     )
);
$opts = array('http' =>
array(
    'method'  => 'POST',
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => $postdata
     )
  );
$context  = stream_context_create($opts);
$result = @file_get_contents('http://ServerB.com/send_email.php', false, $context);
if($http_response_header[0]=="HTTP/1.1 404 Not Found"):echo "404";
elseif($http_response_header[0]=="HTTP/1.1 200 OK"):echo "OK";
else "ERROR";

在ServerB.com上,send_email.php有此代码发送电子邮件(我使用的是class.phpmailer.php)

$subject = $_REQUEST['subject'];
$message1 = $_REQUEST['message'];
$mail->SetFrom("from@ServerB.com", '');
$rs = $oBj->query("SELECT email FROM `crm_test_emails` where is_active = 1 ");
while ( $rw = $oBj->row($rs) ){
$email= $rw['email'];
$message1         = str_replace("########",$email,$message1);
$mail->AddAddress($email, "");
$mail->Subject    = $subject;
$mail->MsgHTML($message1);
$mail->Send();
}

我的问题是

  1. 一封电子邮件地址收到超过500封相同的电子邮件(发送重复的邮件)。
  2. 电子邮件直接发送垃圾邮件。
  3. 我不希望任何人看到其他人的电子邮件。现在一个电子邮件ID可以看到我发送电子邮件的所有其他人。
  4. 我问了优先问题,第一个更重要,等等...... 请指导我在代码逻辑中遇到问题。

3 个答案:

答案 0 :(得分:0)

我建议使用http://www.mailgun.com/之类的服务。大量发送电子邮件需要花费大量精力才能做到正确(请参阅How to send 100,000 emails weekly?)。

Mailgun每月免费提供10,000封电子邮件,因此如果您每月发送一次或两次这些电子邮件,此服务将是免费的。如果你每周都发送一次,那么它们的价格真的很便宜。

答案 1 :(得分:0)

检查Subscribe - 开源项目 - 一种帮助您使用GAE设置邮件发件人应用程序的服务。

易于安装。

为什么订阅?

  • 处理多个应用程序。只需添加应用程序的特定私钥即可。它将处理所有取消订阅应用程序。
  • 根据您的邮件类型处理多个发件人。在您的appengine应用程序中添加所有发件人的电子邮件地址。
  • 向客户/用户发送电子邮件时无需处理取消订阅。服务已经在处理它。附加取消订阅链接以及给定的正文。

答案 2 :(得分:-1)

问题一

我正在检查您的代码

问题2的

您需要确保您的电子邮件签名服务器具有与发送电子邮件地址相同的域名,这是一个很长的主题,一些细节在这里

http://sendgrid.com/blog/10-tips-to-keep-email-out-of-the-spam-folder/

问题3的

请将所有地址添加到BCC收件人不是主要地址发送电子邮件为盲目复制