+ 0 ) {
+ $from_name = substr( $content, 0, $bracket_pos - 1 );
+ $from_name = str_replace( '"', '', $from_name );
+ $from_name = trim( $from_name );
+ }
+
+ $from_email = substr( $content, $bracket_pos + 1 );
+ $from_email = str_replace( '>', '', $from_email );
+ $from_email = trim( $from_email );
+
+ // Avoid setting an empty $from_email.
+ } elseif ( '' !== trim( $content ) ) {
+ $from_email = trim( $content );
+ }
+ break;
+ case 'content-type':
+ if ( strpos( $content, ';' ) !== false ) {
+ list( $type, $charset_content ) = explode( ';', $content );
+ $content_type = trim( $type );
+ if ( false !== stripos( $charset_content, 'charset=' ) ) {
+ $charset = trim( str_replace( array( 'charset=', '"' ), '', $charset_content ) );
+ } elseif ( false !== stripos( $charset_content, 'boundary=' ) ) {
+ $boundary = trim( str_replace( array( 'BOUNDARY=', 'boundary=', '"' ), '', $charset_content ) );
+ $charset = '';
+ }
+
+ // Avoid setting an empty $content_type.
+ } elseif ( '' !== trim( $content ) ) {
+ $content_type = trim( $content );
+ }
+ break;
+ case 'cc':
+ $cc = array_merge( (array) $cc, explode( ',', $content ) );
+ break;
+ case 'bcc':
+ $bcc = array_merge( (array) $bcc, explode( ',', $content ) );
+ break;
+ case 'reply-to':
+ $reply_to = array_merge( (array) $reply_to, explode( ',', $content ) );
+ break;
+ default:
+ // Add it to our grand headers array.
+ $headers[ trim( $name ) ] = trim( $content );
+ break;
+ }
+ }
+ }
+ }
+
+ // Empty out the values that may be set.
+ $phpmailer->clearAllRecipients();
+ $phpmailer->clearAttachments();
+ $phpmailer->clearCustomHeaders();
+ $phpmailer->clearReplyTos();
+
+ // Set "From" name and email.
+
+ // If we don't have a name from the input headers.
+ if ( ! isset( $from_name ) ) {
+ $from_name = $options['from_name'];//'WordPress';
+ }
+
+ /*
+ * If we don't have an email from the input headers, default to wordpress@$sitename
+ * Some hosts will block outgoing mail from this address if it doesn't exist,
+ * but there's no easy alternative. Defaulting to admin_email might appear to be
+ * another option, but some hosts may refuse to relay mail from an unknown domain.
+ * See https://core.trac.wordpress.org/ticket/5007.
+ */
+ if ( ! isset( $from_email ) ) {
+ // Get the site domain and get rid of www.
+ $sitename = wp_parse_url( network_home_url(), PHP_URL_HOST );
+ if ( 'www.' === substr( $sitename, 0, 4 ) ) {
+ $sitename = substr( $sitename, 4 );
+ }
+
+ $from_email = $options['from_email'];//'wordpress@' . $sitename;
+ }
+
+ /**
+ * Filters the email address to send from.
+ *
+ * @since 2.2.0
+ *
+ * @param string $from_email Email address to send from.
+ */
+ $from_email = apply_filters( 'wp_mail_from', $from_email );
+
+ /**
+ * Filters the name to associate with the "from" email address.
+ *
+ * @since 2.3.0
+ *
+ * @param string $from_name Name associated with the "from" email address.
+ */
+ $from_name = apply_filters( 'wp_mail_from_name', $from_name );
+
+ try {
+ $phpmailer->setFrom( $from_email, $from_name, false );
+ } catch ( PHPMailer\PHPMailer\Exception $e ) {
+ $mail_error_data = compact( 'to', 'subject', 'message', 'headers', 'attachments' );
+ $mail_error_data['phpmailer_exception_code'] = $e->getCode();
+
+ /** This filter is documented in wp-includes/pluggable.php */
+ do_action( 'wp_mail_failed', new WP_Error( 'wp_mail_failed', $e->getMessage(), $mail_error_data ) );
+
+ return false;
+ }
+
+ // Set mail's subject and body.
+ $phpmailer->Subject = $subject;
+ $phpmailer->Body = $message;
+
+ // Set destination addresses, using appropriate methods for handling addresses.
+ $address_headers = compact( 'to', 'cc', 'bcc', 'reply_to' );
+
+ foreach ( $address_headers as $address_header => $addresses ) {
+ if ( empty( $addresses ) ) {
+ continue;
+ }
+
+ foreach ( (array) $addresses as $address ) {
+ try {
+ // Break $recipient into name and address parts if in the format "Foo ".
+ $recipient_name = '';
+
+ if ( preg_match( '/(.*)<(.+)>/', $address, $matches ) ) {
+ if ( count( $matches ) == 3 ) {
+ $recipient_name = $matches[1];
+ $address = $matches[2];
+ }
+ }
+
+ switch ( $address_header ) {
+ case 'to':
+ $phpmailer->addAddress( $address, $recipient_name );
+ break;
+ case 'cc':
+ $phpmailer->addCc( $address, $recipient_name );
+ break;
+ case 'bcc':
+ $phpmailer->addBcc( $address, $recipient_name );
+ break;
+ case 'reply_to':
+ $phpmailer->addReplyTo( $address, $recipient_name );
+ break;
+ }
+ } catch ( PHPMailer\PHPMailer\Exception $e ) {
+ continue;
+ }
+ }
+ }
+
+ // Tell PHPMailer to use SMTP
+ $phpmailer->isSMTP(); //$phpmailer->IsMail();
+ // Set the hostname of the mail server
+ $phpmailer->Host = $options['smtp_host'];
+ // Whether to use SMTP authentication
+ if(isset($options['smtp_auth']) && $options['smtp_auth'] == "true"){
+ $phpmailer->SMTPAuth = true;
+ // SMTP username
+ $phpmailer->Username = $options['smtp_username'];
+ // SMTP password
+ $phpmailer->Password = base64_decode($options['smtp_password']);
+ }
+ // Whether to use encryption
+ $type_of_encryption = $options['type_of_encryption'];
+ if($type_of_encryption=="none"){
+ $type_of_encryption = '';
+ }
+ $phpmailer->SMTPSecure = $type_of_encryption;
+ // SMTP port
+ $phpmailer->Port = $options['smtp_port'];
+
+ // Whether to enable TLS encryption automatically if a server supports it
+ $phpmailer->SMTPAutoTLS = false;
+ //enable debug when sending a test mail
+ if(isset($_POST['smtp_mailer_send_test_email'])){
+ $phpmailer->SMTPDebug = 4;
+ // Ask for HTML-friendly debug output
+ $phpmailer->Debugoutput = 'html';
+ }
+
+ //disable ssl certificate verification if checked
+ if(isset($options['disable_ssl_verification']) && !empty($options['disable_ssl_verification'])){
+ $phpmailer->SMTPOptions = array(
+ 'ssl' => array(
+ 'verify_peer' => false,
+ 'verify_peer_name' => false,
+ 'allow_self_signed' => true
+ )
+ );
+ }
+
+ // Set Content-Type and charset.
+
+ // If we don't have a content-type from the input headers.
+ if ( ! isset( $content_type ) ) {
+ $content_type = 'text/plain';
+ }
+
+ /**
+ * Filters the wp_mail() content type.
+ *
+ * @since 2.3.0
+ *
+ * @param string $content_type Default wp_mail() content type.
+ */
+ $content_type = apply_filters( 'wp_mail_content_type', $content_type );
+
+ $phpmailer->ContentType = $content_type;
+
+ // Set whether it's plaintext, depending on $content_type.
+ if ( 'text/html' === $content_type ) {
+ $phpmailer->isHTML( true );
+ }
+
+ // If we don't have a charset from the input headers.
+ if ( ! isset( $charset ) ) {
+ $charset = get_bloginfo( 'charset' );
+ }
+
+ /**
+ * Filters the default wp_mail() charset.
+ *
+ * @since 2.3.0
+ *
+ * @param string $charset Default email charset.
+ */
+ $phpmailer->CharSet = apply_filters( 'wp_mail_charset', $charset );
+
+ // Set custom headers.
+ if ( ! empty( $headers ) ) {
+ foreach ( (array) $headers as $name => $content ) {
+ // Only add custom headers not added automatically by PHPMailer.
+ if ( ! in_array( $name, array( 'MIME-Version', 'X-Mailer' ), true ) ) {
+ try {
+ $phpmailer->addCustomHeader( sprintf( '%1$s: %2$s', $name, $content ) );
+ } catch ( PHPMailer\PHPMailer\Exception $e ) {
+ continue;
+ }
+ }
+ }
+
+ if ( false !== stripos( $content_type, 'multipart' ) && ! empty( $boundary ) ) {
+ $phpmailer->addCustomHeader( sprintf( 'Content-Type: %s; boundary="%s"', $content_type, $boundary ) );
+ }
+ }
+
+ if ( ! empty( $attachments ) ) {
+ foreach ( $attachments as $attachment ) {
+ try {
+ $phpmailer->addAttachment( $attachment );
+ } catch ( PHPMailer\PHPMailer\Exception $e ) {
+ continue;
+ }
+ }
+ }
+
+ /**
+ * Fires after PHPMailer is initialized.
+ *
+ * @since 2.2.0
+ *
+ * @param PHPMailer $phpmailer The PHPMailer instance (passed by reference).
+ */
+ do_action_ref_array( 'phpmailer_init', array( &$phpmailer ) );
+
+ // Send!
+ try {
+ return $phpmailer->send();
+ } catch ( PHPMailer\PHPMailer\Exception $e ) {
+
+ $mail_error_data = compact( 'to', 'subject', 'message', 'headers', 'attachments' );
+ $mail_error_data['phpmailer_exception_code'] = $e->getCode();
+
+ /**
+ * Fires after a PHPMailer\PHPMailer\Exception is caught.
+ *
+ * @since 4.4.0
+ *
+ * @param WP_Error $error A WP_Error object with the PHPMailer\PHPMailer\Exception message, and an array
+ * containing the mail recipient, subject, message, headers, and attachments.
+ */
+ do_action( 'wp_mail_failed', new WP_Error( 'wp_mail_failed', $e->getMessage(), $mail_error_data ) );
+
+ return false;
+ }
+ }
+
+}
diff --git a/wp-content/plugins/smtp-mailer/readme.txt b/wp-content/plugins/smtp-mailer/readme.txt
new file mode 100644
index 00000000..e505aa21
--- /dev/null
+++ b/wp-content/plugins/smtp-mailer/readme.txt
@@ -0,0 +1,140 @@
+=== SMTP Mailer ===
+Contributors: naa986
+Donate link: https://wphowto.net/
+Tags: email, mail, smtp, phpmailer
+Requires at least: 5.5
+Tested up to: 5.7
+Stable tag: 1.1.0
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+Configure a SMTP server to send email from your WordPress site. Configure the wp_mail() function to use SMTP instead of the PHP mail() function.
+
+== Description ==
+
+[SMTP Mailer](https://wphowto.net/smtp-mailer-plugin-for-wordpress-1482) plugin allows you to configure a mail server which handles all outgoing email from your website. It takes control of the wp_mail function and use SMTP instead.
+
+https://www.youtube.com/watch?v=7O_jgtykcEk&rel=0
+
+=== Requirements ===
+
+* A self-hosted website running on [WordPress hosting](https://wphowto.net/best-cheap-wordpress-hosting-1689)
+
+=== SMTP Mailer Settings ===
+
+* **SMTP Host**: Your outgoing mail server (e.g. smtp.gmail.com).
+* **SMTP Authentication**: Whether to use SMTP authentication when sending an email (True/False). If you choose to authenticate you will also need to provide your username and password.
+* **SMTP Username**: The username to connect to your SMTP server.
+* **SMTP Password**: The password to connect to your SMTP server.
+* **Type of Encryption**: The encryption to be used when sending an email (TLS/SSL/No Encryption. TLS is recommended).
+* **SMTP Port**: The port to be used when sending an email (587/465/25). If you choose TLS the port should be set to 587. For SSL use port 465 instead.
+* **From Email Address**: The email address to be used as the From Address when sending an email.
+* **From Name**: The name to be used as the From Name when sending an email.
+
+=== SMTP Mailer Test Email ===
+
+Once you have configured the settings you can send a test email to check the functionality of the plugin.
+
+* **To**: Email address of the recipient.
+* **Subject**: Subject of the email.
+* **Message**: Email body.
+
+=== Known Compatibility ===
+
+SMTP Mailer should work with any plugin that uses the WordPress Mail function. However, It has been tested with the following form and contact form plugins:
+
+* Contact Form 7
+* Jetpack Contact Form
+* Visual Form Builder
+* Fast Secure Contact Form
+* Formidable Forms
+* Contact Form by BestWebSoft
+
+For detailed setup instructions please visit the [SMTP Mailer](https://wphowto.net/smtp-mailer-plugin-for-wordpress-1482) plugin page.
+
+== Installation ==
+
+1. Go to the Add New plugins screen in your WordPress Dashboard
+1. Click the upload tab
+1. Browse for the plugin file (smtp-mailer.zip) on your computer
+1. Click "Install Now" and then hit the activate button
+
+== Frequently Asked Questions ==
+
+= Can I send email via SMTP from my website using this plugin? =
+
+Yes.
+
+= Can I use this plugin with Gmail SMTP? =
+
+Yes.
+
+= Can I use this plugin on any SMTP port? =
+
+Yes.
+
+= Can I use this plugin with Sendinblue SMTP? =
+
+Yes.
+
+= Can I use this plugin with Mailgun SMTP? =
+
+Yes.
+
+= Can I use this plugin with SendGrid SMTP? =
+
+Yes.
+
+= Can I use this plugin with Postmark SMTP? =
+
+Yes.
+
+= Can I use this plugin with Office365 SMTP? =
+
+Yes.
+
+= Can I use this plugin with ZohoMail SMTP? =
+
+Yes.
+
+== Screenshots ==
+
+1. SMTP Mailer Settings
+2. SMTP Mailer Test Email Tab
+
+== Upgrade Notice ==
+none
+
+== Changelog ==
+
+= 1.1.0 =
+* The password field can be left empty when updating the settings.
+
+= 1.0.9 =
+* Updated the code to be compatible with WordPress 5.5.
+
+= 1.0.8 =
+* SMTP Mailer is compatible with WordPress 5.3.
+
+= 1.0.7 =
+* SMTP Mailer now checks for a valid nonce when sending a test email.
+
+= 1.0.6 =
+* SMTP Mailer no longer shows the saved password in the settings.
+
+= 1.0.5 =
+* SMTP Mailer is now compatible with WordPress 4.9.
+
+= 1.0.4 =
+* Updated the mail() function by setting its minimum requirements to WordPress 4.8.
+* "phpmailer_init" action hook is now enabled so it can be used by other plugins.
+
+= 1.0.3 =
+* Fixed a bug where an apostrophe in the password would cause SMTP authentication failure.
+
+= 1.0.2 =
+* SMTP Mailer now supports the "wp_mail_failed" hook which fires after a phpmailerException is caught.
+* Added a new option to bypass this error on some servers where the SSL certificate is not properly configured - Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed.
+
+= 1.0.1 =
+* First commit