Skip to content
Advertisement

How to send mail weekly once WordPress backup taken or not?

Multiple sites having in WordPress. backup buddy plugin using configured amazon S3 bucket we need every week send mail recent backup received or not in all sites backup information.

Advertisement

Answer

Finally I got the answer

First install the AWS S3 package refer this ‘https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/s3-examples-creating-buckets.html‘ Then below mentioned code create index.php file then call in browser working good

When you want to automatically run index.php file use cron

require 'vendor/autoload.php';
use AwsS3S3Client;
use AwsExceptionAwsException;

$bucketData = '{
   "bucket":{
      "1":{
         "name":"bucketname-1",
         "backup":"backups/"
      },
      "2":{
         "name":"bucketname-2",
         "backup":"backups/"
      }   
   },
   "uncheck":[
      "menardsimages" 
   ]
}';
//multile-bucket-having-mentioned-except'uncheck'

$bucketData = json_decode($bucketData);
/**
 * List your Amazon S3 buckets.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$key = 'xxxxxxxxx';
$secret = 'yyyyyyyy';
//Create a S3Client
$s3Client = new S3Client([
    'region' => 'us-west-2',
    'version' => 'latest',
    'credentials' => [
        'key' => $key,
        'secret' => $secret,
    ]
]);

function recent_backup_verify($objects){
    $tendays_bf_today = date('Y-m-d',(strtotime ( '-7 day' , strtotime ( date("Y-m-d")) ) )); 
    foreach ($objects as $object) {
       $created_date = $object['LastModified']->format('Y-m-d');
       if($created_date > $tendays_bf_today){
           return $created_date;
       }
    }
    return false;
}

function searchForName($name, $array) {
   foreach ($array as $key => $val) {
       if ($val->name === $name) {
           return $val->backup;
       }
   }
   return null;
}

$buckets = $s3Client->listBuckets();
//print_r($created_bucketlist);
$backup_array = array();

foreach ($buckets['Buckets'] as $bucket) {
    //files-listing-insideofthe-bucket
    if(!in_array($bucket['Name'], $bucketData->uncheck)){
        $objects = $s3Client->getIterator('ListObjects', array(
            "Bucket" => $bucket['Name'],
            "Prefix" => searchForName($bucket['Name'], $bucketData->bucket) //must have the trailing forward slash "/"
        ));
        $getbackup_result = recent_backup_verify($objects);
        if($getbackup_result != false){
            $backup_array[$bucket['Name']]['status'] = 'Taken';
            $backup_array[$bucket['Name']]['date'] = $getbackup_result;
        }else{
            $backup_array[$bucket['Name']]['status'] = 'Not Taken';
            $backup_array[$bucket['Name']]['date'] = '-';
        }

    }
}


sendgrid_form($backup_array);
function sendgrid_form($backup_array){

    $msg = '<table border="1" cellpadding="5" cellspacing="0" width="500px" style="border-color:#ddd;">';
    $msg .= '<tr bgcolor="#555" style="color:#fff;">';
    $msg .= '<th>S.No</th><th>Site Name</th><th width="100px">Backup Date</th><th width="100px">Backup Status</th>';
    $msg .= '</tr>';
    $s_no = 1;
    foreach($backup_array as $site=>$val){
        if($val['status'] == 'Taken'){$color = 'green';}else{$color='red';}
        $msg .= '<tr>';
        $msg .= '<td align="center">'.$s_no.'</td><td>'.$site.'</td><td align="center" >'.$val['date'].'</td><td align="center" style="color:'.$color.'">'.$val['status'].'</td>';
        $msg .= '</tr>';
        $s_no++;

    }
    $msg .= '</table>';


    $message_html = "<hr width='20%' align='left'>
                    <img src='logo.png' width='100px'>
                    <hr width='20%' align='left'>
                    <h3>Hi Team,</h3>
                    <p>This is the list that has the every week backup status of our websites/applications that received in our AWS S3. If the 'Backup Status' is 'Not Taken' please check with the script/plugin immediately.</p>
                    ".$msg."
                    <p>Thank You</p>";

    $to = 'reciever@example.com';
    $json_string = array(
        'to' => array($to),
        'category' => 's3_backup'
    );

    $params = array(
    'api_user' => 'xxxxx',
    'api_key' => 'yyyy',
    'x-smtpapi' => json_encode($json_string),
    'to' => $to,
    'subject' => 'Backup S3 Report!',
    'html' => $message_html,
    'from' => 'info@example.com',
    );

    $request = 'https://api.sendgrid.com/api/mail.send.json';
    $session = curl_init($request);
    curl_setopt ($session, CURLOPT_POST, true);
    curl_setopt ($session, CURLOPT_POSTFIELDS, $params);
    curl_setopt($session, CURLOPT_HEADER, false);
    curl_setopt($session, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($session);
    curl_close($session);
    $temp = json_decode($response);

    if($temp->message == 'success'){
        $data['success'] = "Email Send Successfully!";
    }else{
        $data['success'] = "Email Send Failed!";
    }
    echo json_encode($data);
}
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement