'PHPMailer', 'postsmtp' => 'PostSMTP' ]; public $is_fallback = false; // options data private $options; // singleton instance public static function getInstance() { static $inst = null; if ( $inst === null ) { $inst = new PostmanOptions(); } return $inst; } /** * private constructor */ private function __construct() { $this->load(); } public function save() { update_option( PostmanOptions::POSTMAN_OPTIONS, $this->options ); } public function reload() { $this->load(); } public function load() { $options = get_option( self::POSTMAN_OPTIONS ); if ( is_multisite() ) { $network_options = get_site_option( self::POSTMAN_NETWORK_OPTIONS ); $blog_id = get_current_blog_id(); if ( isset( $network_options['post_smtp_global_settings'] ) ) { $blog_id = apply_filters( 'post_smtp_default_site_option', 1 ); } 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 ] ); } public function isMailLoggingEnabled() { $allowed = $this->isMailLoggingAllowed(); $enabled = $this->getMailLoggingEnabled() == self::MAIL_LOG_ENABLED_OPTION_YES; return $allowed && $enabled; } public function getTempDirectory() { if ( isset( $this->options [ self::TEMPORARY_DIRECTORY ] ) ) { return $this->options [ self::TEMPORARY_DIRECTORY ]; } else { return self::DEFAULT_TEMP_DIRECTORY; } } public function isMailLoggingAllowed() { return true; } public function isStealthModeEnabled() { if ( isset( $this->options [ PostmanOptions::STEALTH_MODE ] ) ) { return $this->options [ PostmanOptions::STEALTH_MODE ]; } else { return self::DEFAULT_STEALTH_MODE; } } public function getMailLoggingEnabled() { if ( isset( $this->options [ PostmanOptions::MAIL_LOG_ENABLED_OPTION ] ) ) { return $this->options [ PostmanOptions::MAIL_LOG_ENABLED_OPTION ]; } else { return self::DEFAULT_MAIL_LOG_ENABLED; } } public function getRunMode() { if ( defined( 'POST_SMTP_RUN_MODE' ) ) { return POST_SMTP_RUN_MODE; } if ( isset( $this->options [ self::RUN_MODE ] ) ) { return $this->options [ self::RUN_MODE ]; } else { return self::DEFAULT_RUN_MODE; } } public function getMailLoggingMaxEntries() { if ( isset( $this->options [ PostmanOptions::MAIL_LOG_MAX_ENTRIES ] ) ) { return $this->options [ PostmanOptions::MAIL_LOG_MAX_ENTRIES ]; } else { return self::DEFAULT_MAIL_LOG_ENTRIES; } } public function getTranscriptSize() { if ( isset( $this->options [ PostmanOptions::TRANSCRIPT_SIZE ] ) ) { return $this->options [ PostmanOptions::TRANSCRIPT_SIZE ]; } else { return self::DEFAULT_TRANSCRIPT_SIZE; } } public function getLogLevel() { if ( isset( $this->options [ PostmanOptions::LOG_LEVEL ] ) ) { return $this->options [ PostmanOptions::LOG_LEVEL ]; } else { return self::DEFAULT_LOG_LEVEL; } } public function getForcedToRecipients() { if ( isset( $this->options [ self::FORCED_TO_RECIPIENTS ] ) ) { return $this->options [ self::FORCED_TO_RECIPIENTS ]; } } public function getForcedCcRecipients() { if ( isset( $this->options [ self::FORCED_CC_RECIPIENTS ] ) ) { return $this->options [ self::FORCED_CC_RECIPIENTS ]; } } public function getForcedBccRecipients() { if ( isset( $this->options [ self::FORCED_BCC_RECIPIENTS ] ) ) { return $this->options [ self::FORCED_BCC_RECIPIENTS ]; } } public function getAdditionalHeaders() { if ( isset( $this->options [ self::ADDITIONAL_HEADERS ] ) ) { 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->getFallbackFromEmail(); } if ( isset( $this->options [ PostmanOptions::ENVELOPE_SENDER ] ) ) { return $this->options [ PostmanOptions::ENVELOPE_SENDER ]; } } public function getMessageSenderEmail() { if ( $this->is_fallback ) { return $this->getFallbackFromEmail(); } if ( isset( $this->options [ PostmanOptions::MESSAGE_SENDER_EMAIL ] ) ) { return $this->options [ PostmanOptions::MESSAGE_SENDER_EMAIL ]; } } public function getFallbackFromEmail() { if ( isset( $this->options [ PostmanOptions::FALLBACK_FROM_EMAIL ] ) ) { return $this->options [ PostmanOptions::FALLBACK_FROM_EMAIL ]; } } public function getMessageSenderName() { if ( isset( $this->options [ PostmanOptions::MESSAGE_SENDER_NAME ] ) ) { return $this->options [ PostmanOptions::MESSAGE_SENDER_NAME ]; } } public function getClientId() { if ( isset( $this->options [ PostmanOptions::CLIENT_ID ] ) ) { return $this->options [ PostmanOptions::CLIENT_ID ]; } } public function getClientSecret() { 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; } if ( isset( $this->options [ PostmanOptions::BASIC_AUTH_USERNAME ] ) ) { return $this->options [ PostmanOptions::BASIC_AUTH_USERNAME ]; } } 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; } if ( isset( $this->options [ PostmanOptions::MANDRILL_API_KEY ] ) ) { return base64_decode( $this->options [ PostmanOptions::MANDRILL_API_KEY ] ); } } public function getSendGridApiKey() { if ( defined( 'POST_SMTP_API_KEY' ) ) { return POST_SMTP_API_KEY; } if ( isset( $this->options [ PostmanOptions::SENDGRID_API_KEY ] ) ) { return base64_decode( $this->options [ PostmanOptions::SENDGRID_API_KEY ] ); } } public function getMailgunApiKey() { if ( defined( 'POST_SMTP_API_KEY' ) ) { return POST_SMTP_API_KEY; } if ( isset( $this->options [ PostmanOptions::MAILGUN_API_KEY ] ) ) { return base64_decode( $this->options [ PostmanOptions::MAILGUN_API_KEY ] ); } } public function getMailgunDomainName() { if ( isset( $this->options [ PostmanOptions::MAILGUN_DOMAIN_NAME ] ) ) { return $this->options [ PostmanOptions::MAILGUN_DOMAIN_NAME ]; } } public function getMailgunRegion() { if ( isset( $this->options [ PostmanOptions::MAILGUN_REGION ] ) ) { return $this->options [ PostmanOptions::MAILGUN_REGION ]; } } public function getReplyTo() { if ( isset( $this->options [ PostmanOptions::REPLY_TO ] ) ) { return $this->options [ PostmanOptions::REPLY_TO ]; } } public function getConnectionTimeout() { if ( ! empty( $this->options [ self::CONNECTION_TIMEOUT ] ) ) { return $this->options [ self::CONNECTION_TIMEOUT ]; } else { return self::DEFAULT_TCP_CONNECTION_TIMEOUT; } } public function getReadTimeout() { if ( ! empty( $this->options [ self::READ_TIMEOUT ] ) ) { return $this->options [ self::READ_TIMEOUT ]; } else { return self::DEFAULT_TCP_READ_TIMEOUT; } } public function isPluginSenderNameEnforced() { if ( $this->isNew() ) { return self::DEFAULT_PLUGIN_MESSAGE_SENDER_NAME_ENFORCED; } 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) * * @see PostmanOptions::isSenderNameOverridePrevented() * @deprecated by isPluginSenderNameEnforced */ public function isSenderNameOverridePrevented() { return $this->isPluginSenderEmailEnforced(); } public function isPluginSenderEmailEnforced() { if ( $this->isNew() ) { return self::DEFAULT_PLUGIN_MESSAGE_SENDER_EMAIL_ENFORCED; } if ( isset( $this->options [ PostmanOptions::PREVENT_MESSAGE_SENDER_EMAIL_OVERRIDE ] ) ) { return $this->options [ PostmanOptions::PREVENT_MESSAGE_SENDER_EMAIL_OVERRIDE ]; } } /** * * @deprecated by isPluginSenderEmailEnforced */ public function isSenderEmailOverridePrevented() { return $this->isPluginSenderEmailEnforced(); } private function setSenderEmail( $senderEmail ) { $this->options [ PostmanOptions::MESSAGE_SENDER_EMAIL ] = $senderEmail; } public function setMessageSenderEmailIfEmpty( $senderEmail ) { if ( empty( $this->options [ PostmanOptions::MESSAGE_SENDER_EMAIL ] ) ) { $this->setSenderEmail( $senderEmail ); } } private function setSenderName( $senderName ) { $this->options [ PostmanOptions::MESSAGE_SENDER_NAME ] = $senderName; } public function setMessageSenderNameIfEmpty( $senderName ) { if ( empty( $this->options [ PostmanOptions::MESSAGE_SENDER_NAME ] ) ) { $this->setSenderName( $senderName ); } } public function getSmtpMailer() { if ( empty($this->options [ 'smtp_mailers' ]) ) { return 'postsmtp'; } return $this->options [ 'smtp_mailers' ]; } public function isAuthTypePassword() { return $this->isAuthTypeLogin() || $this->isAuthTypeCrammd5() || $this->isAuthTypePlain(); } public function isAuthTypeOAuth2() { return PostmanOptions::AUTHENTICATION_TYPE_OAUTH2 == $this->getAuthenticationType(); } public function isAuthTypeLogin() { return PostmanOptions::AUTHENTICATION_TYPE_LOGIN == $this->getAuthenticationType(); } public function isAuthTypePlain() { return PostmanOptions::AUTHENTICATION_TYPE_PLAIN == $this->getAuthenticationType(); } public function isAuthTypeCrammd5() { return PostmanOptions::AUTHENTICATION_TYPE_CRAMMD5 == $this->getAuthenticationType(); } public function isAuthTypeNone() { return PostmanOptions::AUTHENTICATION_TYPE_NONE == $this->getAuthenticationType(); } /** * * @deprecated Required by the Postman Gmail Extension * * @see PostmanOptionsInterface::getSenderEmail() */ public function getSenderEmail() { return $this->getMessageSenderEmail(); } /** * * @deprecated Required by the Postman Gmail Extension * * @see PostmanOptionsInterface::getSenderEmail() */ public function getSenderName() { return $this->getMessageSenderName(); } /** * * @return string */ public function export() { if ( PostmanPreRequisitesCheck::checkZlibEncode() ) { $data = $this->options; $data ['version'] = PostmanState::getInstance()->getVersion(); foreach ( PostmanTransportRegistry::getInstance()->getTransports() as $transport ) { $data = $transport->prepareOptionsForExport( $data ); } $data = base64_encode( gzcompress( json_encode( $data ), 9 ) ); return $data; } } /** * * @param mixed $data */ public function import( $data ) { if ( PostmanPreRequisitesCheck::checkZlibEncode() ) { $logger = new PostmanLogger( get_class( $this ) ); $logger->debug( 'Importing Settings' ); $base64 = $data; $logger->trace( $base64 ); $gz = base64_decode( $base64 ); $logger->trace( $gz ); $json = @gzuncompress( $gz ); $logger->trace( $json ); if ( ! empty( $json ) ) { $data = json_decode( $json, true ); $logger->trace( $data ); { // overwrite the current version with the version from the imported options // this way database upgrading can occur $postmanState = get_option( 'postman_state' ); $postmanState ['version'] = $data ['version']; $logger->trace( sprintf( 'Setting Postman version to %s', $postmanState ['version'] ) ); assert( $postmanState ['version'] == $data ['version'] ); update_option( 'postman_state', $postmanState ); } $this->options = $data; $logger->info( 'Imported data' ); $this->save(); return true; } else { $logger->error( 'Could not import data - data error' ); return false; } } } } }