'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() { if ( defined( 'POST_SMTP_CORE_MAIL_LOG' ) ) { return POST_SMTP_CORE_MAIL_LOG; } $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 ] ) ) { /** * Filters the From Email Address | This address, like the letterhead printed on a letter, identifies the sender to the recipient. Change this when you are sending on behalf of someone else, for example to use Google's Send Mail As feature. Other plugins, especially Contact Forms, may override this field to be your visitor's address. * * @since 2.5.0 * @version 1.0.0 */ return apply_filters( 'post_smtp_from_email_address', $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 ] ) ) { /** * Filters the From Name * * @since 2.5.0 * @version 1.0.0 */ return apply_filters( 'post_smtp_from_name', $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 ] ) ) { /** * Filters Reply-To * * @since 2.5.0 * @version 1.0.0 */ return apply_filters( 'post_smtp_reply_to', $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 ]; } } /** * @since 2.1 * @version 1.0 */ public function getSendinblueApiKey() { if ( defined( 'POST_SMTP_API_KEY' ) ) { return POST_SMTP_API_KEY; } if ( isset( $this->options[PostmanOptions::SENDINBLUE_API_KEY] ) ) { return base64_decode( $this->options[PostmanOptions::SENDINBLUE_API_KEY] ); } } /** * Gets Mailjet API key * * @since 2.7 * @version 1.0 */ public function getMailjetApiKey() { if ( defined( 'POST_SMTP_API_KEY' ) ) { return POST_SMTP_API_KEY; } if ( isset( $this->options[PostmanOptions::MAILJET_API_KEY] ) ) { return base64_decode( $this->options[PostmanOptions::MAILJET_API_KEY] ); } } /** * Gets Mailjet Secret key * * @since 2.7 * @version 1.0 */ public function getMailjetSecretKey() { if ( defined( 'POST_SMTP_API_KEY' ) ) { return POST_SMTP_API_KEY; } if ( isset( $this->options[PostmanOptions::MAILJET_SECRET_KEY] ) ) { return base64_decode( $this->options[PostmanOptions::MAILJET_SECRET_KEY] ); } } /** * Gets SparkPost API key * * @since 2.2 * @version 1.0 */ public function getSparkPostApiKey() { if ( defined( 'POST_SMTP_API_KEY' ) ) { return POST_SMTP_API_KEY; } if ( isset( $this->options[PostmanOptions::SPARKPOST_API_KEY] ) ) { return base64_decode( $this->options[PostmanOptions::SPARKPOST_API_KEY] ); } } /** * @since 2.6.0 * @version 1.0 */ public function getElasticEmailApiKey() { if ( defined( 'POST_SMTP_API_KEY' ) ) { return POST_SMTP_API_KEY; } if ( isset( $this->options[PostmanOptions::ELASTICEMAIL_API_KEY] ) ) { return base64_decode( $this->options[PostmanOptions::ELASTICEMAIL_API_KEY] ); } } /** * (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; } } } public function getPostmarkApiKey() { if ( defined( 'POST_SMTP_API_KEY' ) ) { return POST_SMTP_API_KEY; } if ( isset( $this->options[PostmanOptions::POSTMARK_API_KEY] ) ) { return base64_decode( $this->options[PostmanOptions::POSTMARK_API_KEY] ); } } /** * Is the PHP Compatibility Mode enabled? * * @since 2.5.0 * @version 1.0.0 */ public function is_php_compatibility_enabled() { if ( isset( $this->options [ PostmanOptions::INCOMPATIBLE_PHP_VERSION ] ) ) { return $this->options [ PostmanOptions::INCOMPATIBLE_PHP_VERSION ]; } else { return self::DEFAULT_PHP_COMPATIBILITY_MODE; } } } }