Version Description
- 2018-04-24
- Fix lockfile erros
- Contact form 7 integration
- PHP 5.6 requirement
Download this release
Release Info
Developer | yehudah |
Plugin | Post SMTP Mailer/Email Log |
Version | 1.8.6 |
Comparing to | |
See all releases |
Code changes from version 1.8.5 to 1.8.6
- Postman/Postman-Diagnostic-Test/PostmanDiagnosticTestController.php +1 -0
- Postman/Postman-Mail/PostmanContactForm7.php +39 -0
- Postman/Postman-Mail/PostmanMailgunMailEngine.php +3 -3
- Postman/Postman-Mail/PostmanSendGridMailEngine.php +5 -3
- Postman/Postman.php +6 -1
- Postman/PostmanUtils.php +3 -0
- Postman/PostmanViewController.php +2 -2
- postman-smtp.php +29 -4
- readme.txt +9 -4
- style/testEmail.html +1 -1
Postman/Postman-Diagnostic-Test/PostmanDiagnosticTestController.php
CHANGED
@@ -209,6 +209,7 @@ class PostmanGetDiagnosticsViaAjax {
|
|
209 |
*/
|
210 |
public function getDiagnostics() {
|
211 |
$transportRegistry = PostmanTransportRegistry::getInstance();
|
|
|
212 |
$this->addToDiagnostics( 'OS', php_uname() );
|
213 |
$this->addToDiagnostics( 'PHP', PHP_OS . ' ' . PHP_VERSION . ' ' . setlocale( LC_CTYPE, 0 ) );
|
214 |
$this->addToDiagnostics( 'PHP Dependencies', $this->getPhpDependencies() );
|
209 |
*/
|
210 |
public function getDiagnostics() {
|
211 |
$transportRegistry = PostmanTransportRegistry::getInstance();
|
212 |
+
$this->addToDiagnostics( 'HostName', PostmanUtils::getServerName() );
|
213 |
$this->addToDiagnostics( 'OS', php_uname() );
|
214 |
$this->addToDiagnostics( 'PHP', PHP_OS . ' ' . PHP_VERSION . ' ' . setlocale( LC_CTYPE, 0 ) );
|
215 |
$this->addToDiagnostics( 'PHP Dependencies', $this->getPhpDependencies() );
|
Postman/Postman-Mail/PostmanContactForm7.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
class Postsmtp_ContactForm7 {
|
3 |
+
|
4 |
+
private $result_error;
|
5 |
+
|
6 |
+
public function __construct() {
|
7 |
+
add_action( 'wpcf7_mail_failed', array( $this, 'save_error' ) );
|
8 |
+
add_filter( 'wpcf7_ajax_json_echo', array( $this, 'change_rest_response' ), 10, 2 );
|
9 |
+
}
|
10 |
+
|
11 |
+
public function save_error($contact_form) {
|
12 |
+
$this->result_error = apply_filters( 'postman_wp_mail_result', null );
|
13 |
+
}
|
14 |
+
|
15 |
+
public function change_rest_response( $response ) {
|
16 |
+
if ( $response['status'] == 'mail_failed' ) {
|
17 |
+
$message = $this->result_error ['exception']->getMessage();
|
18 |
+
|
19 |
+
if ( ! $message || $message == '' ) {
|
20 |
+
return $response;
|
21 |
+
}
|
22 |
+
|
23 |
+
$currentTransport = PostmanOptions::getInstance()->getTransportType();
|
24 |
+
$result = json_decode($message);
|
25 |
+
$is_json = (json_last_error() == JSON_ERROR_NONE);
|
26 |
+
|
27 |
+
switch ($currentTransport) {
|
28 |
+
case 'gmail_api':
|
29 |
+
$response['message'] = $is_json ? $result->error->message : $message;
|
30 |
+
break;
|
31 |
+
default:
|
32 |
+
$response['message'] = $is_json ? json_encode(json_decode($message), JSON_PRETTY_PRINT) : $message;
|
33 |
+
}
|
34 |
+
}
|
35 |
+
|
36 |
+
return $response;
|
37 |
+
}
|
38 |
+
|
39 |
+
}
|
Postman/Postman-Mail/PostmanMailgunMailEngine.php
CHANGED
@@ -20,7 +20,7 @@ if ( ! class_exists( 'PostmanMailgunMailEngine' ) ) {
|
|
20 |
|
21 |
private $apiKey;
|
22 |
private $domainName;
|
23 |
-
private $
|
24 |
|
25 |
/**
|
26 |
*
|
@@ -153,7 +153,7 @@ if ( ! class_exists( 'PostmanMailgunMailEngine' ) ) {
|
|
153 |
$result = array();
|
154 |
try {
|
155 |
if ( $this->logger->isDebug() ) {
|
156 |
-
$this->logger->debug( 'Creating
|
157 |
}
|
158 |
|
159 |
// send the message
|
@@ -184,7 +184,7 @@ if ( ! class_exists( 'PostmanMailgunMailEngine' ) ) {
|
|
184 |
|
185 |
private function processSend( $mg ) {
|
186 |
|
187 |
-
if ( count( $this->mailgunMessage['to'] )
|
188 |
|
189 |
return $mg->messages()->send( $this->domainName, array_filter( $this->mailgunMessage ) );
|
190 |
} else {
|
20 |
|
21 |
private $apiKey;
|
22 |
private $domainName;
|
23 |
+
private $mailgunMessage;
|
24 |
|
25 |
/**
|
26 |
*
|
153 |
$result = array();
|
154 |
try {
|
155 |
if ( $this->logger->isDebug() ) {
|
156 |
+
$this->logger->debug( 'Creating Mailgun service with apiKey=' . $this->apiKey );
|
157 |
}
|
158 |
|
159 |
// send the message
|
184 |
|
185 |
private function processSend( $mg ) {
|
186 |
|
187 |
+
if ( count( $this->mailgunMessage['to'] ) <= 1 ) {
|
188 |
|
189 |
return $mg->messages()->send( $this->domainName, array_filter( $this->mailgunMessage ) );
|
190 |
} else {
|
Postman/Postman-Mail/PostmanSendGridMailEngine.php
CHANGED
@@ -188,14 +188,16 @@ if ( ! class_exists( 'PostmanSendGridMailEngine' ) ) {
|
|
188 |
|
189 |
$response_body = json_decode( $response->body() );
|
190 |
|
191 |
-
if ( isset( $response_body->errors[0]->message ) ) {
|
192 |
-
|
|
|
|
|
193 |
$this->transcript .= PostmanModuleTransport::RAW_MESSAGE_FOLLOWS;
|
194 |
$this->transcript .= print_r( $mail, true );
|
195 |
|
196 |
$this->logger->debug( 'Transcript=' . $this->transcript );
|
197 |
|
198 |
-
throw new Exception( $
|
199 |
}
|
200 |
$this->transcript = print_r( $response->body(), true );
|
201 |
$this->transcript .= PostmanModuleTransport::RAW_MESSAGE_FOLLOWS;
|
188 |
|
189 |
$response_body = json_decode( $response->body() );
|
190 |
|
191 |
+
if ( isset( $response_body->errors[0]->message ) || $response->statusCode() != 200 ) {
|
192 |
+
|
193 |
+
$e = $response->statusCode() != 200 ? sprintf( __( 'ERROR: Status code is %1$s', Postman::TEXT_DOMAIN ), $response->statusCode() ) : $response_body->errors[0]->message;
|
194 |
+
$this->transcript = $e;
|
195 |
$this->transcript .= PostmanModuleTransport::RAW_MESSAGE_FOLLOWS;
|
196 |
$this->transcript .= print_r( $mail, true );
|
197 |
|
198 |
$this->logger->debug( 'Transcript=' . $this->transcript );
|
199 |
|
200 |
+
throw new Exception( $e );
|
201 |
}
|
202 |
$this->transcript = print_r( $response->body(), true );
|
203 |
$this->transcript .= PostmanModuleTransport::RAW_MESSAGE_FOLLOWS;
|
Postman/Postman.php
CHANGED
@@ -54,6 +54,7 @@ class Postman {
|
|
54 |
require_once 'PostmanConfigTextHelper.php';
|
55 |
require_once 'Postman-Email-Log/PostmanEmailLogPostType.php';
|
56 |
require_once 'Postman-Mail/PostmanMyMailConnector.php';
|
|
|
57 |
//require_once 'Postman-Mail/PostmanWooCommerce.php';
|
58 |
|
59 |
// get plugin metadata - alternative to get_plugin_data
|
@@ -106,6 +107,9 @@ class Postman {
|
|
106 |
// MyMail integration
|
107 |
new PostmanMyMailConnector( $rootPluginFilenameAndPath );
|
108 |
|
|
|
|
|
|
|
109 |
// WooCommerce Integration
|
110 |
//new PostmanWoocommerce();
|
111 |
|
@@ -153,6 +157,7 @@ class Postman {
|
|
153 |
$this,
|
154 |
'on_deactivation',
|
155 |
) );
|
|
|
156 |
}
|
157 |
|
158 |
public function post_smtp_wpml_admin_notice() {
|
@@ -426,7 +431,7 @@ class Postman {
|
|
426 |
// because __FILE__ returns the wrong path if the plugin is installed as a symlink
|
427 |
$shortLocale = substr( get_locale(), 0, 2 );
|
428 |
if ( $shortLocale != 'en' ) {
|
429 |
-
$langDir = '
|
430 |
$success = load_plugin_textdomain( Postman::TEXT_DOMAIN, false, $langDir );
|
431 |
if ( $this->logger->isDebug() ) {
|
432 |
if ( $success ) {
|
54 |
require_once 'PostmanConfigTextHelper.php';
|
55 |
require_once 'Postman-Email-Log/PostmanEmailLogPostType.php';
|
56 |
require_once 'Postman-Mail/PostmanMyMailConnector.php';
|
57 |
+
require_once 'Postman-Mail/PostmanContactForm7.php';
|
58 |
//require_once 'Postman-Mail/PostmanWooCommerce.php';
|
59 |
|
60 |
// get plugin metadata - alternative to get_plugin_data
|
107 |
// MyMail integration
|
108 |
new PostmanMyMailConnector( $rootPluginFilenameAndPath );
|
109 |
|
110 |
+
// Contact form 7
|
111 |
+
new Postsmtp_ContactForm7;
|
112 |
+
|
113 |
// WooCommerce Integration
|
114 |
//new PostmanWoocommerce();
|
115 |
|
157 |
$this,
|
158 |
'on_deactivation',
|
159 |
) );
|
160 |
+
|
161 |
}
|
162 |
|
163 |
public function post_smtp_wpml_admin_notice() {
|
431 |
// because __FILE__ returns the wrong path if the plugin is installed as a symlink
|
432 |
$shortLocale = substr( get_locale(), 0, 2 );
|
433 |
if ( $shortLocale != 'en' ) {
|
434 |
+
$langDir = 'post-smtp/Postman/languages';
|
435 |
$success = load_plugin_textdomain( Postman::TEXT_DOMAIN, false, $langDir );
|
436 |
if ( $this->logger->isDebug() ) {
|
437 |
if ( $success ) {
|
Postman/PostmanUtils.php
CHANGED
@@ -243,6 +243,9 @@ class PostmanUtils {
|
|
243 |
return $success;
|
244 |
}
|
245 |
static function createLockFile( $tempDirectory = null ) {
|
|
|
|
|
|
|
246 |
$path = PostmanUtils::calculateTemporaryLockPath( $tempDirectory );
|
247 |
$success = @fopen( $path, 'xb' );
|
248 |
if ( PostmanUtils::$logger->isTrace() ) {
|
243 |
return $success;
|
244 |
}
|
245 |
static function createLockFile( $tempDirectory = null ) {
|
246 |
+
if ( self::lockFileExists() ) {
|
247 |
+
self::deleteLockFile();
|
248 |
+
}
|
249 |
$path = PostmanUtils::calculateTemporaryLockPath( $tempDirectory );
|
250 |
$success = @fopen( $path, 'xb' );
|
251 |
if ( PostmanUtils::$logger->isTrace() ) {
|
Postman/PostmanViewController.php
CHANGED
@@ -57,7 +57,7 @@ if ( ! class_exists( 'PostmanViewController' ) ) {
|
|
57 |
die();
|
58 |
}
|
59 |
|
60 |
-
echo PostmanUtils::deleteLockFile() == true ? __('Success', Postman::TEXT_DOMAIN ) : __('Failed, try again.', Postman::TEXT_DOMAIN );
|
61 |
die();
|
62 |
}
|
63 |
|
@@ -307,7 +307,7 @@ if ( ! class_exists( 'PostmanViewController' ) ) {
|
|
307 |
echo '
|
308 |
<div class="updated settings-error notice is-dismissible">
|
309 |
<p>
|
310 |
-
<strong>Version ' . $version . ' released with
|
311 |
</p>
|
312 |
<button style="z-index: 100;" data-version="'. $version . '" data-security="' . wp_create_nonce('postsmtp') .'" type="button" class="notice-dismiss postman-release-message">
|
313 |
<span class="screen-reader-text">Dismiss this notice.</span>
|
57 |
die();
|
58 |
}
|
59 |
|
60 |
+
echo PostmanUtils::deleteLockFile() == true ? __('Success, try to send test email.', Postman::TEXT_DOMAIN ) : __('Failed, try again.', Postman::TEXT_DOMAIN );
|
61 |
die();
|
62 |
}
|
63 |
|
307 |
echo '
|
308 |
<div class="updated settings-error notice is-dismissible">
|
309 |
<p>
|
310 |
+
<strong>Version ' . $version . ' released with lockfile fix and new PHP requirement:</strong> <a target="_blank" href="https://postmansmtp.com/post-smtp-v1-8-6-lockfile-and-raise-the-php-version">Read Here</a>
|
311 |
</p>
|
312 |
<button style="z-index: 100;" data-version="'. $version . '" data-security="' . wp_create_nonce('postsmtp') .'" type="button" class="notice-dismiss postman-release-message">
|
313 |
<span class="screen-reader-text">Dismiss this notice.</span>
|
postman-smtp.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Plugin Name: Post SMTP
|
5 |
* Plugin URI: https://wordpress.org/plugins/post-smtp/
|
6 |
* 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!
|
7 |
-
* Version: 1.8.
|
8 |
* Author: Jason Hendriks, Yehuda Hassine
|
9 |
* Text Domain: post-smtp
|
10 |
* Author URI: https://postmansmtp.com
|
@@ -38,9 +38,20 @@
|
|
38 |
define( 'POST_BASE', __FILE__ );
|
39 |
define( 'POST_PATH', __DIR__ );
|
40 |
|
41 |
-
|
|
|
|
|
|
|
42 |
add_action( 'admin_init', 'post_smtp_plugin_deactivate' );
|
43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
} else {
|
45 |
post_start( memory_get_usage() );
|
46 |
}
|
@@ -50,6 +61,20 @@ function post_smtp_plugin_deactivate() {
|
|
50 |
deactivate_plugins( plugin_basename( __FILE__ ) );
|
51 |
}
|
52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
function post_smtp_plugin_admin_notice() {
|
54 |
echo '<div class="error"><p><strong>Post SMTP</strong> plugin is a fork (twin brother) of the original Postman SMTP, you must disable Postman SMTP to use this plugin.</p></div>';
|
55 |
|
@@ -99,5 +124,5 @@ function post_start( $startingMemory ) {
|
|
99 |
*/
|
100 |
function post_setupPostman() {
|
101 |
require_once 'Postman/Postman.php';
|
102 |
-
$kevinCostner = new Postman( __FILE__, '1.8.
|
103 |
}
|
4 |
* Plugin Name: Post SMTP
|
5 |
* Plugin URI: https://wordpress.org/plugins/post-smtp/
|
6 |
* 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!
|
7 |
+
* Version: 1.8.6
|
8 |
* Author: Jason Hendriks, Yehuda Hassine
|
9 |
* Text Domain: post-smtp
|
10 |
* Author URI: https://postmansmtp.com
|
38 |
define( 'POST_BASE', __FILE__ );
|
39 |
define( 'POST_PATH', __DIR__ );
|
40 |
|
41 |
+
$postman_smtp_exist = in_array( 'postman-smtp/postman-smtp.php', (array) get_option( 'active_plugins', array() ) );
|
42 |
+
$required_php_version = version_compare(PHP_VERSION, '5.6.0', '<');
|
43 |
+
|
44 |
+
if ( $postman_smtp_exist || $required_php_version ) {
|
45 |
add_action( 'admin_init', 'post_smtp_plugin_deactivate' );
|
46 |
+
|
47 |
+
if ( $postman_smtp_exist ) {
|
48 |
+
add_action( 'admin_notices', 'post_smtp_plugin_admin_notice' );
|
49 |
+
}
|
50 |
+
|
51 |
+
if ( $required_php_version ) {
|
52 |
+
add_action( 'admin_notices', 'post_smtp_plugin_admin_notice_version' );
|
53 |
+
}
|
54 |
+
|
55 |
} else {
|
56 |
post_start( memory_get_usage() );
|
57 |
}
|
61 |
deactivate_plugins( plugin_basename( __FILE__ ) );
|
62 |
}
|
63 |
|
64 |
+
function post_smtp_plugin_admin_notice_version() {
|
65 |
+
echo '<div class="error">
|
66 |
+
<p>
|
67 |
+
<strong>Post SMTP</strong> plugin require at least PHP version 5.6, contact to your web hostig support to upgrade.
|
68 |
+
</p>
|
69 |
+
<p>
|
70 |
+
<a href="https://secure.php.net/supported-versions.php">See supported versions on PHP.net</a>
|
71 |
+
</p>
|
72 |
+
</div>';
|
73 |
+
|
74 |
+
if ( isset( $_GET['activate'] ) ) {
|
75 |
+
unset( $_GET['activate'] ); }
|
76 |
+
}
|
77 |
+
|
78 |
function post_smtp_plugin_admin_notice() {
|
79 |
echo '<div class="error"><p><strong>Post SMTP</strong> plugin is a fork (twin brother) of the original Postman SMTP, you must disable Postman SMTP to use this plugin.</p></div>';
|
80 |
|
124 |
*/
|
125 |
function post_setupPostman() {
|
126 |
require_once 'Postman/Postman.php';
|
127 |
+
$kevinCostner = new Postman( __FILE__, '1.8.6' );
|
128 |
}
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=yehuda@m
|
|
4 |
Tags: postman smtp, postman, smtp, email, mail, mailer, email log, oauth2, gmail, google apps, hotmail, yahoo, mandrill api, sendgrid api, elastic email, office365, mailgun
|
5 |
Requires at least: 3.9
|
6 |
Tested up to: 4.9.5
|
7 |
-
Stable tag: 1.8.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -12,8 +12,8 @@ Send, log and troubleshoot your Outgoing Email easily. Supports everything: SMTP
|
|
12 |
|
13 |
== Description ==
|
14 |
|
15 |
-
= Version 1.8.
|
16 |
-
|
17 |
|
18 |
= WordPress Mail SMTP Plugin =
|
19 |
|
@@ -81,7 +81,7 @@ SendGrid has a free SMTP plan that you can use to send up to 100 emails per day.
|
|
81 |
* .. and every other plugin that uses the WordPress API [wp_mail](https://codex.wordpress.org/Function_Reference/wp_mail) to send mail!
|
82 |
|
83 |
= Requirements =
|
84 |
-
* WordPress 3.9 and PHP 5.
|
85 |
* Memory: 750KiB per process at idle
|
86 |
* Reliable mail delivery with custom email domains requires an SPF record
|
87 |
* Reliable SMTP delivery requires credentials with an email service provider
|
@@ -297,6 +297,11 @@ To avoid being flagged as spam, you need to prove your email isn't forged. On a
|
|
297 |
|
298 |
== Changelog ==
|
299 |
|
|
|
|
|
|
|
|
|
|
|
300 |
= 1.8.5 - 2018-04-19
|
301 |
* Remove Beta Woocommerce integration
|
302 |
* Better check for WPML less then version 3.9
|
4 |
Tags: postman smtp, postman, smtp, email, mail, mailer, email log, oauth2, gmail, google apps, hotmail, yahoo, mandrill api, sendgrid api, elastic email, office365, mailgun
|
5 |
Requires at least: 3.9
|
6 |
Tested up to: 4.9.5
|
7 |
+
Stable tag: 1.8.6
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
12 |
|
13 |
== Description ==
|
14 |
|
15 |
+
= Version 1.8.6 released =
|
16 |
+
Lockfile, Contact form 7 and raise the PHP version. [Read the detailes here](https://postmansmtp.com/post-smtp-v1-8-6-lockfile-and-raise-the-php-version/)
|
17 |
|
18 |
= WordPress Mail SMTP Plugin =
|
19 |
|
81 |
* .. and every other plugin that uses the WordPress API [wp_mail](https://codex.wordpress.org/Function_Reference/wp_mail) to send mail!
|
82 |
|
83 |
= Requirements =
|
84 |
+
* WordPress 3.9 and PHP 5.6 with SPL and iconv
|
85 |
* Memory: 750KiB per process at idle
|
86 |
* Reliable mail delivery with custom email domains requires an SPF record
|
87 |
* Reliable SMTP delivery requires credentials with an email service provider
|
297 |
|
298 |
== Changelog ==
|
299 |
|
300 |
+
= 1.8.6 - 2018-04-24
|
301 |
+
* Fix lockfile erros
|
302 |
+
* Contact form 7 integration
|
303 |
+
* PHP 5.6 requirement
|
304 |
+
|
305 |
= 1.8.5 - 2018-04-19
|
306 |
* Remove Beta Woocommerce integration
|
307 |
* Better check for WPML less then version 3.9
|
style/testEmail.html
CHANGED
@@ -25,7 +25,7 @@
|
|
25 |
<div
|
26 |
style="max-width: 600px; height: 400px; margin: 0 auto; overflow: hidden;background-image:url('http://plugins.svn.wordpress.org/postman-smtp/assets/email/poofytoo.png');background-repeat: no-repeat;">
|
27 |
<div style="margin:50px 0 0 300px; width:300px; font-size:2em;">Hello! - 你好 - Bonjour! - नमस्ते - ¡Hola! - Olá - Привет! - 今日は</div>
|
28 |
-
<div style="text-align:right;font-size: 1.4em; color:black;margin:150px 0 0 200px;">Sent by <em>Postman</em> v1.5.6<br/><span style="font-size: 0.8em"><a style="color:#3f73b9" href="https://wordpress.org/plugins/
|
29 |
</div>
|
30 |
</td>
|
31 |
</tr>
|
25 |
<div
|
26 |
style="max-width: 600px; height: 400px; margin: 0 auto; overflow: hidden;background-image:url('http://plugins.svn.wordpress.org/postman-smtp/assets/email/poofytoo.png');background-repeat: no-repeat;">
|
27 |
<div style="margin:50px 0 0 300px; width:300px; font-size:2em;">Hello! - 你好 - Bonjour! - नमस्ते - ¡Hola! - Olá - Привет! - 今日は</div>
|
28 |
+
<div style="text-align:right;font-size: 1.4em; color:black;margin:150px 0 0 200px;">Sent by <em>Postman</em> v1.5.6<br/><span style="font-size: 0.8em"><a style="color:#3f73b9" href="https://wordpress.org/plugins/post-smtp/">https://wordpress.org/plugins/post-smtp/</a></span></div>
|
29 |
</div>
|
30 |
</td>
|
31 |
</tr>
|