四月 12 2005

phpbb會員數過多寄信問題

by at 18:04:12 分類: PHP

User View:115 user views Bot View:192 bot views

分享到Facebook

如果討論區會員數過多可能超過幾千或幾萬人以上

不管使用SMTP或者sendmail寄信都有可能會因為發信主機限制一次發信人數的限制而無法發信給會員

查看一下admin/admin_mass_email.php這個檔案在122行

for ($i = 0; $i < count($bcc_list); $i++)
{
$emailer->bcc($bcc_list[$i]);
}

它是將所有會員資料都加入bbc密件副本裡一次傳送

那可能會遇到上述所說的主機可能會有限制發信人數而無法發送

將發信筆數從全部會員改成特定數量發信

當到達所設定的發信數量時或者到達名單最後一未會員時發信

這樣應該能達到各發信主機所要求的設定值

打開admin/admin_mass_email.php 在122行

———–找尋———–

for ($i = 0; $i < count($bcc_list); $i++)
{
$emailer->bcc($bcc_list[$i]);
} 

$email_headers = 'X-AntiAbuse: Board servername - ' . $board_config['server_name'] . "\n";
$email_headers .= 'X-AntiAbuse: User_id - ' . $userdata['user_id'] . "\n";
$email_headers .= 'X-AntiAbuse: Username - ' . $userdata['username'] . "\n";
$email_headers .= 'X-AntiAbuse: User IP - ' . decode_ip($user_ip) . "\n";

$emailer->use_template('admin_send_email');
$emailer->email_address($board_config['board_email']);
$emailer->set_subject($subject);
$emailer->extra_headers($email_headers);

$emailer->assign_vars(array(
'SITENAME' => $board_config['sitename'],
'BOARD_EMAIL' => $board_config['board_email'],
'MESSAGE' => $message)
);
$emailer->send();
$emailer->reset();

———–取代成下面———–

$I_Send = 1;
$Z_Send = 250;//每次寄信的數量
$A_Send = count($bcc_list);//寄信總量 

for ($i = 0; $i < count($bcc_list); $i++)
{
$Y_Send = $I_Send % $Z_Send;//判斷是否到達寄信數量
$emailer->bcc($bcc_list[$i]);
if ($Y_Send == 0 || $I_Send == $A_Send){//判斷是否到達寄信數量或者到達最後一位使用者

$email_headers = 'X-AntiAbuse: Board servername - ' . $board_config['server_name'] . "\n";
$email_headers .= 'X-AntiAbuse: User_id - ' . $userdata['user_id'] . "\n";
$email_headers .= 'X-AntiAbuse: Username - ' . $userdata['username'] . "\n";
$email_headers .= 'X-AntiAbuse: User IP - ' . decode_ip($user_ip) . "\n";

$emailer->use_template('admin_send_email');
$emailer->email_address($board_config['board_email']);
$emailer->set_subject($subject);
$emailer->extra_headers($email_headers);

$emailer->assign_vars(array(
'SITENAME' => $board_config['sitename'],
'BOARD_EMAIL' => $board_config['board_email'],
'MESSAGE' => $message)
);
$emailer->send();
$emailer->reset();

}
$I_Send = $I_Send+1;
}

再修改只寄帳號有啟用的人其他沒啟用的不發信

打開admin/admin_mass_email.php 大概在74行
———–找尋———–

$sql = ( $group_id != -1 ) ? "SELECT u.user_email FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug WHERE ug.group_id = $group_id AND ug.user_pending <> " . TRUE . " AND u.user_id = ug.user_id" : "SELECT user_email FROM " . USERS_TABLE;

———–取代成下面———–

$sql = ( $group_id != -1 ) ? "SELECT u.user_email FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug WHERE ug.group_id = $group_id AND ug.user_pending <> " . TRUE . " AND u.user_id = ug.user_id AND u.user_active = 1" : "SELECT user_email FROM " . USERS_TABLE . " WHERE user_active = 1";

這樣應該能解決phpbb會員過多而被SMTP拒絕發信的問題

目前沒有回應

給個回應吧

(若看不到驗證碼,請重新整理網頁。)