diff options
author | yehudah <yehudah@b8457f37-d9ea-0310-8a92-e5e31aec5664> | 2019-02-17 20:56:03 +0000 |
---|---|---|
committer | yehudah <yehudah@b8457f37-d9ea-0310-8a92-e5e31aec5664> | 2019-02-17 20:56:03 +0000 |
commit | f627e0d82c18a1ed60eead38ce38746ded43adc6 (patch) | |
tree | 0a3ef3c2266b717a3880c0c4c6edcdc3aae7c275 | |
parent | a04f57be50a9ce581d8a48acd817d2788958a1dd (diff) | |
download | Post-SMTP-f627e0d82c18a1ed60eead38ce38746ded43adc6.zip |
= 1.9.7 - 2019-02-17
* New: Fallback Feature - Configure a backup SMTP when emails are failing.
* New: WordPress Multisite compability - with global settings.
* New: Email Log capability - give other user cheking the logs.
* Fixed: compatibility with mailster plugin
* Fixed: Mandrill exception bug - Thanks to Niels de Blaauw from Level-Level
-rw-r--r-- | Postman/Postman-Configuration/PostmanConfigurationController.php | 113 | ||||
-rw-r--r-- | Postman/Postman-Configuration/PostmanRegisterConfigurationSettings.php | 6 | ||||
-rw-r--r-- | Postman/Postman-Diagnostic-Test/PostmanDiagnosticTestController.php | 4 | ||||
-rw-r--r-- | Postman/Postman-Email-Log/PostmanEmailLogController.php | 2 | ||||
-rw-r--r-- | Postman/Postman-Email-Log/PostmanEmailLogService.php | 41 | ||||
-rw-r--r-- | Postman/Postman-Mail/PostmanMyMailConnector.php | 44 | ||||
-rw-r--r-- | Postman/Postman-Mail/PostmanSendGridMailEngine.php | 1 | ||||
-rw-r--r-- | Postman/Postman-Mail/mailchimp-mandrill-api-php-da3adc10042e/src/Mandrill.php | 2 | ||||
-rw-r--r-- | Postman/Postman.php | 1 | ||||
-rw-r--r-- | Postman/PostmanAdminController.php | 73 | ||||
-rw-r--r-- | Postman/PostmanInputSanitizer.php | 11 | ||||
-rw-r--r-- | Postman/PostmanInstaller.php | 39 | ||||
-rw-r--r-- | Postman/PostmanOptions.php | 164 | ||||
-rw-r--r-- | Postman/PostmanUtils.php | 5 | ||||
-rw-r--r-- | Postman/PostmanViewController.php | 4 | ||||
-rw-r--r-- | Postman/PostmanWpMail.php | 27 | ||||
-rw-r--r-- | postman-smtp.php | 12 | ||||
-rw-r--r-- | readme.txt | 20 |
18 files changed, 507 insertions, 62 deletions
diff --git a/Postman/Postman-Configuration/PostmanConfigurationController.php b/Postman/Postman-Configuration/PostmanConfigurationController.php index 208fa0b..1e5b0a3 100644 --- a/Postman/Postman-Configuration/PostmanConfigurationController.php +++ b/Postman/Postman-Configuration/PostmanConfigurationController.php @@ -197,14 +197,18 @@ class PostmanConfigurationController { PostmanViewController::outputChildPageHeader( __( 'Settings', Postman::TEXT_DOMAIN ), 'advanced_config' ); print '<div id="config_tabs"><ul>'; print sprintf( '<li><a href="#account_config">%s</a></li>', __( 'Account', Postman::TEXT_DOMAIN ) ); + print sprintf( '<li><a href="#fallback">%s</a></li>', __( 'Fallback', Postman::TEXT_DOMAIN ) ); print sprintf( '<li><a href="#message_config">%s</a></li>', __( 'Message', Postman::TEXT_DOMAIN ) ); print sprintf( '<li><a href="#logging_config">%s</a></li>', __( 'Logging', Postman::TEXT_DOMAIN ) ); print sprintf( '<li><a href="#advanced_options_config">%s</a></li>', __( 'Advanced', Postman::TEXT_DOMAIN ) ); print sprintf( '<li><a href="#notifications">%s</a></li>', __( 'Notifications', Postman::TEXT_DOMAIN ) ); print '</ul>'; + print '<form method="post" action="options.php">'; // This prints out all hidden setting fields settings_fields( PostmanAdminController::SETTINGS_GROUP_NAME ); + + // account_config print '<section id="account_config">'; if ( sizeof( PostmanTransportRegistry::getInstance()->getTransports() ) > 1 ) { do_settings_sections( 'transport_options' ); @@ -230,6 +234,115 @@ class PostmanConfigurationController { do_settings_sections( PostmanMailgunTransport::MAILGUN_AUTH_OPTIONS ); print '</div>'; print '</section>'; + // end account config + ?> + + <!-- Fallback Start --> + <section id="fallback"> + <h2><?php esc_html_e( 'Failed emails fallback', Postman::TEXT_DOMAIN ); ?></h2> + <p><?php esc_html_e( 'By enable this option, if your email is fail to send Post SMTP will try to use the SMTP service you define here.', Postman::TEXT_DOMAIN ); ?></p> + <table class="form-table"> + <tr valign=""> + <th scope="row"><?php _e( 'Use Fallback?', Postman::TEXT_DOMAIN ); ?></th> + <td> + <label> + <input name="postman_options[<?php echo PostmanOptions::FALLBACK_SMTP_ENABLED; ?>]" type="radio" + value="no"<?php echo checked( $this->options->getFallbackIsEnabled(), 'no' ); ?>> + <?php _e( 'No', Postman::TEXT_DOMAIN ); ?> + </label> + + <label> + <?php $checked = checked( $this->options->getFallbackIsEnabled(), 'yes', false ); ?> + <input name="postman_options[<?php echo PostmanOptions::FALLBACK_SMTP_ENABLED; ?>]" type="radio" + value="yes"<?php echo checked( $this->options->getFallbackIsEnabled(), 'yes' ); ?>> + <?php _e( 'Yes', Postman::TEXT_DOMAIN ); ?> + </label> + </td> + </tr> + + <tr> + <th scope="row"><?php _e('Outgoing Mail Server', Postman::TEXT_DOMAIN ); ?></th> + <?php $host = $this->options->getFallbackHostname(); ?> + <td> + <input type="text" id="fallback-smtp-host" name="postman_options[<?php echo PostmanOptions::FALLBACK_SMTP_HOSTNAME; ?>]" + value="<?php echo $host; ?>" placeholder="Example: smtp.host.com"> + </td> + </tr> + + <tr> + <th scope="row"><?php _e('Mail Server Port', Postman::TEXT_DOMAIN ); ?></th> + <?php $port = $this->options->getFallbackPort(); ?> + <td> + <input type="number" id="fallback-smtp-port" name="postman_options[<?php echo PostmanOptions::FALLBACK_SMTP_PORT; ?>]" + value="<?php echo $port; ?>" placeholder="Example: 587"> + </td> + </tr> + + <tr> + <th scope="row"><?php _e('Security', Postman::TEXT_DOMAIN ); ?></th> + <?php + $security_options = array( + 'none' => __( 'None', Postman::TEXT_DOMAIN ), + 'ssl' => __( 'SSL', Postman::TEXT_DOMAIN ), + 'tls' => __( 'TLS', Postman::TEXT_DOMAIN ), + ); + ?> + <td> + <select id="fallback-smtp-security" name="postman_options[<?php echo PostmanOptions::FALLBACK_SMTP_SECURITY; ?>]"> + <?php + foreach ( $security_options as $key => $label ) { + $selected = selected( $this->options->getFallbackSecurity(), $key,false ); + ?> + <option value="<?php echo $key; ?>"<?php echo $selected; ?>><?php echo $label; ?></option> + <?php + } + ?> + </select> + </td> + </tr> + + <tr valign=""> + <th scope="row"><?php _e( 'Use SMTP Authentication?', Postman::TEXT_DOMAIN ); ?></th> + <td> + <label> + <input name="postman_options[<?php echo PostmanOptions::FALLBACK_SMTP_USE_AUTH; ?>]" + type="radio" value="none"<?php checked( $this->options->getFallbackAuth(), 'none' ); ?>> + <?php _e( 'No', Postman::TEXT_DOMAIN ); ?> + </label> + + <label> + <input name="postman_options[<?php echo PostmanOptions::FALLBACK_SMTP_USE_AUTH; ?>]" + type="radio" value="login"<?php checked( $this->options->getFallbackAuth(), 'login' ); ?>> + <?php _e( 'Yes', Postman::TEXT_DOMAIN ); ?> + </label> + </td> + </tr> + + <tr> + <th scope="row"><?php _e('User name', Postman::TEXT_DOMAIN ); ?></th> + <td> + <input type="text" id="fallback-smtp-username" + value="<?php echo $this->options->getFallbackUsername(); ?>" + name="postman_options[<?php echo PostmanOptions::FALLBACK_SMTP_USERNAME; ?>]" + > + </td> + </tr> + + <tr> + <th scope="row"><?php _e('Password', Postman::TEXT_DOMAIN ); ?></th> + <td> + <input type="password" id="fallback-smtp-password" + value="<?php echo PostmanUtils::obfuscatePassword( $this->options->getFallbackPassword() ); ?>" + name="postman_options[<?php echo PostmanOptions::FALLBACK_SMTP_PASSWORD; ?>]" + > + </td> + </tr> + + </table> + </section> + <!-- Fallback End --> + + <?php print '<section id="message_config">'; do_settings_sections( PostmanAdminController::MESSAGE_SENDER_OPTIONS ); do_settings_sections( PostmanAdminController::MESSAGE_FROM_OPTIONS ); diff --git a/Postman/Postman-Configuration/PostmanRegisterConfigurationSettings.php b/Postman/Postman-Configuration/PostmanRegisterConfigurationSettings.php index 6102d10..7882d43 100644 --- a/Postman/Postman-Configuration/PostmanRegisterConfigurationSettings.php +++ b/Postman/Postman-Configuration/PostmanRegisterConfigurationSettings.php @@ -21,7 +21,7 @@ class PostmanSettingsRegistry { // only administrators should be able to trigger this if ( PostmanUtils::isAdmin() ) { - $sanitizer = new PostmanInputSanitizer(); + $sanitizer = new PostmanInputSanitizer(); register_setting( PostmanAdminController::SETTINGS_GROUP_NAME, PostmanOptions::POSTMAN_OPTIONS, array( $sanitizer, 'sanitize', @@ -101,6 +101,8 @@ class PostmanSettingsRegistry { 'headers_callback', ), PostmanAdminController::MESSAGE_HEADERS_OPTIONS, PostmanAdminController::MESSAGE_HEADERS_SECTION ); + // Fallback + // the Email Validation section add_settings_section( PostmanAdminController::EMAIL_VALIDATION_SECTION, __( 'Validation', Postman::TEXT_DOMAIN ), array( $this, @@ -431,7 +433,7 @@ class PostmanSettingsRegistry { } public function notification_chrome_uid_callback() { - printf( '<input type="password" id="input_%2$s" class="input_%2$s" name="%1$s[%2$s]" value="%3$s" />', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::NOTIFICATION_CHROME_UID, $this->options->getNotificationChromeUid() ); + printf( '<input type="password" id="input_%2$s" class="input_%2$s" name="%1$s[%2$s]" value="%3$s" />', PostmanOptions::POSTMAN_OPTIONS, PostmanOptions::NOTIFICATION_CHROME_UID, PostmanUtils::obfuscatePassword( $this->options->getNotificationChromeUid() ) ); } public function pushover_user_callback() { diff --git a/Postman/Postman-Diagnostic-Test/PostmanDiagnosticTestController.php b/Postman/Postman-Diagnostic-Test/PostmanDiagnosticTestController.php index ad5fa84..c526113 100644 --- a/Postman/Postman-Diagnostic-Test/PostmanDiagnosticTestController.php +++ b/Postman/Postman-Diagnostic-Test/PostmanDiagnosticTestController.php @@ -102,9 +102,9 @@ class PostmanDiagnosticTestController { printf( '<h4>%s</h4>', __( 'Are you having issues with Postman?', Postman::TEXT_DOMAIN ) ); /* translators: where %1$s and %2$s are the URLs to the Troubleshooting and Support Forums on WordPress.org */ - printf( '<p style="margin:0 10px">%s</p>', sprintf( __( 'Please check the <a href="%1$s">troubleshooting and error messages</a> page and the <a href="%2$s">support forum</a>.', Postman::TEXT_DOMAIN ), 'https://wordpress.org/plugins/post-smtp/other_notes/', 'https://wordpress.org/support/plugin/postman-smtp' ) ); + printf( '<p style="margin:0 10px">%s</p>', sprintf( __( 'Please check the <a href="%1$s">troubleshooting and error messages</a> page and the <a href="%2$s">support forum</a>.', Postman::TEXT_DOMAIN ), 'https://wordpress.org/plugins/post-smtp/other_notes/', 'https://wordpress.org/support/plugin/post-smtp' ) ); printf( '<h4>%s</h4>', __( 'Diagnostic Test', Postman::TEXT_DOMAIN ) ); - printf( '<p style="margin:0 10px">%s</p><br/>', sprintf( __( 'If you write for help, please include the following:', Postman::TEXT_DOMAIN ), 'https://wordpress.org/plugins/post-smtp/other_notes/', 'https://wordpress.org/support/plugin/postman-smtp' ) ); + printf( '<p style="margin:0 10px">%s</p><br/>', sprintf( __( 'If you write for help, please include the following:', Postman::TEXT_DOMAIN ), 'https://wordpress.org/plugins/post-smtp/other_notes/', 'https://wordpress.org/support/plugin/post-smtp' ) ); printf( '<textarea readonly="readonly" id="diagnostic-text" cols="80" rows="15">%s</textarea>', _x( 'Checking..', 'The "please wait" message', Postman::TEXT_DOMAIN ) ); print '</div>'; } diff --git a/Postman/Postman-Email-Log/PostmanEmailLogController.php b/Postman/Postman-Email-Log/PostmanEmailLogController.php index d1f0057..be08232 100644 --- a/Postman/Postman-Email-Log/PostmanEmailLogController.php +++ b/Postman/Postman-Email-Log/PostmanEmailLogController.php @@ -302,7 +302,7 @@ class PostmanEmailLogController { $pageTitle = sprintf( __( '%s Email Log', Postman::TEXT_DOMAIN ), __( 'Post SMTP', Postman::TEXT_DOMAIN ) ); $pluginName = _x( 'Email Log', 'The log of Emails that have been delivered', Postman::TEXT_DOMAIN ); - $page = add_submenu_page( PostmanViewController::POSTMAN_MENU_SLUG, $pageTitle, $pluginName, 'read_private_posts', 'postman_email_log', array( $this, 'postman_render_email_page' ) ); + $page = add_submenu_page( PostmanViewController::POSTMAN_MENU_SLUG, $pageTitle, $pluginName, Postman::MANAGE_POSTMAN_CAPABILITY_LOGS, 'postman_email_log', array( $this, 'postman_render_email_page' ) ); // When the plugin options page is loaded, also load the stylesheet add_action( 'admin_print_styles-' . $page, array( diff --git a/Postman/Postman-Email-Log/PostmanEmailLogService.php b/Postman/Postman-Email-Log/PostmanEmailLogService.php index 103dcc1..dd51974 100644 --- a/Postman/Postman-Email-Log/PostmanEmailLogService.php +++ b/Postman/Postman-Email-Log/PostmanEmailLogService.php @@ -16,6 +16,10 @@ if ( ! class_exists( 'PostmanEmailLog' ) ) { public $originalSubject; public $originalMessage; public $originalHeaders; + + public function setStatusMessage( $message ) { + $this->statusMessage .= $message; + } } } @@ -95,7 +99,7 @@ if ( ! class_exists( 'PostmanEmailLogService' ) ) { public function writeFailureLog( PostmanEmailLog $log, PostmanMessage $message = null, $transcript, PostmanModuleTransport $transport, $statusMessage ) { if ( PostmanOptions::getInstance()->isMailLoggingEnabled() ) { $this->createLog( $log, $message, $transcript, $statusMessage, false, $transport ); - $this->writeToEmailLog( $log ); + $this->writeToEmailLog( $log,$message ); } } @@ -104,21 +108,43 @@ if ( ! class_exists( 'PostmanEmailLogService' ) ) { * * From http://wordpress.stackexchange.com/questions/8569/wp-insert-post-php-function-and-custom-fields */ - private function writeToEmailLog( PostmanEmailLog $log ) { + private function writeToEmailLog( PostmanEmailLog $log, PostmanMessage $message = null ) { + + $options = PostmanOptions::getInstance(); + + $this->checkForLogErrors( $log ,$message ); + $new_status = $log->statusMessage; + + if ( $options->is_fallback && empty( $log->statusMessage ) ) { + $new_status = 'Sent ( ** Fallback ** )'; + } + + if ( $options->is_fallback && ! empty( $log->statusMessage ) ) { + $new_status = '( ** Fallback ** ) ' . $log->statusMessage; + } - $this->checkForLogErrors( $log ); // nothing here is sanitized as WordPress should take care of // making database writes safe $my_post = array( 'post_type' => PostmanEmailLogPostType::POSTMAN_CUSTOM_POST_TYPE_SLUG, 'post_title' => $log->subject, 'post_content' => $log->body, - 'post_excerpt' => $log->statusMessage, + 'post_excerpt' => $new_status, 'post_status' => PostmanEmailLogService::POSTMAN_CUSTOM_POST_STATUS_PRIVATE, ); // Insert the post into the database (WordPress gives us the Post ID) - $post_id = wp_insert_post( $my_post ); + $post_id = wp_insert_post( $my_post, true ); + + if ( is_wp_error( $post_id ) ) { + add_action( 'admin_notices', function() use( $post_id ) { + $class = 'notice notice-error'; + $message = $post_id->get_error_message(); + + printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), esc_html( $message ) ); + }); + } + $this->logger->debug( sprintf( 'Saved message #%s to the database', $post_id ) ); $this->logger->trace( $log ); @@ -155,7 +181,7 @@ if ( ! class_exists( 'PostmanEmailLogService' ) ) { $purger->truncateLogItems( PostmanOptions::getInstance()->getMailLoggingMaxEntries() ); } - private function checkForLogErrors( PostmanEmailLog $log ) { + private function checkForLogErrors( PostmanEmailLog $log, $postMessage ) { $message = __( 'You getting this message because an error detected while delivered your email.', Postman::TEXT_DOMAIN ); $message .= "\r\n" . sprintf( __( 'For the domain: %1$s',Postman::TEXT_DOMAIN ), get_bloginfo('url') ); $message .= "\r\n" . __( 'The log to paste when you open a support issue:', Postman::TEXT_DOMAIN ) . "\r\n"; @@ -180,7 +206,8 @@ if ( ! class_exists( 'PostmanEmailLogService' ) ) { $notifyer = new PostmanMailNotify; } - $notify = new PostmanNotify( $notifyer, $message ); + // Notifications + $notify = new PostmanNotify( $notifyer ); $notify->send($message, $log); $notify->push_to_chrome($log->statusMessage); } diff --git a/Postman/Postman-Mail/PostmanMyMailConnector.php b/Postman/Postman-Mail/PostmanMyMailConnector.php index 151deed..e08aa02 100644 --- a/Postman/Postman-Mail/PostmanMyMailConnector.php +++ b/Postman/Postman-Mail/PostmanMyMailConnector.php @@ -1,6 +1,6 @@ <?php -define( 'MYMAIL_POSTMAN_REQUIRED_VERSION', '2.0' ); -define( 'MYMAIL_POSTMAN_ID', 'postman' ); +define( 'MAILSTER_POSTMAN_REQUIRED_VERSION', '2.0' ); +define( 'MAILSTER_POSTMAN_ID', 'postman' ); /** * Enables MyMail to deliver via Postman @@ -36,36 +36,36 @@ if ( ! class_exists( 'PostmanMyMailConnector' ) ) { * Initialize the Connector */ public function init() { - if ( ! defined( 'MYMAIL_VERSION' ) || version_compare( MYMAIL_POSTMAN_REQUIRED_VERSION, MYMAIL_VERSION, '>' ) ) { + if ( ! defined( 'MAILSTER_VERSION' ) || version_compare( MAILSTER_POSTMAN_REQUIRED_VERSION, MAILSTER_VERSION, '>' ) ) { // no-op } else { // create an instance of the Logger $this->logger = new PostmanLogger( get_class( $this ) ); $this->logger->debug( 'Starting' ); - add_filter( 'mymail_delivery_methods', array( + add_filter( 'mailster_delivery_methods', array( &$this, 'delivery_method', ) ); - add_action( 'mymail_deliverymethod_tab_postman', array( + add_action( 'mailster_deliverymethod_tab_postman', array( &$this, 'deliverytab', ) ); - if ( mymail_option( 'deliverymethod' ) == MYMAIL_POSTMAN_ID ) { - add_action( 'mymail_initsend', array( + if ( mailster_option( 'deliverymethod' ) == MAILSTER_POSTMAN_ID ) { + add_action( 'mailster_initsend', array( &$this, 'initsend', ) ); - add_action( 'mymail_presend', array( + add_action( 'mailster_presend', array( &$this, 'presend', ) ); - add_action( 'mymail_dosend', array( + add_action( 'mailster_dosend', array( &$this, 'dosend', ) ); - add_action( 'MYMAIL_POSTMAN_cron', array( + add_action( 'MAILSTER_POSTMAN_cron', array( &$this, 'reset', ) ); @@ -76,7 +76,7 @@ if ( ! class_exists( 'PostmanMyMailConnector' ) ) { /** * initsend function. * - * uses mymail_initsend hook to set initial settings + * uses mailster_initsend hook to set initial settings * * @access public * @param mixed $mailobject @@ -91,7 +91,7 @@ if ( ! class_exists( 'PostmanMyMailConnector' ) ) { /** * presend function. * - * uses the mymail_presend hook to apply setttings before each mail + * uses the mailster_presend hook to apply setttings before each mail * * @access public * @param mixed $mailobject @@ -110,7 +110,7 @@ if ( ! class_exists( 'PostmanMyMailConnector' ) ) { /** * dosend function. * - * uses the mymail_dosend hook and triggers the send + * uses the mailster_dosend hook and triggers the send * * @access public * @param mixed $mailobject @@ -158,8 +158,8 @@ if ( ! class_exists( 'PostmanMyMailConnector' ) ) { * @return array */ public function reset() { - update_option( '_transient__mymail_send_period_timeout', false ); - update_option( '_transient__mymail_send_period', 0 ); + update_option( '_transient__mailster_send_period_timeout', false ); + update_option( '_transient__mailster_send_period', 0 ); } /** @@ -172,7 +172,7 @@ if ( ! class_exists( 'PostmanMyMailConnector' ) ) { * @return void */ public function delivery_method( $delivery_methods ) { - $delivery_methods [ MYMAIL_POSTMAN_ID ] = __( 'Postman SMTP', Postman::TEXT_DOMAIN ); + $delivery_methods [ MAILSTER_POSTMAN_ID ] = __( 'Postman SMTP', Postman::TEXT_DOMAIN ); return $delivery_methods; } @@ -195,8 +195,8 @@ if ( ! class_exists( 'PostmanMyMailConnector' ) ) { * @return void */ public function activate() { - if ( defined( 'MYMAIL_VERSION' ) && version_compare( MYMAIL_POSTMAN_REQUIRED_VERSION, MYMAIL_VERSION, '<=' ) ) { - mymail_notice( sprintf( __( 'MyMail: Change the delivery method in the %s!', Postman::TEXT_DOMAIN ), sprintf( '<a href="options-general.php?page=newsletter-settings&mymail_remove_notice=mymail_delivery_method#delivery">%s</a>', __( 'Settings', 'postman-smtp' ) ) ), '', false, 'delivery_method' ); + if ( defined( 'MAILSTER_VERSION' ) && version_compare( MAILSTER_POSTMAN_REQUIRED_VERSION, MAILSTER_VERSION, '<=' ) ) { + mailster_notice( sprintf( __( 'MyMail: Change the delivery method in the %s!', Postman::TEXT_DOMAIN ), sprintf( '<a href="edit.php?post_type=newsletter&page=mailster_settings&mailster_remove_notice=mailster_delivery_method#delivery">%s</a>', __( 'Settings', 'postman-smtp' ) ) ), '', false, 'delivery_method' ); $this->reset(); } } @@ -208,11 +208,11 @@ if ( ! class_exists( 'PostmanMyMailConnector' ) ) { * @return void */ public function deactivate() { - if ( defined( 'MYMAIL_VERSION' ) && function_exists( 'mymail_option' ) && version_compare( MYMAIL_POSTMAN_REQUIRED_VERSION, MYMAIL_VERSION, '<=' ) ) { - if ( mymail_option( 'deliverymethod' ) == MYMAIL_POSTMAN_ID ) { - mymail_update_option( 'deliverymethod', 'simple' ); + if ( defined( 'MAILSTER_VERSION' ) && function_exists( 'mailster_option' ) && version_compare( MAILSTER_POSTMAN_REQUIRED_VERSION, MAILSTER_VERSION, '<=' ) ) { + if ( mailster_option( 'deliverymethod' ) == MAILSTER_POSTMAN_ID ) { + mailster_update_option( 'deliverymethod', 'simple' ); /* Translators where %s is the name of the page */ - mymail_notice( sprintf( __( 'MyMail: Change the delivery method in the %s!', Postman::TEXT_DOMAIN ), sprintf( '<a href="options-general.php?page=newsletter-settings&mymail_remove_notice=mymail_delivery_method#delivery">%s</a>', __( 'Settings', 'postman-smtp' ) ) ), '', false, 'delivery_method' ); + mailster_notice( sprintf( __( 'MyMail: Change the delivery method in the %s!', Postman::TEXT_DOMAIN ), sprintf( '<a href="edit.php?post_type=newsletter&page=mailster_settings&mailster_remove_notice=mailster_delivery_method#delivery">%s</a>', __( 'Settings', 'postman-smtp' ) ) ), '', false, 'delivery_method' ); } } } diff --git a/Postman/Postman-Mail/PostmanSendGridMailEngine.php b/Postman/Postman-Mail/PostmanSendGridMailEngine.php index 06302b0..32cfb9e 100644 --- a/Postman/Postman-Mail/PostmanSendGridMailEngine.php +++ b/Postman/Postman-Mail/PostmanSendGridMailEngine.php @@ -210,6 +210,7 @@ if ( ! class_exists( 'PostmanSendGridMailEngine' ) ) { $this->transcript .= PostmanModuleTransport::RAW_MESSAGE_FOLLOWS; $this->transcript .= print_r( $mail, true ); $this->logger->debug( 'Transcript=' . $this->transcript ); + throw $e; } } diff --git a/Postman/Postman-Mail/mailchimp-mandrill-api-php-da3adc10042e/src/Mandrill.php b/Postman/Postman-Mail/mailchimp-mandrill-api-php-da3adc10042e/src/Mandrill.php index 61ebdca..4d4e675 100644 --- a/Postman/Postman-Mail/mailchimp-mandrill-api-php-da3adc10042e/src/Mandrill.php +++ b/Postman/Postman-Mail/mailchimp-mandrill-api-php-da3adc10042e/src/Mandrill.php @@ -149,7 +149,7 @@ class Postman_Mandrill { public function castError($result) { if($result['status'] !== 'error' || !$result['name']) throw new Postman_Mandrill_Error('We received an unexpected error: ' . json_encode($result)); - $class = (isset(self::$error_map[$result['name']])) ? self::$error_map[$result['name']] : 'Mandrill_Error'; + $class = (isset(self::$error_map[$result['name']])) ? self::$error_map[$result['name']] : 'Postman_Mandrill_Error'; return new $class($result['message'], $result['code']); } diff --git a/Postman/Postman.php b/Postman/Postman.php index ad86b57..b0f70e0 100644 --- a/Postman/Postman.php +++ b/Postman/Postman.php @@ -18,6 +18,7 @@ class Postman { const ADMINISTRATOR_ROLE_NAME = 'administrator'; const MANAGE_POSTMAN_CAPABILITY_NAME = 'manage_postman_smtp'; + const MANAGE_POSTMAN_CAPABILITY_LOGS = 'manage_postman_logs'; const TEXT_DOMAIN = 'post-smtp'; private $logger; diff --git a/Postman/PostmanAdminController.php b/Postman/PostmanAdminController.php index 03a7109..f85e30c 100644 --- a/Postman/PostmanAdminController.php +++ b/Postman/PostmanAdminController.php @@ -136,6 +136,17 @@ if ( ! class_exists( 'PostmanAdminController' ) ) { 'on_init', ) ); + // continue to initialize the AdminController + add_action( 'wpmu_options', array( + $this, + 'wpmu_options', + ) ); + + add_action( 'update_wpmu_options', array( + $this, + 'update_wpmu_options', + ) ); + // Adds "Settings" link to the plugin action page add_filter( 'plugin_action_links_' . plugin_basename( $this->rootPluginFilenameAndPath ), array( $this, @@ -145,6 +156,68 @@ if ( ! class_exists( 'PostmanAdminController' ) ) { require_once( 'PostmanPluginFeedback.php' ); } + + function wpmu_options() { + $options = get_site_option( PostmanOptions::POSTMAN_NETWORK_OPTIONS ); + ?> + <input type="hidden" name="<?php echo PostmanOptions::POSTMAN_NETWORK_OPTIONS; ?>[post_smtp_global_settings]" value="null"> + <input type="hidden" name="<?php echo PostmanOptions::POSTMAN_NETWORK_OPTIONS; ?>[post_smtp_allow_overwrite]" value="null"> + <h2><?php _e( 'Post SMTP Settings', Postman::TEXT_DOMAIN ); ?></h2> + <table id="menu" class="form-table"> + <tr> + <th scope="row"> + <?php _e( 'Enable global settings', Postman::TEXT_DOMAIN ); ?> + </th> + <td> + <?php $checked = checked( $options['post_smtp_global_settings'], 1, false ); ?> + <label for="post-smtp-global-settings"> + <input id="post-smtp-global-settings" type="checkbox" + name="<?php echo PostmanOptions::POSTMAN_NETWORK_OPTIONS; ?>[post_smtp_global_settings]" + value="1" + <?php echo $checked; ?> + > + <p class="description"> + <?php _e('Same settings as the main site/blog (id:1)', Postman::TEXT_DOMAIN ); ?> + </p> + </label> + </td> + </tr> + <tr> + <th scope="row"> + <?php _e( 'Allow user to load saved options', Postman::TEXT_DOMAIN ); ?> + </th> + <td> + <?php $checked = checked( $options['post_smtp_allow_overwrite'], 1, false ); ?> + <label for="post-smtp-allow-overwrite"> + <input id="post-smtp-allow-overwrite" type="checkbox" + name="<?php echo PostmanOptions::POSTMAN_NETWORK_OPTIONS; ?>[post_smtp_allow_overwrite]" + value="1" + <?php echo $checked; ?> + > + </label> + </td> + </tr> + </table> + <?php + } + + function update_wpmu_options() { + $options = get_site_option( PostmanOptions::POSTMAN_NETWORK_OPTIONS ); + if ( isset( $_POST[ PostmanOptions::POSTMAN_NETWORK_OPTIONS ] ) ) { + foreach ( $_POST[ PostmanOptions::POSTMAN_NETWORK_OPTIONS ] as $key => $value ) { + $options[$key] = sanitize_text_field( $value ); + + if ( $value == 'null' ) { + unset( $options[$key] ); + } + } + + update_site_option( PostmanOptions::POSTMAN_NETWORK_OPTIONS, $options ); + } else { + update_site_option( PostmanOptions::POSTMAN_NETWORK_OPTIONS, array() ); + } + } + /** * Functions to execute on the init event * diff --git a/Postman/PostmanInputSanitizer.php b/Postman/PostmanInputSanitizer.php index 9e1fa52..d2b01ae 100644 --- a/Postman/PostmanInputSanitizer.php +++ b/Postman/PostmanInputSanitizer.php @@ -69,14 +69,25 @@ if ( ! class_exists( 'PostmanInputSanitizer' ) ) { $this->sanitizeInt( 'Transcript Size', PostmanOptions::TRANSCRIPT_SIZE, $input, $new_input ); $this->sanitizeString( 'Temporary Directory', PostmanOptions::TEMPORARY_DIRECTORY, $input, $new_input ); + // Notifications $this->sanitizeString( 'Pushover Service', PostmanOptions::NOTIFICATION_SERVICE, $input, $new_input, $this->options->getNotificationService() ); $this->sanitizePassword( 'Pushover Username', PostmanOptions::PUSHOVER_USER, $input, $new_input, $this->options->getPushoverUser() ); $this->sanitizePassword( 'Pushover Token', PostmanOptions::PUSHOVER_TOKEN, $input, $new_input, $this->options->getPushoverToken() ); $this->sanitizePassword( 'Slack Token', PostmanOptions::SLACK_TOKEN, $input, $new_input, $this->options->getSlackToken() ); + // Chrome extension $this->sanitizeString( 'Push Chrome Extension', PostmanOptions::NOTIFICATION_USE_CHROME, $input, $new_input ); $this->sanitizePassword( 'Push Chrome Extension UID', PostmanOptions::NOTIFICATION_CHROME_UID, $input, $new_input, $this->options->getNotificationChromeUid() ); + // Fallback + $this->sanitizeString( 'Use fallback', PostmanOptions::FALLBACK_SMTP_ENABLED, $input, $new_input ); + $this->sanitizeString( 'Fallback hostname', PostmanOptions::FALLBACK_SMTP_HOSTNAME, $input, $new_input ); + $this->sanitizeInt( 'Fallback port', PostmanOptions::FALLBACK_SMTP_PORT, $input, $new_input ); + $this->sanitizeString( 'Fallback security', PostmanOptions::FALLBACK_SMTP_SECURITY, $input, $new_input ); + $this->sanitizeString( 'Fallback auth', PostmanOptions::FALLBACK_SMTP_USE_AUTH, $input, $new_input ); + $this->sanitizeString( 'Fallback username', PostmanOptions::FALLBACK_SMTP_USERNAME, $input, $new_input ); + $this->sanitizePassword( 'Fallback password', PostmanOptions::FALLBACK_SMTP_PASSWORD, $input, $new_input, $this->options->getFallbackPassword() ); + if ( $new_input [ PostmanOptions::CLIENT_ID ] != $this->options->getClientId() || $new_input [ PostmanOptions::CLIENT_SECRET ] != $this->options->getClientSecret() || $new_input [ PostmanOptions::HOSTNAME ] != $this->options->getHostname() ) { $this->logger->debug( 'Recognized new Client ID' ); // the user entered a new client id and we should destroy the stored auth token diff --git a/Postman/PostmanInstaller.php b/Postman/PostmanInstaller.php index 4b2603b..f011251 100644 --- a/Postman/PostmanInstaller.php +++ b/Postman/PostmanInstaller.php @@ -12,6 +12,8 @@ require_once( 'PostmanOptions.php' ); class PostmanInstaller { private $logger; + private $roles; + /** */ public function __construct() { @@ -22,16 +24,39 @@ class PostmanInstaller { * Handle activation of the plugin */ public function activatePostman() { + $options = get_option( PostmanOptions::POSTMAN_OPTIONS ); + $args = array( + 'fallback_smtp_enabled' => 'no', + ); + + if ( empty( $options ) ) { + add_option( 'postman_options', $args ); + + } else { + if ( empty( $options['fallback_smtp_enabled'] ) ) { + $result = array_merge($options, $args); + update_option( PostmanOptions::POSTMAN_OPTIONS, $result ); + } + } + if ( function_exists( 'is_multisite' ) && is_multisite() ) { + +/* $role = get_role( Postman::ADMINISTRATOR_ROLE_NAME ); + $role->add_cap( Postman::MANAGE_POSTMAN_CAPABILITY_NAME ); + $role->add_cap( Postman::MANAGE_POSTMAN_CAPABILITY_LOGS );*/ + + $options['post_smtp_allow_overwrite'] = '1'; + update_site_option( PostmanOptions::POSTMAN_NETWORK_OPTIONS, $options ); + // handle network activation // from https://wordpress.org/support/topic/new-function-wp_get_sites?replies=11 // run the activation function for each blog id $old_blog = get_current_blog_id(); // Get all blog ids - $subsites = wp_get_sites(); + $subsites = get_sites(); foreach ( $subsites as $subsite ) { - $this->logger->trace( 'multisite: switching to blog ' . $subsite ['blog_id'] ); - switch_to_blog( $subsite ['blog_id'] ); + $this->logger->trace( 'multisite: switching to blog ' . $subsite->blog_id ); + switch_to_blog( $subsite->blog_id ); $this->handleOptionUpdates(); $this->addCapability(); } @@ -65,10 +90,10 @@ class PostmanInstaller { // run the deactivation function for each blog id $old_blog = get_current_blog_id(); // Get all blog ids - $subsites = wp_get_sites(); + $subsites = get_sites(); foreach ( $subsites as $subsite ) { - $this->logger->trace( 'multisite: switching to blog ' . $subsite ['blog_id'] ); - switch_to_blog( $subsite ['blog_id'] ); + $this->logger->trace( 'multisite: switching to blog ' . $subsite->blog_id ); + switch_to_blog( $subsite->blog_id ); $this->removeCapability(); } switch_to_blog( $old_blog ); @@ -90,6 +115,7 @@ class PostmanInstaller { // add the custom capability to the administrator role $role = get_role( Postman::ADMINISTRATOR_ROLE_NAME ); $role->add_cap( Postman::MANAGE_POSTMAN_CAPABILITY_NAME ); + $role->add_cap( Postman::MANAGE_POSTMAN_CAPABILITY_LOGS ); } /** @@ -104,6 +130,7 @@ class PostmanInstaller { // remove the custom capability from the administrator role $role = get_role( Postman::ADMINISTRATOR_ROLE_NAME ); $role->remove_cap( Postman::MANAGE_POSTMAN_CAPABILITY_NAME ); + $role->remove_cap( Postman::MANAGE_POSTMAN_CAPABILITY_LOGS ); } /** diff --git a/Postman/PostmanOptions.php b/Postman/PostmanOptions.php index 29ddbc6..971cdd2 100644 --- a/Postman/PostmanOptions.php +++ b/Postman/PostmanOptions.php @@ -54,6 +54,7 @@ if ( ! class_exists( 'PostmanOptions' ) ) { // the option database name const POSTMAN_OPTIONS = 'postman_options'; + const POSTMAN_NETWORK_OPTIONS = 'postman_network_options'; // the options fields const VERSION = 'version'; @@ -112,6 +113,15 @@ if ( ! class_exists( 'PostmanOptions' ) ) { const PUSHOVER_TOKEN = 'pushover_token'; const SLACK_TOKEN = 'slack_token'; + // Fallback + const FALLBACK_SMTP_ENABLED = 'fallback_smtp_enabled'; + const FALLBACK_SMTP_HOSTNAME = 'fallback_smtp_hostname'; + const FALLBACK_SMTP_PORT = 'fallback_smtp_port'; + const FALLBACK_SMTP_SECURITY = 'fallback_smtp_security'; + const FALLBACK_SMTP_USE_AUTH = 'fallback_smtp_use_auth'; + const FALLBACK_SMTP_USERNAME = 'fallback_smtp_username'; + const FALLBACK_SMTP_PASSWORD = 'fallback_smtp_password'; + // defaults const DEFAULT_TRANSCRIPT_SIZE = 128; const DEFAULT_STEALTH_MODE = false; @@ -127,6 +137,8 @@ if ( ! class_exists( 'PostmanOptions' ) ) { const DEFAULT_PLUGIN_MESSAGE_SENDER_EMAIL_ENFORCED = false; const DEFAULT_TEMP_DIRECTORY = '/tmp'; + public $is_fallback = false; + // options data private $options; @@ -145,15 +157,36 @@ if ( ! class_exists( 'PostmanOptions' ) ) { private function __construct() { $this->load(); } + public function save() { - update_option( PostmanOptions::POSTMAN_OPTIONS, $this->options ); + update_option( PostmanOptions::POSTMAN_OPTIONS, $this->options ); } + public function reload() { $this->load(); } + private function load() { - $this->options = get_option( PostmanOptions::POSTMAN_OPTIONS ); + + $options = get_option( self::POSTMAN_OPTIONS ); + + if ( is_multisite() ) { + $network_options = get_site_option( self::POSTMAN_NETWORK_OPTIONS ); + + if ( isset( $network_options['post_smtp_global_settings'] ) ) { + $blog_id = apply_filters( 'post_smtp_default_site_option', 1 ); + } elseif ( $options && isset( $network_options['post_smtp_allow_overwrite'] ) ) { + $blog_id = get_current_blog_id(); + } + + switch_to_blog($blog_id); + $options = get_option( self::POSTMAN_OPTIONS ); + restore_current_blog(); + } + + $this->options = $options; } + public function isNew() { return ! isset( $this->options [ PostmanOptions::TRANSPORT_TYPE ] ); } @@ -231,18 +264,41 @@ if ( ! class_exists( 'PostmanOptions' ) ) { return $this->options [ self::ADDITIONAL_HEADERS ]; } } public function getHostname() { + + if ( $this->is_fallback ) { + return $this->getFallbackHostname(); + } + if ( isset( $this->options [ PostmanOptions::HOSTNAME ] ) ) { return $this->options [ PostmanOptions::HOSTNAME ]; } } + public function getPort() { + + if ( $this->is_fallback ) { + return $this->getFallbackPort(); + } + if ( isset( $this->options [ PostmanOptions::PORT ] ) ) { return $this->options [ PostmanOptions::PORT ]; } } + public function getEnvelopeSender() { + + if ( $this->is_fallback ) { + return $this->getFallbackUsername(); + } + if ( isset( $this->options [ PostmanOptions::ENVELOPE_SENDER ] ) ) { return $this->options [ PostmanOptions::ENVELOPE_SENDER ]; } } + public function getMessageSenderEmail() { + + if ( $this->is_fallback ) { + return $this->getFallbackUsername(); + } + if ( isset( $this->options [ PostmanOptions::MESSAGE_SENDER_EMAIL ] ) ) { return $this->options [ PostmanOptions::MESSAGE_SENDER_EMAIL ]; } } @@ -258,21 +314,45 @@ if ( ! class_exists( 'PostmanOptions' ) ) { if ( isset( $this->options [ PostmanOptions::CLIENT_SECRET ] ) ) { return $this->options [ PostmanOptions::CLIENT_SECRET ]; } } + public function getTransportType() { + + if ( $this->is_fallback ) { + return 'smtp'; + } + if ( isset( $this->options [ PostmanOptions::TRANSPORT_TYPE ] ) ) { return $this->options [ PostmanOptions::TRANSPORT_TYPE ]; } } + public function getAuthenticationType() { + + if ( $this->is_fallback ) { + return $this->getFallbackAuth(); + } + if ( isset( $this->options [ PostmanOptions::AUTHENTICATION_TYPE ] ) ) { return $this->options [ PostmanOptions::AUTHENTICATION_TYPE ]; } } + public function getEncryptionType() { + + if ( $this->is_fallback ) { + return $this->getFallbackSecurity(); + } + + if ( isset( $this->options [ PostmanOptions::SECURITY_TYPE ] ) ) { return $this->options [ PostmanOptions::SECURITY_TYPE ]; } } public function getUsername() { + + if ( $this->is_fallback ) { + return $this->getFallbackUsername(); + } + if ( defined( 'POST_SMTP_AUTH_USERNAME' ) ) { return POST_SMTP_AUTH_USERNAME; } @@ -281,15 +361,77 @@ if ( ! class_exists( 'PostmanOptions' ) ) { return $this->options [ PostmanOptions::BASIC_AUTH_USERNAME ]; } } - public function getPassword() { - if ( defined( 'POST_SMTP_AUTH_PASSWORD' ) ) { - return POST_SMTP_AUTH_PASSWORD; - } - if ( isset( $this->options [ PostmanOptions::BASIC_AUTH_PASSWORD ] ) ) { - return base64_decode( $this->options [ PostmanOptions::BASIC_AUTH_PASSWORD ] ); - } - } + public function getPassword() { + + if ( $this->is_fallback ) { + return $this->getFallbackPassword(); + } + + if ( defined( 'POST_SMTP_AUTH_PASSWORD' ) ) { + return POST_SMTP_AUTH_PASSWORD; + } + + if ( isset( $this->options [ PostmanOptions::BASIC_AUTH_PASSWORD ] ) ) { + return base64_decode( $this->options [ PostmanOptions::BASIC_AUTH_PASSWORD ] ); + } + } + + // Fallback + public function getFallbackIsEnabled() { + if ( isset( $this->options [ PostmanOptions::FALLBACK_SMTP_ENABLED ] ) ) { + return $this->options [ PostmanOptions::FALLBACK_SMTP_ENABLED ]; + } + return false; + } + + public function getFallbackHostname() { + if ( isset( $this->options [ PostmanOptions::FALLBACK_SMTP_HOSTNAME ] ) ) { + return $this->options [ PostmanOptions::FALLBACK_SMTP_HOSTNAME ]; + } + } + + public function getFallbackPort() { + if ( isset( $this->options [ PostmanOptions::FALLBACK_SMTP_PORT ] ) ) { + return $this->options [ PostmanOptions::FALLBACK_SMTP_PORT ]; + } + } + + public function getFallbackSecurity() { + if ( isset( $this->options [ PostmanOptions::FALLBACK_SMTP_SECURITY ] ) ) { + return $this->options [ PostmanOptions::FALLBACK_SMTP_SECURITY ]; + } + } + + public function getFallbackAuth() { + if ( isset( $this->options [ PostmanOptions::FALLBACK_SMTP_USE_AUTH ] ) ) { + return $this->options [ PostmanOptions::FALLBACK_SMTP_USE_AUTH ]; + } + } + + public function getFallbackUsername() { + if ( defined( 'POST_SMTP_FALLBACK_AUTH_USERNAME' ) ) { + return POST_SMTP_FALLBACK_AUTH_USERNAME; + } + + if ( isset( $this->options [ PostmanOptions::FALLBACK_SMTP_USERNAME ] ) ) { + return $this->options [ PostmanOptions::FALLBACK_SMTP_USERNAME ]; + } + } + + + public function getFallbackPassword() { + if ( defined( 'POST_SMTP_FALLBACK_AUTH_PASSWORD' ) ) { + return POST_SMTP_FALLBACK_AUTH_PASSWORD; + } + + if ( isset( $this->options [ PostmanOptions::FALLBACK_SMTP_PASSWORD ] ) ) { + return base64_decode( $this->options [ PostmanOptions::FALLBACK_SMTP_PASSWORD ] ); + } + } + + // End Fallback + public function getMandrillApiKey() { if ( defined( 'POST_SMTP_API_KEY' ) ) { return POST_SMTP_API_KEY; @@ -376,10 +518,12 @@ if ( ! class_exists( 'PostmanOptions' ) ) { if ( isset( $this->options [ PostmanOptions::PREVENT_MESSAGE_SENDER_NAME_OVERRIDE ] ) ) { return $this->options [ PostmanOptions::PREVENT_MESSAGE_SENDER_NAME_OVERRIDE ]; } } + public function isEmailValidationDisabled() { if ( isset( $this->options [ PostmanOptions::DISABLE_EMAIL_VALIDAITON ] ) ) { return $this->options [ PostmanOptions::DISABLE_EMAIL_VALIDAITON ]; } } + /** * (non-PHPdoc) * diff --git a/Postman/PostmanUtils.php b/Postman/PostmanUtils.php index 5405b79..8c7081f 100644 --- a/Postman/PostmanUtils.php +++ b/Postman/PostmanUtils.php @@ -36,6 +36,10 @@ class PostmanUtils { * @return string */ public static function getPageUrl( $slug ) { + if ( is_network_admin() ) { + return network_admin_url( 'admin.php?page=' . $slug ); + } + return get_admin_url() . 'admin.php?page=' . $slug; } @@ -393,6 +397,7 @@ class PostmanUtils { if ( $logger->isTrace() ) { $logger->trace( 'Registering admin menu ' . $callbackName ); } + add_action( 'admin_menu', array( $viewController, $callbackName, diff --git a/Postman/PostmanViewController.php b/Postman/PostmanViewController.php index c0025a9..6fef916 100644 --- a/Postman/PostmanViewController.php +++ b/Postman/PostmanViewController.php @@ -38,10 +38,12 @@ if ( ! class_exists( 'PostmanViewController' ) ) { add_action( 'admin_init', array( $this, 'registerStylesAndScripts' ), 0 ); add_action( 'wp_ajax_delete_lock_file', array( $this, 'delete_lock_file' ) ); add_action( 'wp_ajax_dismiss_version_notify', array( $this, 'dismiss_version_notify' ) ); + //add_action( 'admin_init', array( $this, 'do_activation_redirect' ) ); } + function dismiss_version_notify() { check_ajax_referer( 'postsmtp', 'security' ); @@ -307,7 +309,7 @@ if ( ! class_exists( 'PostmanViewController' ) ) { echo ' <div class="updated settings-error notice is-dismissible"> <p> - <strong>Version ' . $version . ' We have a new Chrome Extension:</strong> <a target="_blank" href="https://postmansmtp.com/post-smtp-1-9-6-new-chrome-extension/">Read Here</a> + <strong>Version ' . $version . ' The SMTP Fallback ( A backup delivery SMTP ):</strong> <a target="_blank" href="https://postmansmtp.com/post-smtp-1-9-7-the-smtp-fallback/">Read Here</a> </p> <button style="z-index: 100;" data-version="'. $version . '" data-security="' . wp_create_nonce('postsmtp') .'" type="button" class="notice-dismiss postman-release-message"> <span class="screen-reader-text">Dismiss this notice.</span> diff --git a/Postman/PostmanWpMail.php b/Postman/PostmanWpMail.php index f5fcf7f..173b35e 100644 --- a/Postman/PostmanWpMail.php +++ b/Postman/PostmanWpMail.php @@ -235,6 +235,13 @@ if ( ! class_exists( 'PostmanWpMail' ) ) { PostmanEmailLogService::getInstance()->writeFailureLog( $log, $message, $engine->getTranscript(), $transport, $e->getMessage() ); } + // Fallback + if ( $this->fallback( $log, $message, $options ) ) { + + return true; + + } + $mail_error_data = array( 'to' => $message->getToRecipients(), 'subject' => $message->getSubject(), @@ -248,9 +255,29 @@ if ( ! class_exists( 'PostmanWpMail' ) ) { // return failure return false; + } } + private function fallback( $log, $postMessage,$options ) { + + if ( ! $options->is_fallback && $options->getFallbackIsEnabled() && $options->getFallbackIsEnabled() == 'yes' ) { + + $options->is_fallback = true; + + $status = $this->sendMessage( $postMessage, $log ); + + $options->is_fallback = false; + + return $status; + + } else { + $options->is_fallback = false; + } + + return false; + } + /** * Clean up after sending the mail * diff --git a/postman-smtp.php b/postman-smtp.php index ba25f72..d6a2ee3 100644 --- a/postman-smtp.php +++ b/postman-smtp.php @@ -3,14 +3,17 @@ * Plugin Name: Post SMTP * Plugin URI: https://wordpress.org/plugins/post-smtp/ * Description: Email not reliable? Post SMTP is the first and only WordPress SMTP plugin to implement OAuth 2.0 for Gmail, Hotmail and Yahoo Mail. Setup is a breeze with the Configuration Wizard and integrated Port Tester. Enjoy worry-free delivery even if your password changes! - * Version: 1.9.6 - * Author: Jason Hendriks, Yehuda Hassine + * Version: 1.9.7 + * Author: Yehuda Hassine * Text Domain: post-smtp * Author URI: https://postmansmtp.com * License: GPLv2 or later * License URI: http://www.gnu.org/licenses/gpl-2.0.html */ +/* + * Post SMTP (aka Postman SMTP) was originally developed by Jason Hendriks + */ // The Postman Mail API // // filter postman_test_email: before calling wp_mail, implement this filter and return true to disable the success/fail counters @@ -28,8 +31,9 @@ // -- class autoloading // -- Add dismiss option for "unconfigured message" .. for multisites // -- customize sent-mail icon WordPress dashboard -// -- multisite support for site-wide email configuration. allow network admin to choose whether subdomains may override with their own settings. subdomains may override with their own settings. // -- multiple mailbox support + + /** * DO some check and Start Postman */ @@ -122,5 +126,5 @@ function post_start( $startingMemory ) { */ function post_setupPostman() { require_once 'Postman/Postman.php'; - $kevinCostner = new Postman( __FILE__, '1.9.6' ); + $kevinCostner = new Postman( __FILE__, '1.9.7' ); } @@ -1,10 +1,10 @@ === Post SMTP Mailer/Email Log === -Contributors: yehudah ,jasonhendriks +Contributors: yehudah Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=yehuda@myinbox.in&item_name=Donation+for+PostSMTP Tags: postman smtp, postman, smtp, email, mail, mailer, email log, oauth2, gmail, google apps, hotmail, yahoo, mandrill api, sendgrid api, elastic email, office365, mailgun Requires at least: 3.9 Tested up to: 5.0.3 -Stable tag: 1.9.6 +Stable tag: 1.9.7 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -12,8 +12,9 @@ Send, log and troubleshoot your Outgoing Email easily. Supports everything: SMTP == Description == -= Version 1.9.6 released - We have a new Chrome extension = -New Chrome extension and small updates. [Read the detailes here](https://postmansmtp.com/post-smtp-1-9-6-new-chrome-extension/) += Version 1.9.7 released - The SMTP Fallback = +A fallback is a unique solution only exist on Post SMTP. +You can configure a backup SMTP, so if your emails are failing your site will keep sending emails !!! [Read the detailes here](https://postmansmtp.com/post-smtp-1-9-7-the-smtp-fallback/) = The Only SMTP plugin with chrome Notifications = Get notified if your emails are failing inside your Chrome browser. [Download here](https://chrome.google.com/webstore/detail/post-smtp-notifications/npklmbkpbknkmbohdbpikeidiaekjoch?hl=en-US) @@ -92,7 +93,7 @@ SendGrid has a free SMTP plan that you can use to send up to 100 emails per day. = CREDITS = -Post SMTP (aka Postman SMTP) plugin was originally created by Jason Hendriks. It is now owned and maintained by Yehuda Hassine. +Post SMTP (aka Postman SMTP) plugin was originally created by Jason Hendriks. == Installation == @@ -289,13 +290,20 @@ To avoid being flagged as spam, you need to prove your email isn't forged. On a == Changelog == += 1.9.7 - 2019-02-17 +* New: Fallback Feature - Configure a backup SMTP when emails are failing. +* New: WordPress Multisite compability - with global settings. +* New: Email Log capability - give other user cheking the logs. +* Fixed: compatibility with mailster plugin +* Fixed: Mandrill exception bug - Thanks to Niels de Blaauw from Level-Level + = 1.9.6 - 2019-01-29 * Added support for our new chrome notification extension. * few fixes = 1.9.5 - 2018-10-02 * Added support for Mailgun Europe region. -* Replace "buggey" mime_content_type php function +* Replace "buggy" mime_content_type php function = 1.9.4 - 2018-08-03 The most stupid idea ever remove (auto security select) |