dopetalk does not endorse any advertised product nor does it accept any liability for it's use or misuse

This website has run out of funding so feel free to contribute if you can afford it (see footer)

Author Topic: [batch php script] Email inactive Members  (Read 3132 times)

Offline Chip (OP)

  • Server Admin
  • Hero Member
  • *****
  • Administrator
  • *****
  • Join Date: Dec 2014
  • Location: Australia
  • Posts: 6648
  • Reputation Power: 0
  • Chip has hidden their reputation power
  • Gender: Male
  • Last Login:Yesterday at 05:53:23 PM
  • Deeply Confused Learner
  • Profession: IT Engineer
[batch php script] Email inactive Members
« on: September 08, 2018, 11:19:36 PM »
you should NEVER do DB deletes but if you do, then run all the Admin > Maint > Routine jobs to fix things up.

my version for those who have logged in:

Code: [Select]
<?php
// SET THESE FIRST !
$servername "localhost";
$username "dbuser";
$password "dbpass";
$dbname "smf209";
$tbpref "smf209_";
$domain "forum.site-name.org";
$days_not_logged_in 365 // only those who have not not logged for 365 days or more
$do_email 0 // enable to send emails

$connect = new mysqli($servername$username$password$dbname);
if (
$connect->connect_error) {
        die(
"Connection failed: " $connect->connect_error);
}
$sql "SELECT * FROM" " " $tbpref "members ORDER BY last_login";
//$sql = "SELECT * FROM" . " " . $tbpref . "members WHERE member_name = 'test' ORDER BY last_login";
$result $connect->query($sql);
if (
$result->num_rows 0) {
        while(
$row $result->fetch_assoc()) {
                if (!empty(
$row["last_login"])) {
                        
$dateSin =  $row["last_login"];
                        
$current_date date("U"/* to have it in microseconds */;
                        
$your_month date("m"$dateSin);
                        
$your_day =  date("d"$dateSin);
                        
$your_year =  date("Y"$dateSin);
                        
$selected_date_stamp mktime(0,0,0,$your_month,$your_day,$your_year);
                        
$selected_date date("U",$selected_date_stamp);
                        
$difference round (($current_date $selected_date)/(3600*24));
if ($difference >= $days_not_logged_in) {
echo $row["member_name"] . " " $row["email_address"] . " " "posts=" $row["posts"] . " ";
echo "Last logged in" " " $difference " " "days ago" PHP_EOL;
        $to_member =  $row["member_name"];
        $from_name "SMF Administrator";
                        
$from_email "smfadmin@" $domain;
                        
$headers "From: $from_name <$from_email>";
                        
$body "Dear $to_member, \n
We miss you as you have not logged in to https://
$domain for over $difference days. \n
Please come and visit us soon! \n
Regards, \n
Server Admin"
;
         $subject "Regarding your last login";
         $to_email $row["email_address"];
         if ($do_email) {
         if (mail($to_email$subject$body$headers)) {
                 echo "email sent" " ";
       } else {
         echo "email failed" " ";
       }

                        }
                }
}
} else {
        echo 
"0 results";
}
$connect->close();
?>


my version for those who have NEVER logged in:

Code: [Select]
<?php
// SET THESE FIRST !
$servername "localhost";
$username "dbuser";
$password "dbpass";
$dbname "smf209";
$tbpref "smf209_";
$domain "forum.site-name.org";
$days_since_registered 30;
$do_email 0 // enable to send emails
$do_delete 0// enable to remove members forcefully (NOT ADVISABLE as "Forum > Maintenance > Routine" repairs are required afterwards)

$connect = new mysqli($servername$username$password$dbname);
if (
$connect->connect_error) {
        die(
"Connection failed: " $connect->connect_error);
}
$sql "SELECT * FROM" " " $tbpref "members WHERE last_login = '0'";
//$sql = "SELECT * FROM" . " " . $tbpref . "members WHERE member_name = 'testr'";
$result $connect->query($sql);
if (
$result->num_rows 0) {
        while(
$row $result->fetch_assoc()) {
                
$datereg $row["date_registered"];
                
$current_date date("U"/* to have it in microseconds */;
                
$your_month date("m"$datereg);
                
$your_day date("d"$datereg);
                
$your_year =  date("Y"$datereg);
                
$selected_date_stamp mktime(0,0,0,$your_month,$your_day,$your_year);
                
$selected_date date("U",$selected_date_stamp);
                
$difference round (($current_date $selected_date)/(3600*24));
                if (
$difference >= $days_since_registered) {
                        echo 
$row["member_name"] . " " $row["email_address"] . " " "registered" " " $difference " " "days ago" PHP_EOL;
                        
$to_member =  $row["member_name"];
                        
$from_name "SMF Administrator";
                        
$from_email "smfadmin@" $domain;
                        
$headers "From: $from_name <$from_email>";
                        
$body "Dear $to_member, \n
You have never logged in to https://
$domain since you joined us so I will be removing you soon unless you do so. \n
I have already activated your account but both that email and your activation mail probably went to your spam folder. \n
If you have any questions or need any help on this matter then just reply to me. \n
Regards, \n
Server Admin"
;
                        
$subject "Regarding your inactive membership";
                        
$to_email $row["email_address"];
                        if (
$do_email) {
                                if (
mail($to_email$subject$body$headers)) {
                                        echo 
"email sent" " ";
                                } else {
                                        echo 
"email failed" " ";
                                }
                        }
                        if (
$do_delete) {
                                
$sql2 "DELETE FROM" " " $tbpref "members WHERE member_name = '$to_member' ";
                                if (
$connect->query($sql2) === TRUE) {
                                        echo 
"$to_member deleted successfully";
                                } else {
                                        echo 
"Error deleting record: " $connect->error;
                                }
                        }
                }
        }
} else {
        echo 
"0 results";
}
$connect->close();
?>



Post Merge: September 09, 2018, 12:01:24 AM

all members who haven't logged in for over a year have been notified.

I hope this brings a few old guys back.
« Last Edit: September 30, 2018, 03:47:46 PM by Chip »
friendly
0
funny
0
informative
0
agree
0
disagree
0
like
0
dislike
0
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions
Our Discord Server invitation link is https://discord.gg/jB2qmRrxyD

Offline Esoteric Anhydride

  • I <3 Mods
  • Tech
  • Full Member
  • *
  • SA_Chat+
  • **
  • Join Date: May 2015
  • Location:
  • Posts: 478
  • Reputation Power: 0
  • Esoteric Anhydride has hidden their reputation power
  • Last Login:October 14, 2019, 06:26:54 AM
Re: [batch php script] Email inactive Members
« Reply #1 on: September 10, 2018, 02:13:42 AM »
Your script is broken. I got an email yesterday talking about not logging in when I was here two days ago.

This is the second threat this place has email me re: attendance.

Please stop threatening memberships! This is a discussion forum, not a job.

The surest way to seal your casket is to start kicking people off for going on hiatus.

Shit happens to everyone, life is a bitch and the Internet is a big place.

chillax
friendly
0
funny
0
informative
0
agree
0
disagree
0
like
0
dislike
0
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions

Offline smfadmin

  • SMF (internal) Site
  • Administrator
  • Jr. Member
  • *****
  • Join Date: Dec 2014
  • Location: Management
  • Posts: 133
  • Reputation Power: 0
  • smfadmin has hidden their reputation power
  • Last Login:October 29, 2023, 06:02:36 AM
  • Supplied Install Member
Re: [batch php script] Email inactive Members
« Reply #2 on: September 10, 2018, 03:10:42 AM »
That first email was when i was testing it and i coded a bug where you got the wrong reminder (my script ran for about a dozen members before i killed it).

I have notified members that have NEVER logged in then they will be deleted soon (fair enough).

I sent a reminder about us to those people who haven't logged for over a year ~ can't be a bad thing ?

I think you are right though but it's housekeeping too.

I will go easy, as per your advice.
« Last Edit: September 10, 2018, 06:15:55 AM by Chip »
friendly
0
funny
0
informative
0
agree
0
disagree
0
like
0
dislike
0
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions
No reactions
measure twice, cut once

Tags:
 


dopetalk does not endorse any advertised product nor does it accept any liability for it's use or misuse





TERMS AND CONDITIONS

In no event will d&u or any person involved in creating, producing, or distributing site information be liable for any direct, indirect, incidental, punitive, special or consequential damages arising out of the use of or inability to use d&u. You agree to indemnify and hold harmless d&u, its domain founders, sponsors, maintainers, server administrators, volunteers and contributors from and against all liability, claims, damages, costs and expenses, including legal fees, that arise directly or indirectly from the use of any part of the d&u site.


TO USE THIS WEBSITE YOU MUST AGREE TO THE TERMS AND CONDITIONS ABOVE


Founded December 2014
SimplePortal 2.3.6 © 2008-2014, SimplePortal