【问题标题】:Sending mass emails using PHP script, MySQL database使用 PHP 脚本、MySQL 数据库发送大量电子邮件
【发布时间】:2015-07-18 20:21:53
【问题描述】:

我想使用 PHP 邮件功能发送大量电子邮件。电子邮件地址存储在 MySQL 数据库中。有近 30,000 个电子邮件地址。我一次发送一封电子邮件。

60 封电子邮件已正确发送,接下来的所有电子邮件都将被跳过。我正在使用 godaddy 主机发送电子邮件。以下是我正在使用的代码

<?php 

$con1=mysqli_connect("subscibe","subscibe","pw","subscibe");

$subject = $_POST['subject'];        
$message = $_POST['message'];

$getusers = mysql_query("SELECT * FROM subscibe.emaillist");
$email_from = "email@gmail.com";
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();

while($result = mysql_fetch_array($getusers)) {

$emailaddress = $result['Emailaddresses'];

mail($emailaddress,$subject,$message,$headers);

//Add email address to temp table
$sqlq="INSERT INTO subscibe.temp VALUES ('$emailaddress')";

if (!mysqli_query($con1,$sqlq)) {
die('Error: ' . mysqli_error($con1));
}
}

echo "Emails are sent"

?>

【问题讨论】:

  • 专用服务器还是共享服务器?也有专用 IP 吗?
  • godaddy 将您限制在可以发送的数量,如果您想发送那么多电子邮件,您将需要使用商业电子邮件服务器,例如 mailchimp(如果它是新闻通讯类型),或者 mandrill(如果它是交易电子邮件) .
  • 另外,如果您想发送 30k 封电子邮件,我建议您为此使用专门的服务...自己管理此问题的坏主意,您将在第一次发送时被视为垃圾邮件发送者。跨度>
  • 我也会推荐 mailchimp。

标签: php mysql email


【解决方案1】:
<?php 
$con = mysql_connect("localhost","dbuser","dbpass"); // replace dbuser, dbpass with your db user and password
mysql_select_db("dbname", $con); // replace dbname with your database name
/*
To use this script database table must have three fields named sno, email and sub_status
*/
$query = "select sno, email from dbtable where sub_status = 'SUBSCRIBED'";
$result = mysql_query($query, $con);
$emails = array();
$sno = array();
while($row=mysql_fetch_assoc($result))
{
    $sno[] = $row['sno']; // this will be used to unsubscribe the user
    $emails[]=$row['email']; // email id of user
}
/* you can also get email id data from CSV using below code */
//$file =  file_get_contents("travel_database.csv"); 
//$emails = explode(",",$file);
/* count.txt is used to store current email sent number/count */
$count =  file_get_contents("count.txt");
for($i=$count;$i<count($emails);$i++)
{
    $to  = $emails[$i];
    // subject
    $subject = 'Set Your Title Here';
    // message
    $message = file_get_contents("sample.html"); // this will get the HTML sample template sample.html
    $message .= '<p><a href="http://yourdomain.com/path-to-folder/unsubscribe.php?id='.$sno[$i].'&username='.$emails[$i].'">Please click here to unsubscribe.</a></p>
    </body>
    </html>';
    // To send HTML mail, the Content-type header must be set
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    // Additional headers
    //$headers .= "To: $to" . "\r\n";
    $headers .= 'From: Name <info@yourdomain.com>' . "\r\n";
    //$headers .= 'Cc: sendcc@yourdomain.com' . "\r\n";
    //$headers .= 'Bcc: sendbcc@yourdomain.com' . "\r\n";
    // Mail it
    if(mail($to, $subject, $message, $headers)) {
        $file = fopen("mailsentlist.txt","a+"); // add email id to mailsentlist.txt to track the email sent
        fwrite($file, $to.",\r\n");
        fclose($file);
    }
    else
    {
        $file = fopen("notmailsentlist.txt","a+"); // add email to notmailsentlist.txt here which have sending email error
        fwrite($file, $to.",\r\n");
        fclose($file);
    }
    if(($i-$count)>=200) // this will send 200 mails from database per execution
    {   
        $filec = fopen("count.txt",'w'); // store current count to count.txt
        fwrite($filec, $i);
        fclose($filec);
        break;
    }
}//for end
$filec = fopen("count.txt",'w'); // store fine count to count.txt this will be used as a start point of next execution
fwrite($filec, $i);
fclose($filec);
?>

【讨论】:

    【解决方案2】:

    您可能希望使用 foreach 循环将电子邮件发送到数据库中的每条记录。 比如:

    $getusers = mysql_query("SELECT * FROM subscibe.emaillist");
    foreach ($getusers as $maillist) {
    $mail->to($mailist['email_address']);
    $mail->send()
    

    【讨论】:

    • OP已经在使用循环发送邮件,这里的问题是邮件在60封邮件后停止发送。
    猜你喜欢
    • 2011-09-16
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2014-02-22
    • 2011-04-28
    • 2015-08-07
    • 2011-02-04
    相关资源
    最近更新 更多