Как отправлять почту еженедельно, когда WordPress делает резервную копию или нет? - PullRequest
3 голосов
/ 08 февраля 2020

Несколько сайтов, имеющих в WordPress. плагин для создания резервных копий, использующий настроенное хранилище amazon S3, которое нам нужно каждую неделю отправлять почту недавнюю резервную копию, полученную или не на всех сайтах информацию о резервном копировании.

1 Ответ

2 голосов
/ 14 февраля 2020

Наконец-то я получил ответ

Сначала установите пакет AWS S3, перейдите по ссылке 'https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/s3-examples-creating-buckets.html' Затем приведенный ниже код создайте индекс. php файл, затем вызов в браузере работает хорошо

Если вы хотите автоматически запустить индекс. php файл использовать cron

require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\Exception\AwsException;

$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);
}
...