Список рассылки из практики sql - PullRequest
0 голосов
/ 13 августа 2011

Я использовал следующее, чтобы получать и посылать по электронной почте людям в моей базе данных. Проблема состоит в том, что в базе данных более 500 участников, сценарий замедляется и показывает адрес электронной почты каждого участника в поле TO :. Я попробовал на другом сайте предложить использовать BCC, но мне было интересно, разве нет способа изменить это, чтобы отправлять электронные письма индивидуально?

$sql = "SELECT * FROM users WHERE system = '101' AND mailing_list = 'yes'";
$result = mysql_query($sql) or die("Unable to execute<br />$sql<br />".mysql_error());
$row = mysql_fetch_array($result);
var_dump($row);
$to .= $row['email'] . "\r\n";
//send email

Ответы [ 2 ]

1 голос
/ 13 августа 2011

php mail () очень неэффективен, я предлагаю использовать что-то вроде phpmailer

из руководства:

Примечание:

Стоит отметить, что функция mail () не подходит для больших объемов электронной почты в цикле.Эта функция открывает и закрывает сокет SMTP для каждого сообщения электронной почты, что не очень эффективно.

Сведения об отправке большого количества сообщений электронной почты см. В пакетах »PEAR :: Mail и» PEAR :: Mail_Queue.

0 голосов
/ 13 августа 2011

Вам нужно использовать PHPMailer, так как он предназначен именно для этой ситуации. проблема с mail () заключается в том, что он открывает и закрывает соединение после каждого письма. Вы, очевидно, хотите открыть 1 соединение, отправить все свои электронные письма (по одному) и закрыть соединение.

Что-то вроде ниже :

require("class.phpmailer.php");

$mail = new phpmailer();

$mail->From     = "list@example.com";
$mail->FromName = "List manager";
$mail->Host     = "smtp1.example.com;smtp2.example.com";
$mail->Mailer   = "smtp";

@MYSQL_CONNECT("localhost","root","password");
@mysql_select_db("my_company");
$query  = "SELECT full_name, email, photo FROM employee WHERE id=$id";
$result = @MYSQL_QUERY($query);

while ($row = mysql_fetch_array ($result))
{
    // HTML body
    $body  = "Hello <font size=\"4\">" . $row["full_name"] . "</font>, <p>";
    $body .= "<i>Your</i> personal photograph to this message.<p>";
    $body .= "Sincerely, <br>";
    $body .= "phpmailer List manager";

    // Plain text body (for mail clients that cannot read HTML)
    $text_body  = "Hello " . $row["full_name"] . ", \n\n";
    $text_body .= "Your personal photograph to this message.\n\n";
    $text_body .= "Sincerely, \n";
    $text_body .= "phpmailer List manager";

    $mail->Body    = $body;
    $mail->AltBody = $text_body;
    $mail->AddAddress($row["email"], $row["full_name"]);
    $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");

    if(!$mail->Send())
        echo "There has been a mail error sending to " . $row["email"] . "<br>";

    // Clear all addresses and attachments for next loop
    $mail->ClearAddresses();
    $mail->ClearAttachments();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...