vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 3.0 Full Releases (https://vborg.vbsupport.ru/forumdisplay.php?f=33)
-   -   vBouncer : Change thread subscribtion options for members with bouncing emails (https://vborg.vbsupport.ru/showthread.php?t=61303)

tamarian 02-07-2004 10:00 PM

vBouncer : Change thread subscribtion options for members with bouncing emails
 
Update April 5th: Step 2A for vBulletin 3 Gold added.

What vBouncer does
vBouncer will reduce your server load, bandwidth, and your forum admin in-box, by unsubscribing members who keep bouncing their emails back to your forum admin email, which may bomb your mail box if you have a busy forum with many members who subscribe to many threads, but their emails are either invalid, inbox full, or have ISP problems.

Screen shots
None, this is a command line script, with some changes in functions.php

Who may want to use this?
1. Very busy sites, with thousands of notifications a day.
2. Your admin box gets too many bouncing emails
3. You use Postfix or Sendmail. I'm not sure how this works on other mail servers, please let me know if this works with QMail, or Exism.

Caution
This may drive some of your members mad :) If their email bounces a lot, this script will modify their subscriptions from their favourite threads. They will have to fix their email account, and then modify their subscribtion manually to each thread again... This may not be due to bad emails, just ISP-side problems.

Use at your own risk. I'm sharing this since some indicated interest at vBulletin.com in this thread:
http://www.vbulletin.com/forum/showt...threadid=71496
I'd be glad to help answer questions, but as with most hacks, it is your responsibility....


Installation
1. Create a unique email address on your server, dedicated to catch bouncing emails. Do not use adminemail, or any other existing email that you want to receive through a POP account. This email will be used only to catch bouncing emails.

Recommended name (makes for less editing): subscriber_notify

2. For vB 3.0.3 (older versions below, steps 2a or 2b)

I have yet to upgrade to 3.0.3, so this is contributed by ScottA:
Quote:

Originally Posted by ScottA
I got this running on 3.0.3. IIRC, what you need to do is open mail.php and look for this:

PHP Code:

    function Mail($toemail$subject$message$headers$fromemail$minusf false)
        {
            if (
$minusf)
            {
             
$this->success = @mail($toemail$subject$messagetrim($headers), "-f $fromemail");
            }
            else
            {
             
$this->success = @mail($toemail$subject$messagetrim($headers));
            }
        } 

And change it to this:

PHP Code:

    function Mail($toemail$subject$message$headers$fromemail$minusf false)
        {
            if (
$minusf)
            {
             
$this->success = @mail($toemail$subject$messagetrim($headers), "-f subscriber_notify@yourdomain.com");
            }
            else
            {
             
$this->success = @mail($toemail$subject$messagetrim($headers), "-f subscriber_notify@yourdomain.com");
            }
        } 


Note: You need to replace "subscriber_notify@yourdomain.com" with the email created in step 1.

2a. For vB3 gold
Edit functions.php

Find:
PHP Code:

       if ($vboptions['needfromemail'])
       {
         @
mail($toemail$subject$messagetrim($header), "-f $vboptions[webmasteremail]");
       }
       else
       {
           @
mail($toemail$subject$messagetrim($header));
       } 

Replace with (replace subscriber_notify@example.com with the email from step 1:
PHP Code:

   @mail($toemail$subject$messagetrim($header), "-fsubscriber_notify@example.com"); 


2b. For older, vB3 beta versions
Edit functions.php

Find:
PHP Code:

                   // send those mails
                 
if ($vboptions['needfromemail'])
                   {
                     @
mail($email['toemail'], $email['subject'], $email['message'], trim($email['header']), "-f $vboptions[webmasteremail]");
                   }
                   else
                   {
                     @
mail($email['toemail'], $email['subject'], $email['message'], trim($email['header']));
                   } 

Replace with (replace subscriber_notify@example.com with the email from step 1:
PHP Code:

                   // vBouncer hack
                 // Replace subscriber_notify email@example.com with the email from step 1
                 
mail($email['toemail'], $email['subject'], $email['message'], trim($email['header']), "-fsubscriber_notify@example.com");
                   
// end hack 


3. Copy vBouncer.pl.txt to a directory on your server above apache level. vBouncer.pl.txt is attached below.

Rename it to vBouncer.pl by typing:

mv vBounver.pl.txt vBouncer.pl

Make it executable by typing:

chmod +x vBouncer.pl

4. Edit the configuation section of vBouncer.pl
Code:

  #! /usr/bin/perl -w
  #
  # USAGE: ./vBouncer.pl -bounce : to unsubscribe threads from members with bouncing email
  #        ./vBouncer.pl : with no parameters to see (test) who will be unsubscribed
  #
 
  # Config:
  my $bouncelimit = 10;  # how many bounced emails are allowed, before taking actions
  my $downgrade = 0;      # What subscription level you will assign to bouncing members?
                          # 0 = No email, member will check subscribed thread through usercp
                          # 1 = Instant email, bad choice!
                          # 2 = Daily
                          # 3 = Weekly
 
 my $clearmailfile = 1;        # delete the mail file for bounced email when done (only deletes when -bounce option is used)
 
  my $bouncefile = "/var/spool/mail/subscriber_notify";
                          # the path/to/bouncing emails file. "subscriber_notify is the email name, you need
                          # to change it to the email name you chose for bouncing emails.
 
 
  my $db="database";        # mysql database name
  my $db_host="localhost";                # mysql host
  my $db_username="username";            # mysql username
  my $db_password="password";            # mysql password
  # end of config

5. Once a day or once a week (depending on the size of the spool size), you can run the scropt manually, or through a cron job. When done, you have to clear the email file, otherwise it will keep unsubscribing members whos emails no longer bounce.

To run the script in test mode, type:

./vBounver.pl

To run the script in bouncer mode, type:

./vBounver.pl -bouncer

To clear the mail box, use:
cat /dev/null > subscriber_notify
(or set the option in the script to do it)

Changes
Feel free to modify and post changes here or as new hacks, no credir or permission required. I may eventually add some features when I have the time.

Notes

1. The script assumes that Perl is installed @ /usr/bin/perl

If you have Perl installed elsewhere, you just need to update the first line of the script with the cirrect path:

#! /usr/bin/perl -w

2. You need to login to your server with a username that has write access to the mail spool, like a root/admin level user.

3. When run in test mode, ignore the warning "Use of uninitialized value in string eq at ./vBouncer.pl line 49" It just means you did not pass a parameter.

Sadie Frost 02-08-2004 01:10 AM

Installed, but when I run it in test mode I get the message "Use of uninitialized value in string eq at ./vBouncer.pl line 49" - is that just because its in test mode?

:)

tamarian 02-08-2004 01:22 AM

Quote:

Originally Posted by Sadie Frost
Installed, but when I run it in test mode I get the message "Use of uninitialized value in string eq at ./vBouncer.pl line 49" - is that just because its in test mode?

:)

Yes, it will give this warning when no parameters are supplied. It's just a warning, and can be ignored, or pass a dummy parameter like -test.

Sadie Frost 02-08-2004 01:33 AM

Quote:

Originally Posted by tamarian
The script assumes that Perl is installed @ /usr/bin/perl
If you have Perl installed elsewhere, you just need to update the first line of the script with the cirrect path:

#! /usr/bin/perl -w

Also, you need to login to your server with a username that has write access to the mail spool, like a root/admin level user.

Sorry not quick enough deleting that post :) I had vbouncer.pl chmoded to execute but not write - I chmoded it 777 and now I get no error message - it just says 'running in bouncer mode'. Should it say more than that before coming back to the prompt? Sorry for being such a pain!

tamarian 02-08-2004 01:37 AM

Quote:

Originally Posted by Sadie Frost
Sorry not quick enough deleting that post :) I had vbouncer.pl chmoded to execute but not write - I chmoded it 777 and now I get no error message - it just says 'running in bouncer mode'. Should it say more than that before coming back to the prompt? Sorry for being such a pain!

LOL, I deleted my reply too, and made it into a note in the first post.

It will only list more info only if it found members with bounced emails greater than the limit set in the configuration section.

If you have just created the account for "subscriber_notify", you might need to wait until it receives enough bounces from the outgoing emails. You may need to reduce the limit to 1 for testing.

Sadie Frost 02-08-2004 01:39 AM

Quote:

Originally Posted by tamarian
LOL, I deleted my reply, and made it into a note in the first post.

It will only list more info only if it found members with bounced emails greater than the limit set in the configuration section.

Great - thanks so much for all your help! :) (And for a much needed hack!)

tamarian 02-08-2004 01:42 AM

You're welcome, glad you found it useful.

eXtremeTim 02-12-2004 01:12 AM

Now if only we could get this script in php for thoose of us who dont use perl.

Erwin 02-12-2004 10:14 AM

This is an awesome idea. I may look into this.

John 02-12-2004 10:23 AM

This will be invaluable to me, especially when I run a forum which doesn't require email verification. :)

Dark_Wizard 02-13-2004 04:26 PM

Quote:

Originally Posted by eXtremeTim
Now if only we could get this script in php for thoose of us who dont use perl.

Easy convert....

tamarian 02-13-2004 04:34 PM

Quote:

Originally Posted by Dark_Wizard
Easy convert....

It is easy, but may present some security risks. If you find a secure way to do this, please share it with us.

heynurse 02-19-2004 09:59 AM

I love the idea of this hack, I am just worried about ticking off people who would loose threir subsriptions. I'm not sure this is even possible, but...

Instead of unsubscribing all the subscribed threads, would their be a way to temporarily move them into a usergroup called something like: Bad email address

and have that usergroup recieve no e-mail? (besides account related e-mail, like lost password etc..) But keep the subcription info intact with no e-mail notification?

And then have an option for them to update their e-mail address, once it is updated, have the script move their susbcription status back to previous usergroup?

I hope that makes sense?

Again, maybe this is not possible, but I think this would be a great addition if it was possible :)

Thanks

eXtremeTim 02-19-2004 08:43 PM

I know it would be an easy convert. Especialy since I can script in Perl as well. I just dont really have the time right now to do it. Im working on several projects at once right now.

tamarian 02-21-2004 11:41 PM

Quote:

Originally Posted by heynurse
I love the idea of this hack, I am just worried about ticking off people who would loose threir subsriptions.

No one loses their subscription. This will change it from instant email, to no email. i.e. they can access subscribed threads from the user cp, and they can change it to instant or weekly, etc..

heynurse 02-22-2004 04:39 AM

Tamarian,

OK, thanks for the clarification.

PranK 03-11-2004 07:43 AM

This is awesome and I plan to use it (with around 500 bounces tp me a day), however, i am kinda dumb...

Do I need to run the file on a regular basis? Can I set a cronjob for it? I am terrible at backing up the db, let alone running this...

Also, if i have several domains on my server, does that pose a problem? i notice there is no domain on the end of the email address user in the script?

Sorry for the q's, thanks for any help.

Christian

Erwin 03-12-2004 10:30 PM

I just realized I can't use this because my mail server is remote - the server does send the emails out, but return bounces go to another mail server.

tamarian 03-12-2004 11:25 PM

Quote:

Originally Posted by PranK
This is awesome and I plan to use it (with around 500 bounces tp me a day), however, i am kinda dumb...

Do I need to run the file on a regular basis? Can I set a cronjob for it? I am terrible at backing up the db, let alone running this...

Also, if i have several domains on my server, does that pose a problem? i notice there is no domain on the end of the email address user in the script?

Sorry for the q's, thanks for any help.

Christian

Yes, you can run this as a cron job, there should be no problem with that.

re: multiple domain: It should not be a problem, but if you have multiple vb forums, the script will only handle one of them, but it's possible to rename it and set it up for each forum.

tamarian 03-12-2004 11:31 PM

Quote:

Originally Posted by Erwin
I just realized I can't use this because my mail server is remote - the server does send the emails out, but return bounces go to another mail server.

If you want to, you could automate the transfer of the mail file to the MySQL server. As it's just a flat file, the script should be able to parse through it. and update the database

Erwin 03-12-2004 11:33 PM

Quote:

Originally Posted by tamarian
If you want to, you could automate the transfer of the mail file to the MySQL server. As it's just a flat file, the script should be able to parse through it. and update the database

How would I do that? I'm clueless when it comes to email management on my server. :) That's the reason why I host my domains on another server and manage email there.

Erwin 03-12-2004 11:33 PM

I do need this hack, as I don't verify email, and lots of emails do bounce back.

tamarian 03-14-2004 01:18 AM

Quote:

Originally Posted by Erwin
How would I do that? I'm clueless when it comes to email management on my server. :) That's the reason why I host my domains on another server and manage email there.

Here's how I would do it:

Follow step 1 on the mail server.

Follow steps 2, 3, 4 and 5 on the vBulletin server (where the database resides)

Then wirte a small shell script to scp or ftp the bounce mail file from the mail server to the database server. In the vBouncer script, enter the location of the file in the $bouncefile line. When the script is run on the database server, it should pick up the bouncing members from the file.

If you need any help with any of the steps, feel free to PM me.

PranK 03-14-2004 01:12 PM

Quote:

Originally Posted by tamarian
Yes, you can run this as a cron job, there should be no problem with that.

re: multiple domain: It should not be a problem, but if you have multiple vb forums, the script will only handle one of them, but it's possible to rename it and set it up for each forum.

ok great, thank you!!

i'll install it when i install VB3 Gold.

d3nnis 03-22-2004 04:05 AM

if this script can be modify in a way to trace user's registration using invalid email account and immediately deletes away this new registration, that will be even better!

PranK 03-23-2004 11:51 AM

Any update for VB3 Gold? The code is different (by the looks) and I get bombarded with email! :)

Thanks!

Christian

sabret00the 03-24-2004 02:42 PM

wow didn't know this was ported to vb3, is their a php version out?

influence 03-25-2004 06:48 PM

is there any alternative to this? I remember someone made a hack where you can have 2 email address. one for the board in general and the other is for error and so on or bounced emails.

kontrabass 04-02-2004 12:04 AM

Hmm... Does this need to be updated for VB3 gold? The code in /includes/functions.php doesn't seem to match the instructions...

:)

tamarian 04-05-2004 09:47 PM

Updated for vB3 gold, use step 2A. The old step 2 for beta is now step 2B

Big Daddy Chemo 04-08-2004 03:46 PM

What app are you using to modify functions.php? I use Dreamweaver, Notepad, and wordpad but get parse errors on upload.

Chemo

kontrabass 04-08-2004 09:39 PM

Hmm...:
error:

Can't locate DBI.pm in @INC

I guess I need some soft of perl DBI module or something? Just guessing... ?

Thanks-

tamarian 04-08-2004 10:15 PM

Quote:

Originally Posted by Big Daddy Chemo
What app are you using to modify functions.php? I use Dreamweaver, Notepad, and wordpad but get parse errors on upload.

Chemo

I mostly use Quanta and Kate (Linux apps) on the desktop, or vi on the server.

I think many windows users use TextPad, or PHPEdit. Basically any programming editor, and make sure you upload as ASCII, not binary when using FTP.

tamarian 04-08-2004 10:16 PM

Quote:

Originally Posted by kontrabass
Hmm...:
error:

Can't locate DBI.pm in @INC

I guess I need some soft of perl DBI module or something? Just guessing... ?

Thanks-

Correct :)

kontrabass 04-09-2004 03:22 PM

Many many thanks for this fantastic hack. No more 500MB bounced email boxes! :D Took me awhile to get the perl DBD module installed correctly (with the correct --cflags and -lib options to point to my mysql source install), but it's working like a charm now.

Big Daddy Chemo 04-12-2004 06:38 PM

Anyone figure out how to port this for Exim?

influence 04-13-2004 06:17 PM

if ($vboptions['needfromemail'])
{
@mail($toemail, $subject, $message, trim($header), "-f $vboptions[webmasteremail]");
}
else
{
@mail($toemail, $subject, $message, trim($header));
}
} <-- remove

You need to take that extra code i have in bold out or else this script will give out some sort of functions error

tamarian 04-13-2004 06:35 PM

Quote:

Originally Posted by influence
if ($vboptions['needfromemail'])
{
@mail($toemail, $subject, $message, trim($header), "-f $vboptions[webmasteremail]");
}
else
{
@mail($toemail, $subject, $message, trim($header));
}
} <-- remove

You need to take that extra code i have in bold out or else this script will give out some sort of functions error

Thanks for catching this :)

First post updated.

Pseudomizer 04-22-2004 02:32 PM

Hi,

i would like to use this script but only for one reason: I got round about 10 registrations per day and 5 of them use invalid email addresses. :disappointed:

What i would need is a cron job which runs once a day one specific script which checks this bouncing emailaddress and afterwards deletes all invalid accounts from the usergroup "Awaing Email confirmation". :nervous:

Environment:
SuSe Linux 8.2, Perl 5.8.0, latest MySQL and latest Apach 1.x version and latest Qmail version mit POP3-before-SMTP installed.

Any help would be appreciated.

Cheers,

tamarian 04-22-2004 03:21 PM

Quote:

Originally Posted by Pseudomizer
Hi,

i would like to use this script but only for one reason: I got round about 10 registrations per day and 5 of them use invalid email addresses. :disappointed:

What i would need is a cron job which runs once a day one specific script which checks this bouncing emailaddress and afterwards deletes all invalid accounts from the usergroup "Awaing Email confirmation". :nervous:

Environment:
SuSe Linux 8.2, Perl 5.8.0, latest MySQL and latest Apach 1.x version and latest Qmail version mit POP3-before-SMTP installed.

Any help would be appreciated.

Cheers,

Should be easy to modify this script to do what you want.

The search can be restricted to only the usergroup awaiting email activation:

Change this qury:

"SELECT userid, username from user where email='$theemail'"

To:

"SELECT userid, username from user where email='$theemail' AND usergroupid=3"

And the unsubscribe query can be replaced with a user deletion query:

Change:

UPDATE subscribethread set emailupdate='$downgrade' where userid='$varname1'"

To:
DELETE from user where userid='$varname1'

This is a rough idea of how it can be done....


All times are GMT. The time now is 04:49 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01566 seconds
  • Memory Usage 1,886KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_code_printable
  • (6)bbcode_php_printable
  • (17)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (40)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • pagenav_page
  • pagenav_complete
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete