Linux puskom-ProLiant-DL385-Gen10 5.4.0-150-generic #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023 x86_64
/
home
/
puskom
/
mastur
/
backwpup
/
inc
/
//home/puskom/mastur/backwpup/inc/class-destination-email.php
<?php // Swift Mailer v5.2.2 // http://swiftmailer.org/ // https://github.com/swiftmailer/swiftmailer use Inpsyde\BackWPupShared\File\MimeTypeExtractor; class BackWPup_Destination_Email extends BackWPup_Destinations { public function option_defaults(): array { $default = []; $default['emailaddress'] = sanitize_email(get_bloginfo('admin_email')); $default['emailefilesize'] = 20; $default['emailsndemail'] = sanitize_email(get_bloginfo('admin_email')); $default['emailsndemailname'] = 'BackWPup ' . get_bloginfo('name'); $default['emailmethod'] = ''; $default['emailsendmail'] = ini_get('sendmail_path'); $default['emailhost'] = $_SERVER['SERVER_NAME'] ?? ''; $default['emailhostport'] = 25; $default['emailsecure'] = ''; $default['emailuser'] = ''; $default['emailpass'] = ''; return $default; } public function edit_tab(int $jobid): void { ?> <h3 class="title"><?php esc_html_e('Email address', 'backwpup'); ?></h3> <table class="form-table"> <tr> <th scope="row"><label for="emailaddress"><?php esc_html_e('To email address (separate with commas for multiple addresses)', 'backwpup'); ?></label> </th> <td> <input name="emailaddress" id="emailaddress" type="text" value="<?php echo esc_attr(BackWPup_Option::get($jobid, 'emailaddress')); ?>" class="regular-text"/> </td> </tr> <tr> <th scope="row"><label for="sendemailtest"><?php esc_html_e('Send test email', 'backwpup'); ?></label> </th> <td> <button id="sendemailtest" class="button secondary"><?php esc_html_e('Send test email', 'backwpup'); ?></button> </td> </tr> </table> <h3 class="title"><?php esc_html_e('Send email settings', 'backwpup'); ?></h3> <table class="form-table"> <tr> <th scope="row"><label for="idemailefilesize"><?php esc_html_e('Maximum file size', 'backwpup'); ?></label></th> <td> <input id="idemailefilesize" name="emailefilesize" type="number" min="0" step="1" value="<?php echo esc_attr(BackWPup_Option::get($jobid, 'emailefilesize')); ?>" class="small-text"/><?php esc_html_e('MB', 'backwpup'); ?> <p class="description"> <?php esc_html_e( 'Maximum file size to be included in an email. 0 = unlimited', 'backwpup' ); ?><br/> <strong><?php esc_html_e('Note', 'backwpup'); ?></strong>: <?php esc_html_e( 'Every email provider has different allowed attachment file sizes. If the backup archive exceeds this limit, the email will not be sent.', 'backwpup' ); ?><br/> <?php esc_html_e('The recommended value is 20 MB.', 'backwpup'); ?> </p> </td> </tr> <tr> <th scope="row"><label for="emailsndemail"><?php esc_html_e('From email address', 'backwpup'); ?></label></th> <td> <input name="emailsndemail" type="text" id="emailsndemail" value="<?php echo esc_attr(BackWPup_Option::get($jobid, 'emailsndemail')); ?>" class="regular-text"/> </td> </tr> <tr> <th scope="row"><label for="emailsndemailname"><?php esc_html_e('From name', 'backwpup'); ?></label> </th> <td> <input name="emailsndemailname" type="text" id="emailsndemailname" value="<?php echo esc_attr(BackWPup_Option::get($jobid, 'emailsndemailname')); ?>" class="regular-text"/> </td> </tr> <tr> <th scope="row"><label for="emailmethod"><?php esc_html_e('Sending method', 'backwpup'); ?></label> </th> <td> <select id="emailmethod" name="emailmethod"> <?php echo '<option value=""' . selected('', BackWPup_Option::get($jobid, 'emailmethod'), false) . '>' . esc_html__('Use WordPress settings', 'backwpup') . '</option>'; echo '<option value="mail"' . selected('mail', BackWPup_Option::get($jobid, 'emailmethod'), false) . '>' . esc_html__('PHP: mail()', 'backwpup') . '</option>'; echo '<option value="sendmail"' . selected('sendmail', BackWPup_Option::get($jobid, 'emailmethod'), false) . '>' . esc_html__('Sendmail', 'backwpup') . '</option>'; echo '<option value="smtp"' . selected('smtp', BackWPup_Option::get($jobid, 'emailmethod'), false) . '>' . esc_html__('SMTP', 'backwpup') . '</option>'; ?> </select> </td> </tr> <tr id="emailsendmail" <?php if (BackWPup_Option::get($jobid, 'emailmethod') !== 'sendmail') { echo 'style="display:none;"'; } ?>> <th scope="row"><label for="emailsendmail"><?php esc_html_e('Sendmail path', 'backwpup'); ?></label> </th> <td> <input name="emailsendmail" id="emailsendmail" type="text" value="<?php echo esc_attr(BackWPup_Option::get($jobid, 'emailsendmail')); ?>" class="regular-text code"/> </td> </tr> <tr class="emailsmtp" <?php if (BackWPup_Option::get($jobid, 'emailmethod') !== 'smtp') { echo 'style="display:none;"'; } ?>> <th scope="row"><label for="emailhost"><?php esc_html_e('SMTP host name', 'backwpup'); ?></label></th> <td> <input name="emailhost" id="emailhost" type="text" value="<?php echo esc_attr(BackWPup_Option::get($jobid, 'emailhost')); ?>" class="regular-text code"/> <label for="emailhostport"><?php esc_html_e('Port:', 'backwpup'); ?><input name="emailhostport" id="emailhostport" type="number" step="0" min="1" max="65000" value="<?php echo esc_attr(BackWPup_Option::get($jobid, 'emailhostport')); ?>" class="small-text code"/></label> </td> </tr> <tr class="emailsmtp" <?php if (BackWPup_Option::get($jobid, 'emailmethod') !== 'smtp') { echo 'style="display:none;"'; } ?>> <th scope="row"><label for="emailsecure"><?php esc_html_e('SMTP secure connection', 'backwpup'); ?></label> </th> <td> <select id="emailsecure" name="emailsecure"> <option value=""<?php selected('', BackWPup_Option::get($jobid, 'emailsecure'), true); ?>><?php esc_html_e('none', 'backwpup'); ?></option> <option value="ssl"<?php selected('ssl', BackWPup_Option::get($jobid, 'emailsecure'), true); ?>><?php esc_html_e('SSL', 'backwpup'); ?></option> <option value="tls"<?php selected('tls', BackWPup_Option::get($jobid, 'emailsecure'), true); ?>><?php esc_html_e('TLS', 'backwpup'); ?></option> </select> </td> </tr> <tr class="emailsmtp" <?php if (BackWPup_Option::get($jobid, 'emailmethod') !== 'smtp') { echo 'style="display:none;"'; } ?>> <th scope="row"><label for="emailuser"><?php esc_html_e('SMTP username', 'backwpup'); ?></label></th> <td> <input name="emailuser" id="emailuser" type="text" value="<?php echo esc_attr(BackWPup_Option::get($jobid, 'emailuser')); ?>" class="regular-text" autocomplete="off"/> </td> </tr> <tr class="emailsmtp" <?php if (BackWPup_Option::get($jobid, 'emailmethod') != 'smtp') { echo 'style="display:none;"'; } ?>> <th scope="row"><label for="emailpass"><?php esc_html_e('SMTP password', 'backwpup'); ?></label></th> <td> <input name="emailpass" id="emailpass" type="password" value="<?php echo esc_attr(BackWPup_Encryption::decrypt(BackWPup_Option::get($jobid, 'emailpass'))); ?>" class="regular-text" autocomplete="off"/> </td> </tr> </table> <?php } public function edit_inline_js(): void { ?> <script type="text/javascript"> jQuery( document ).ready( function ( $ ) { $( '#emailmethod' ).change( function () { if ( 'smtp' == $( '#emailmethod' ).val() ) { $( '.emailsmtp' ).show(); $( '#emailsendmail' ).hide(); } else if ( 'sendmail' == $( '#emailmethod' ).val() ) { $( '.emailsmtp' ).hide(); $( '#emailsendmail' ).show(); } else { $( '.emailsmtp' ).hide(); $( '#emailsendmail' ).hide(); } } ); $( '#sendemailtest' ).live( 'click', function () { $( '#sendemailtest' ).after( ' <img id="emailsendtext" src="<?php echo get_admin_url() . 'images/loading.gif'; ?>" width="16" height="16" />' ); var data = { action : 'backwpup_dest_email', emailaddress : $( 'input[name="emailaddress"]' ).val(), emailsndemail : $( 'input[name="emailsndemail"]' ).val(), emailmethod : $( '#emailmethod' ).val(), emailsendmail : $( 'input[name="emailsendmail"]' ).val(), emailsndemailname: $( 'input[name="emailsndemailname"]' ).val(), emailhost : $( 'input[name="emailhost"]' ).val(), emailhostport : $( 'input[name="emailhostport"]' ).val(), emailsecure : $( '#emailsecure' ).val(), emailuser : $( 'input[name="emailuser"]' ).val(), emailpass : $( 'input[name="emailpass"]' ).val(), _ajax_nonce : $( '#backwpupajaxnonce' ).val() }; $.post( ajaxurl, data, function ( response ) { $( '#emailsendtext' ).replaceWith( response ); } ); return false; } ); } ); </script> <?php } public function edit_form_post_save(int $jobid): void { BackWPup_Option::update($jobid, 'emailaddress', isset($_POST['emailaddress']) ? implode(', ', $this->get_email_array($_POST['emailaddress'])) : ''); BackWPup_Option::update($jobid, 'emailefilesize', !empty($_POST['emailefilesize']) ? absint($_POST['emailefilesize']) : 0); BackWPup_Option::update($jobid, 'emailsndemail', sanitize_email($_POST['emailsndemail'])); BackWPup_Option::update($jobid, 'emailmethod', ($_POST['emailmethod'] === '' || $_POST['emailmethod'] === 'mail' || $_POST['emailmethod'] === 'sendmail' || $_POST['emailmethod'] === 'smtp') ? $_POST['emailmethod'] : ''); BackWPup_Option::update($jobid, 'emailsendmail', sanitize_text_field($_POST['emailsendmail'])); BackWPup_Option::update($jobid, 'emailsndemailname', sanitize_text_field($_POST['emailsndemailname'])); BackWPup_Option::update($jobid, 'emailhost', sanitize_text_field($_POST['emailhost'])); BackWPup_Option::update($jobid, 'emailhostport', absint($_POST['emailhostport'])); BackWPup_Option::update($jobid, 'emailsecure', ($_POST['emailsecure'] === 'ssl' || $_POST['emailsecure'] === 'tls') ? $_POST['emailsecure'] : ''); BackWPup_Option::update($jobid, 'emailuser', sanitize_text_field($_POST['emailuser'])); BackWPup_Option::update($jobid, 'emailpass', BackWPup_Encryption::encrypt($_POST['emailpass'])); } public function job_run_archive(BackWPup_Job $job_object): bool { $job_object->substeps_todo = 1; $job_object->log(sprintf(__('%d. Try to send backup with email …', 'backwpup'), $job_object->steps_data[$job_object->step_working]['STEP_TRY']), E_USER_NOTICE); //check file Size if (!empty($job_object->job['emailefilesize'])) { if ($job_object->backup_filesize > $job_object->job['emailefilesize'] * 1024 * 1024) { $job_object->log(__('Backup archive too big to be sent by email!', 'backwpup'), E_USER_ERROR); $job_object->substeps_done = 1; return true; } } $job_object->log(sprintf(__('Sending email to %s…', 'backwpup'), $job_object->job['emailaddress']), E_USER_NOTICE); //get mail settings $emailmethod = 'mail'; $emailsendmail = ''; $emailhost = ''; $emailhostport = ''; $emailsecure = ''; $emailuser = ''; $emailpass = ''; if (empty($job_object->job['emailmethod'])) { //do so if i'm the wp_mail to get the settings $phpmailer = $this->getPhpMailer(); //only if PHPMailer really used if (is_object($phpmailer)) { do_action_ref_array('phpmailer_init', [&$phpmailer]); //get settings from PHPMailer $emailmethod = $phpmailer->Mailer; $emailsendmail = $phpmailer->Sendmail; $emailhost = $phpmailer->Host; $emailhostport = $phpmailer->Port; $emailsecure = $phpmailer->SMTPSecure; $emailuser = $phpmailer->Username; $emailpass = $phpmailer->Password; } } else { $emailmethod = $job_object->job['emailmethod']; $emailsendmail = $job_object->job['emailsendmail']; $emailhost = $job_object->job['emailhost']; $emailhostport = $job_object->job['emailhostport']; $emailsecure = $job_object->job['emailsecure']; $emailuser = $job_object->job['emailuser']; $emailpass = BackWPup_Encryption::decrypt($job_object->job['emailpass']); } //Generate mail with Swift Mailer if (!class_exists(\Swift::class, false)) { require BackWPup::get_plugin_data('plugindir') . '/vendor/SwiftMailer/swift_required.php'; } $mbEncoding = null; if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { $mbEncoding = mb_internal_encoding(); mb_internal_encoding('ASCII'); } $result = null; try { //Set Temp dir for mailing Swift_Preferences::getInstance()->setTempDir(untrailingslashit(BackWPup::get_plugin_data('TEMP')))->setCacheType('disk'); // Create the Transport if ($emailmethod == 'smtp') { $transport = Swift_SmtpTransport::newInstance($emailhost, $emailhostport); if ($emailuser) { $transport->setUsername($emailuser); $transport->setPassword($emailpass); } if ($emailsecure == 'ssl') { $transport->setEncryption('ssl'); } if ($emailsecure == 'tls') { $transport->setEncryption('tls'); } } elseif ($emailmethod == 'sendmail') { $transport = Swift_SendmailTransport::newInstance($emailsendmail); } else { $job_object->need_free_memory($job_object->backup_filesize * 8); $transport = Swift_MailTransport::newInstance(); } // Create the Mailer using your created Transport $emailer = Swift_Mailer::newInstance($transport); // Create a message $message = Swift_Message::newInstance(sprintf(__('BackWPup archive from %1$s: %2$s', 'backwpup'), date_i18n('d-M-Y H:i', $job_object->start_time, true), esc_attr($job_object->job['name']))); $message->setFrom([$job_object->job['emailsndemail'] => $job_object->job['emailsndemailname']]); $message->setTo($this->get_email_array($job_object->job['emailaddress'])); $message->setBody(sprintf(__('Backup archive: %s', 'backwpup'), $job_object->backup_file), 'text/plain', strtolower(get_bloginfo('charset'))); $message->attach(Swift_Attachment::fromPath($job_object->backup_folder . $job_object->backup_file, MimeTypeExtractor::fromFilePath($job_object->backup_folder . $job_object->backup_file))); // Send the message $result = $emailer->send($message); } catch (Exception $e) { $job_object->log('Swift Mailer: ' . $e->getMessage(), E_USER_ERROR); } if (isset($mbEncoding)) { mb_internal_encoding($mbEncoding); } if (!isset($result) || !$result) { $job_object->log(__('Error while sending email!', 'backwpup'), E_USER_ERROR); return false; } $job_object->substeps_done = 1; $job_object->log(__('Email sent.', 'backwpup'), E_USER_NOTICE); return true; } public function can_run(array $job_settings): bool { if (empty($job_settings['emailaddress'])) { return false; } return !($job_settings['backuptype'] != 'archive'); } /** * sends test mail. */ public function edit_ajax(): void { check_ajax_referer('backwpup_ajax_nonce'); //get mail settings $emailmethod = 'mail'; $emailsendmail = ''; $emailhost = ''; $emailhostport = ''; $emailsecure = ''; $emailuser = ''; $emailpass = ''; if (empty($_POST['emailmethod'])) { //do so if i'm the wp_mail to get the settings $phpmailer = $this->getPhpMailer(); //only if PHPMailer really used if (is_object($phpmailer)) { do_action_ref_array('phpmailer_init', [&$phpmailer]); //get settings from PHPMailer $emailmethod = $phpmailer->Mailer; $emailsendmail = $phpmailer->Sendmail; $emailhost = $phpmailer->Host; $emailhostport = $phpmailer->Port; $emailsecure = $phpmailer->SMTPSecure; $emailuser = $phpmailer->Username; $emailpass = $phpmailer->Password; } } else { $emailmethod = sanitize_text_field($_POST['emailmethod']); $emailsendmail = sanitize_email($_POST['emailsendmail']); $emailhost = sanitize_text_field($_POST['emailhost']); $emailhostport = absint($_POST['emailhostport']); $emailsecure = sanitize_text_field($_POST['emailsecure']); $emailuser = sanitize_text_field($_POST['emailuser']); $emailpass = BackWPup_Encryption::decrypt($_POST['emailpass']); } //Generate mail with Swift Mailer if (!class_exists(\Swift::class, false)) { require BackWPup::get_plugin_data('plugindir') . '/vendor/SwiftMailer/swift_required.php'; } $mbEncoding = null; if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { $mbEncoding = mb_internal_encoding(); mb_internal_encoding('ASCII'); } $result = null; try { // Create the Transport if ($emailmethod == 'smtp') { $transport = Swift_SmtpTransport::newInstance($emailhost, $emailhostport); if ($emailuser) { $transport->setUsername($emailuser); $transport->setPassword($emailpass); } if ($emailsecure == 'ssl') { $transport->setEncryption('ssl'); } if ($emailsecure == 'tls') { $transport->setEncryption('tls'); } } elseif ($emailmethod == 'sendmail') { $transport = Swift_SendmailTransport::newInstance($emailsendmail); } else { $transport = Swift_MailTransport::newInstance(); } // Create the Mailer using your created Transport $emailer = Swift_Mailer::newInstance($transport); // Create a message $message = Swift_Message::newInstance(__('BackWPup archive sending TEST Message', 'backwpup')); $message->setFrom([$_POST['emailsndemail'] => sanitize_email($_POST['emailsndemailname'])]); $message->setTo($this->get_email_array($_POST['emailaddress'])); $message->setBody(__('If this message reaches your inbox, sending backup archives via email should work for you.', 'backwpup')); // Send the message $result = $emailer->send($message); } catch (Exception $e) { echo '<span id="emailsendtext" class="bwu-message-error">Swift Mailer: ' . $e->getMessage() . '</span>'; } if (isset($mbEncoding)) { mb_internal_encoding($mbEncoding); } if (!isset($result) || !$result) { echo '<span id="emailsendtext" class="bwu-message-error">' . esc_html__('Error while sending email!', 'backwpup') . '</span>'; } else { echo '<span id="emailsendtext" class="bwu-message-success">' . esc_html__('Email sent.', 'backwpup') . '</span>'; } exit(); } /** * Get an array of emails from comma-separated string. */ private function get_email_array(string $emailString): array { $emails = explode(',', sanitize_text_field($emailString)); foreach ($emails as $key => $email) { $emails[$key] = sanitize_email(trim($email)); if (!is_email($emails[$key])) { unset($emails[$key]); } } return $emails; } /** * @return PHPMailer|\PHPMailer\PHPMailer\PHPMailer */ private function getPhpMailer() { global $phpmailer, $wp_version; if (!is_object($phpmailer) || !$phpmailer instanceof PHPMailer) { if (version_compare($wp_version, '5.5', '>=')) { require_once ABSPATH . WPINC . '/PHPMailer/PHPMailer.php'; require_once ABSPATH . WPINC . '/PHPMailer/Exception.php'; return new PHPMailer\PHPMailer\PHPMailer(); } require_once ABSPATH . WPINC . '/class-phpmailer.php'; require_once ABSPATH . WPINC . '/class-smtp.php'; return new PHPMailer(true); } return $phpmailer; } }