1 頁 (共 1 頁)

[建議] [問題] 會員數過多寄信問題

發表於 : 2005-05-02 14:30
C.K.
請教個問題

如果討論區會員數過多可能超過幾千或幾萬人像貴站就有3萬多人\r

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

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

代碼: 選擇全部

		for ($i = 0; $i < count($bcc_list); $i++)
		{
			$emailer->bcc($bcc_list[$i]);
		}
它是將所有會員資料都加入bbc密件副本裡一次傳送

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

本人有下面小小建議僅供討論區會員人數過多無法發信的問題

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

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

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


打開admin/admin_mass_email.php 在122行

-----------找尋-----------

代碼: 選擇全部

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

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

		$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'] . "
";
				$email_headers .= 'X-AntiAbuse: User_id - ' . $userdata['user_id'] . "
";
				$email_headers .= 'X-AntiAbuse: Username - ' . $userdata['username'] . "
";
				$email_headers .= 'X-AntiAbuse: User IP - ' . decode_ip($user_ip) . "
";
				
				$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;
		}

發表於 : 2005-05-10 18:45
C.K.
都沒人有這樣的問題嗎??

發表於 : 2005-05-10 18:55
小竹子
有.........所以我放棄發信 XD

發表於 : 2005-05-10 23:29
tony2000
太好了,我正好为这个问题头痛呢!

發表於 : 2005-05-11 18:16
C.K.
那如果改成上面語法是否可以成功呢\r

因為本人的phpbb差不多有5千多人\r

假如照上面改法應該是每250人就會寄一次\r

目前還都ok

只是可能還要修改一下email名單\r

可能改成有啟用的會員才呼叫出來

這樣才不會有一推退信\r

如果是超過萬人以後甚至幾十萬\r

各位有改的人可以說說看是否可行或者效果

發表於 : 2005-05-11 21:56
小竹子
要改的話要大改,因為要先改發信前先偵測帳號是否存活,免的直接退信收到爆。
C.K. 寫:那如果改成上面語法是否可以成功呢\r

因為本人的phpbb差不多有5千多人\r

假如照上面改法應該是每250人就會寄一次\r

目前還都ok

只是可能還要修改一下email名單\r

可能改成有啟用的會員才呼叫出來

這樣才不會有一推退信\r

如果是超過萬人以後甚至幾十萬\r

各位有改的人可以說說看是否可行或者效果

發表於 : 2005-05-11 23:33
Mowd
這真是太棒啦~C.K.可以考慮發表到非官方外掛區~
上面提到的問題應該可以搭配快速砍人外掛使用,發信前先砍掉未啟用的人的帳號。

發表於 : 2005-05-12 14:11
C.K.
Mowd 寫:這真是太棒啦~C.K.可以考慮發表到非官方外掛區~
上面提到的問題應該可以搭配快速砍人外掛使用,發信前先砍掉未啟用的人的帳號。
如果覺得這篇文章覺得OK

麻煩各版面管理員請自行移動文章

還有關於小竹子說的是否存活問題可以修改如下

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

打開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";

發表於 : 2005-05-12 18:07
streitleak
C.K. 寫:
Mowd 寫:這真是太棒啦~C.K.可以考慮發表到非官方外掛區~
上面提到的問題應該可以搭配快速砍人外掛使用,發信前先砍掉未啟用的人的帳號。
如果覺得這篇文章覺得OK

麻煩各版面管理員請自行移動文章

還有關於小竹子說的是否存活問題可以修改如下

只寄帳號有啟用的人其他沒啟用的不發信
誤會意思囉!
這跟帳號有沒有啟用無關。主要是MAIL主機的問題,如果該EMAIL的負責主機發現沒有該會員的EMAIL帳號的時候。會把信退還給發信端,也就是你設定的MAIL主機。所以如果五千多人有一千人EMAIL掛掉的話...
你就會收到一千封退信...會砍到手軟喔....XD

不過可以利用PHP本身的MAIL函數作帳號的檢驗動作,但是還是很消耗時間跟資源就是了。

發表於 : 2005-12-09 12:37
ipodplay
請問admin_mass_email.php是哪一個版本?
為什麼跟我的不一樣呢?
我的是2.04>2.06 :oops: