![]() |
vBouncer: reduce server load by unsubscribing bouncing members from threads
vBouncer is a handy tool for busy forums (or those that do not require email verification) to control the amounts of bogus emails sent from and to your server.
What vBouncer does: vBouncer monitors your mail spool file, and identifies members responsible for large amounts of bounced emails. It then issues a PM warning, and when the unsubscribe threshold is met, it will will unsubscribe them for all threads, and sets them to the "no email" subscription level. After a couple of runs, this should significantly reduce your server load. Features: o Manual or auto processing option o Collect logs via IMAP/POP or mail spool file o Custom filters to match patterns in bounced emails o Uses vB's cron files (Scheduled tasks) o Uses encrypted header for authentication (suggested by Paul M). o Stats on members with bouncing emails, and error codes o Tuning options o Verbose cron logs for diagnostics o Option to send PM warning prior to reaching the limit o Option to send PM notifications after reaching the limit o Option to change the member's subscription default o Option to all thread subscriptions to "no email" o Option to all forum subscriptions to "no email" o Option to move offenders to a different primary usergroup o Option to process 5.0.0/550 errors (email unknown) upon a single email, isntead of observing the bounce limit Installation: 1. Extract the files into the corresponding directories (admincp => admincp, includes => includes) 2. Run the installation script in the admincp 3. Fill out the settings menu in the vBouncer section of the admin panel (see the how-to post below) 4. Import and activate the plugin file through the plugin manager. 5. Once ready, add the cron scripts to your scheduled tasks: vbouncer-collect.php (should be run daily, or more frequently) and vbouncer-clean.php (weekly, equal to Bounce limit period) 6. If you are using vB's SMTP email option, make sure to also enable the "-f" option. Change log: - August 12, 2005 v1.3 Update to the cron files to match new changes in vB's cron/tasks. To upgrade, just re-upload the contents of includes/cron. - July 11, 2005 v1.2 Bug fix for some server/PHP setups; resolve aliases for return keys, otherwise some aliases would be considered forged. - July 5, 2005 v1.1 Bug fix in standard report pattern matching - July 4, 2005 v1.0 Added encrypted header for authentication (suggested by Paul M). - July 3, 2005 v0.9.1 fixed a bug preventing IMAP/POP log collection. - July 2, 2005 v0.9 added IMAP/POP option and custom filters file vbouncer.ini - June 27, 2005 v0.5 Added custom header setting option, for re-written headers. - June 26, 2005 v0.4 Found a way to make it work as a plugin, without code edits (thanks to Paul M) - June 26, 2005 v0.3 No changes, just removed the plugin - June 25, 2005 v0.2 Added NDR/Reply code errors to stats, and option to act upon 5.0.0/550 (user unknown) - June 21, 2005: v 0.1 Initial release. Marked beta, but it's working fine on PostFix and SendMail. Need to hear from those who tried on QMail and Exim :) |
This post will be used for an updated FAQ and How-To's
How it works 1. vBouncer makes your forum send emails with a modified "Return-Path" header including the vBouncer emaila ddress, so most ISP's will send bounce notices to that email (instead of the webmaster email). 2. When ISP's send the bounced notices, those notice emails are stored in the mail spool of vBouncer. Most will tag those notices with a "Final-Destination" header stating the email address that bounced. 3. The vBouncer cron task (vBouncer-collect.php) checks the spool file and extracts all email adresses that are bouncing, and store them into a database table, if they belong to a forum member. It wil then empty the spool file. 4. If you selected auto processing, the vBouncer cron task (vBouncer-clean.php) reads the table and stats, and executes the options you chose to apply in your vBouncer settings. The database table will pruned from any old data. Email setup: For vBouncer to work, you need to: 1. Create a new email account on your server, and that email account has to be unique, and only used for this purpose, collecting bounced emails. 2. This account should not be POP'ed or deleted by any user, only vBouncer should delete them. 3. The vBouncer emails should be in a regular spool file (text file). This is standard on SendMail and PostFix. Not sure about Qmail, Exim or Windows, but they should able to do it. (Anyone with experience in those systems, please let me know) Please check with your server admin how to accomplish this. Tips: If you can't make your mail server spool to a single text file, you may want to try the (dot)forward file method: http://publib16.boulder.ibm.com/pser...es/forward.htm See post #3 below for further details on mail servers. IMAP settings You may need to add "notls" in the IMAP string, if you encounter problems: Quote:
Post notification sender email This is the email vBouncer will use to send new reply notification. You need to create a unique email address for this. Bounced emails will be returned to this email address on your site/server domain. This email account should not be downloaded, and must be left waiting, vBouncer will pick it up. Example: subscriber_notify@mydomain.com Full path to email spool file This is the full path to where the mail spool file resides. This is where bounced email notifications are sent back to the post notification email. Example: /var/spool/mail/subscriber_notify (Use the diagnostics option to sure the file is readable and writable) Maximum unique members to process per run Processing the mail log file will stop when this limit is reached. If your logs repeatedly excede this number, it is better to run the scheduled vBouncer collect task more frequently, instead of making this limit too high, for performance reasons. Example 100 Auto processing mode? You have the option to either let vBouncer automaticly change subscription levels for members with bouncing emails, or choose no if you prefer to simply decide based on the stats of bouncing emails. Yes No (Choose no, if you just want to monitor the stats) Bounce limit If you selected auto-processing, how many bounced email notices should be acted upon?. (Only works in auto mode) Example: 50 Bounce limit period Enter the number of days in which the bounce limit set above will be applied. (Only works in auto mode) Example: 7 The above two options results in setting a limit of X email bouncer per Y days period. Send Notification PM PM Sender ID PM Sender Username Send PM warning Warning Limit Change default subscription level to no email Change subscribed threads to no emails Change subscribed forums to no emails Change usergroup for bouncing members? Destination usergroup Protected usergroups Untouchable usergroups These options control what actions to do with members who excede the set limits. |
Note: If you use vBouncer's IMAP/POP method, you do not need to follow the instructions here. This is only for those who prefer to use mail spool files.
Spool files How-To This post addresses the location and setup of spool files on different mail server software. You will only need it if you can't find your mail spool file, or don't have one. Sendmail: Sendmail by default spools the emails for each email address into a text file. Usually found in /var/spool/mail/account_name (account_name is the account in the email address, like subscriber_notify, for example) Postfix: Postfix, like Sendmail, spools the emails for each email address into a text file. Usually found in /var/spool/mail/account_name (account_name is the account in the email address, like subscriber_notify, for example) QMail: (Thanks to Merk for testing and providing the information) QMail, by default stores emails in Maildir format, new file for each email. In order to spool emails to a single file, you need to do the following steps: In the home directory of the user account (subscriber_notify), create a file called .qmail the content of that file should be a single line indicating the file path where you want the emails to be stored: /var/spool/mail/subscriber_notify Or any path you choose. The file needs to exist, so we can first create it by using the touch command: touch /var/spool/mail/subscriber_notify And it needs be readable and writable by PHP, so use the chmod command: chmod 666 /var/spool/mail/subscriber_notify Vpopmail+QMail: (Thanks to Merk for testing and providing the information) For vpopmail, a user doesnt have a home directory, and it dosent go into the users virtual mail directory either, it sits just below that in the domain's "root" directory. /home/vpopmail may be different for some users. /home/vpopmail/domains/domain.com/.qmail-subscriber_notify for subscriber_notify@domain.com (contents as above) The contents of the .qmail file are still the same described above for QMail. You just need to follow the same steps to create .qmail file and the file to spool the emails too. Exim+cPanel: (thanks to Paul M for this tip) Note, before you do this, check this post: https://vborg.vbsupport.ru/showpost....&postcount=101 It may be best to avoid changing the config of Exim, and just use the IMAP/POP option in vBouncer. In the exim config file ( /etc/exim.conf ), near the bottom is a section that begins with virtual_userdelivery: - in that section is a line which says mode = 0660 - change this to mode = 0666 In your cpanel account, for address rejects@domain.com The path needs to be " /home/<cpaccount>/mail/domain.com/rejects/inbox " The mail, domain.com & rejects folders all need chmod'ing to 755. The mailbox file can then be set to 666, and it will work. Windows Mail Servers: Still waiting for testers and information ---------------------------- If your server is running Exim or a Windows mail server, please post here: https://vborg.vbsupport.ru/showthread.php?t=83407 Once the information is provided (in that thread), and we get you up and running, the instructions for those specific mail servers will be posted here. Note that it may actually work out of the box even if you don't have SendMail or PostFix. If you have a text file on your server that can store the emails for a specific account, then you're all set. It's just that I have no experience with those systems, so I don't know. |
This looks quite interesting, I might put this on our test server, we run exim, but I'm not sure how it works ....
|
A new zip has been uploaded, there was a bug in the user group demotion option (hardcoded 1, instead of the chosen destination groupid)
Paul, I look forward to some good news :) It would be nice to know how to setup Exim, Qmail or Windows, so this would work for all. |
coool :D - just what i mod requested for ;)
|
I will be using this on a live system when a qmail system has been tested.
I am willing to provide a server to test it on, if needs be. |
Quote:
|
Good idea.
|
Seems like this saves on resources like bandwidth and storage, rather than server load...
Also this does not seem too applicable to users who are in a shared hosting enviroment... |
will give it a shot. Nice hack
|
Quote:
https://vborg.vbsupport.ru/showthread.php?t=83407 |
Quote:
Quote:
|
Quote:
|
Quote:
https://vborg.vbsupport.ru/showthread.php?t=83407 My plan is to compile a list of steps on the various setups to spool emails of one account to a file, and update post #3 with it. |
could I use this so if I send out emails to users awaiting confirmation any bounces would go to the same account so they can be moved deleted etc with vBouncer.
|
Well done tamarian - it's on the way to answering the request in this thread
http://www.vbulletin.com/forum/showthread.php?t=91176 May I suggest the possibility of analysing the emails to determine those with permanent errors so those members can be moved to the 'awaiting email activation' group after just 1 bounced email? |
Quote:
So it seems to work by accedent :) as I have not thought of this when I wrote it. |
Quote:
1. identify and store the error codes/status of the bounces 2. Allow specific actions to be taken against emails generating specific error codes, regardless of not reaching the allowed bounce tolerance limit I like your ideas :D |
yes thats what I mean! I guess thats a extra free feature.
Because some users register thinking they don't have to confirm, so they never validate the account. This could solve the issue where much. Quote:
|
tamarian, yes, that sounds great provided the error codes can be 100% identified for emails which have bounced. A '550 Invalid recipient' would require the user to be moved to requiring email activation (with ideally a PM sent to the person but email notification of that PM not) whereas a '552 5.2.2 Over quota' would need to be processed as per your quota system.
The big problem I have is when we send out an email to all our users (40,000 ish recipients). We get something like 1,000 or 2,000 bounced emails, with a lot of those being from AOL (it must detect a lot of emails from a single source and block them all), and maybe 300 or 400 which require the user's account to be deactivated. This plugin could potentially save me 2 or 3 hours every time we send out the mailshot. [Edit - just had a thought. What about people who mistakenly reply to thread notifications, as they sometimes do? They think they are replying to the thread. It's usually less experienced users doing it. Ideally they need an email back saying that they have mistakenly replied to the forum mailer. |
Looks like we now have QMail covered, thanks to Merc. I've updated post #3 with the details. We've already had Sendmail and Postfix covered. So only Exim information is missing (I'm assuming Windows servers use Sendmail).
|
Quote:
|
In your instructions above, you mention
touch /var/spool/subscriber_notify while, the path you mention before that is /var/spool/mail/subscriber_notify :) Hopefully I will install and use vBouncer sooner rather than later, its definatly a feature I need!! |
Thanks for the correction Tim :up:
I have just released a 3.0.7 version, similar in features to this one. For those who don't plan to upgrade soon, you can use it instead: https://vborg.vbsupport.ru/showthrea...threadid=91119 |
Quote:
Problems so far ; 1. The mail spool file is located at /home/<cp account>/mail/<mail domain>/<mail account>/inbox - however, we have a php security setting which prevents apache from breaking out of the /home/<account>/html_docs/ to read it. I got round this by writing a little cron job to copy the inbox file to a folder within html_docs once a day. 2. The problem I haven't got round yet is that something (probably exim) appears to be rewriting the Return-Path to "nobody@<server-domain>" before sending the mails. I'm not sure how to stop this yet, but there must be a way because our live server doesn't do it. |
Quote:
|
Quote:
Quote:
|
Quote:
Maybe Paul wrote a script to copy it first, then empty it. But I think a sym link should work. I don't have a control panel, so I can't test this case. Give th sym link a try, and let m know how it goes. |
Quote:
1. Delete the old inbox file from the temp location 2. Move the proper inbox file to the temp location. 3. Process the temp file (I disabled the code that emptied the file). Any mails after the move simply create a new "proper" inbox, ready to be moved 24 hours later. Quote:
Quote:
|
Quote:
Now you should be able to use /path/to/admincp/subscriber_notify as the file location (also make it chmod 666 Quote:
|
sym link no work either.
also, I added a clearstatscache() before the diagnostics happen Quote:
|
Quote:
|
Quote:
|
Quote:
|
Quote:
Quote:
PHP Code:
Quote:
Code:
rm /home/<cpname>/public_html/zmail/inbox :) |
My next problem is that it's failed to detect the bounced e-mail message.
|
Quote:
As to why the symlink doesn't work, I'm not sure, as I don't use cpanel. Check the apache error log, there might be some clues. |
Paul, buro9 and 7thgen:
Are you guys on similar setups? CPanel+Exim? If so, there might be an alternative solution. Exim allows forwarding through .forward file and can use pipe the emails to the shell. So if the symlink for some reason doesn't work, you might be able to capture the emails to an alternative file within your public_html space. |
Quote:
To answer your other question - yes, the file had exactly one rejected e-mail in it that i did as a test. The reject headers are ; Code:
From MAILER-DAEMON Sun Jun 26 22:13:31 2005 |
All times are GMT. The time now is 12:08 AM. |
Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
![]() |
|
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|