PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.12
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.12
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
formidable / classes / controllers / FrmSMTPController.php

FrmSMTPController.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 6.12, at classes/controllers/FrmSMTPController.php

563 lines 16.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 die( 'You are not allowed to call this page directly.' );
4 }
5
6 /**
7 * SMTP Sub-page.
8 *
9 * @since 4.04.04
10 */
11 class FrmSMTPController {
12
13 /**
14 * Admin menu page slug.
15 *
16 * @since 4.04.04
17 *
18 * @var string
19 */
20 private $slug = 'formidable-smtp';
21
22 /**
23 * @since 4.04.04
24 *
25 * @var array
26 */
27 private $config = array(
28 'lite_plugin' => 'wp-mail-smtp/wp_mail_smtp.php',
29 'lite_download_url' => 'https://downloads.wordpress.org/plugin/wp-mail-smtp.zip',
30 'pro_plugin' => 'wp-mail-smtp-pro/wp_mail_smtp.php',
31 'smtp_settings' => 'admin.php?page=wp-mail-smtp',
32 );
33
34 /**
35 * Runtime data used for generating page HTML.
36 *
37 * @since 4.04.04
38 *
39 * @var array
40 */
41 private $output_data = array();
42
43 /**
44 * Hooks.
45 *
46 * @since 4.04.04
47 *
48 * @return void
49 */
50 public static function load_hooks() {
51
52 add_filter( 'wp_mail_smtp_is_white_labeled', '__return_true' );
53
54 $self = new self();
55 if ( wp_doing_ajax() ) {
56 add_action( 'wp_ajax_frm_smtp_page_check_plugin_status', array( $self, 'ajax_check_plugin_status' ) );
57 }
58
59 add_filter( 'wp_mail_smtp_core_get_upgrade_link', array( $self, 'link' ) );
60 add_action( 'admin_menu', array( $self, 'menu' ), 999 );
61 add_action( 'wp_mail_smtp_core_recommendations_plugins', 'FrmSMTPController::remove_wpforms_nag' );
62
63 // Only load if we are actually on the SMTP page.
64 if ( ! FrmAppHelper::is_admin_page( $self->slug ) ) {
65 return;
66 }
67
68 add_action( 'admin_init', array( $self, 'redirect_to_smtp_settings' ) );
69
70 // Hook for addons.
71 do_action( 'frm_admin_pages_smtp_hooks' );
72 }
73
74 /**
75 * Customize the upgrade link.
76 *
77 * @return string
78 */
79 public function link( $link ) {
80 $new_link = 'formidableforms.com/go-wp-mail-smtp/?urllink=wpmailsmtp%2Ecom%2Flite%2Dupgrade&';
81 $link = str_replace( 'wpmailsmtp.com/lite-upgrade/?', $new_link, $link );
82 return $link;
83 }
84
85 /**
86 * Don't nag people to install WPForms
87 *
88 * @since 4.04.04
89 */
90 public static function remove_wpforms_nag( $upsell ) {
91 if ( is_array( $upsell ) ) {
92 foreach ( $upsell as $k => $plugin ) {
93 if ( strpos( $plugin['slug'], 'wpforms' ) !== false ) {
94 unset( $upsell[ $k ] );
95 }
96 }
97 }
98
99 return $upsell;
100 }
101
102 /**
103 * SMTP submenu page.
104 *
105 * @return void
106 */
107 public function menu() {
108 add_submenu_page( 'formidable', __( 'SMTP', 'formidable' ) . ' | Formidable', __( 'SMTP', 'formidable' ), 'activate_plugins', $this->slug, array( $this, 'output' ) );
109 }
110
111 /**
112 * Generate and output page HTML.
113 *
114 * @since 4.04.04
115 *
116 * @return void
117 */
118 public function output() {
119 FrmAppHelper::include_svg();
120 $this->css();
121
122 echo '<div id="frm-admin-smtp" class="wrap frm-wrap frm-admin-plugin-landing">';
123
124 $this->output_section_heading();
125 $this->output_section_screenshot();
126 $this->output_section_step_install();
127 $this->output_section_step_setup();
128
129 echo '</div>';
130 }
131
132 /**
133 * Generate and output heading section HTML.
134 *
135 * @since 4.04.04
136 *
137 * @return void
138 */
139 protected function output_section_heading() {
140 $size = array(
141 'height' => 90,
142 'width' => 90,
143 );
144
145 // Heading section.
146 ?>
147 <section class="top">
148 <div class="frm-smtp-logos">
149 <?php
150 FrmAppHelper::show_logo( $size );
151 FrmAppHelper::icon_by_class(
152 'frmfont frm_heart_solid_icon',
153 array(
154 'aria-label' => 'Loves',
155 'style' => 'width:30px;height:30px;margin:0 35px;',
156 'color' => '#d11c25',
157 )
158 );
159 $this->stmp_logo();
160 ?>
161 </div>
162 <h1><?php esc_html_e( 'Making Email Deliverability Easy for WordPress', 'formidable' ); ?></h1>
163 <p><?php esc_html_e( 'WP Mail SMTP allows you to easily set up WordPress to use a trusted provider to reliably send emails, including form notifications.', 'formidable' ); ?></p>
164 </section>
165 <?php
166 }
167
168 /**
169 * Generate and output screenshot section HTML.
170 *
171 * @since 4.04.04
172 *
173 * @return void
174 */
175 protected function output_section_screenshot() {
176
177 printf(
178 '<section class="screenshot">
179 <div class="cont">
180 <img src="%1$s" alt="%2$s"/>
181 </div>
182 <ul>
183 <li>%3$s %4$s</li>
184 <li>%3$s %5$s</li>
185 <li>%3$s %6$s</li>
186 <li>%3$s %7$s</li>
187 </ul>
188 </section>',
189 esc_url( FrmAppHelper::plugin_url() . '/images/smtp-screenshot-tnail.png' ),
190 esc_attr__( 'WP Mail SMTP screenshot', 'formidable' ),
191 '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 492 492" width="14" height="14"><path d="M484 227L306 49a27 27 0 00-38 0l-16 16a27 27 0 000 38l104 105H27c-15 0-27 11-27 26v23c0 15 12 27 27 27h330L252 389a27 27 0 000 38l16 16a27 27 0 0038 0l178-178a27 27 0 000-38z" fill="#5bbfa5"/></svg> &nbsp;',
192 esc_html__( 'Over 1,000,000 websites use WP Mail SMTP.', 'formidable' ),
193 esc_html__( 'Send emails authenticated via trusted parties.', 'formidable' ),
194 esc_html__( 'Transactional Mailers: Pepipost, SendinBlue, Mailgun, SendGrid, Amazon SES.', 'formidable' ),
195 esc_html__( 'Web Mailers: Gmail, G Suite, Office 365, Outlook.com.', 'formidable' )
196 );
197 }
198
199 /**
200 * Generate and output step 'Install' section HTML.
201 *
202 * @since 4.04.04
203 *
204 * @return void
205 */
206 protected function output_section_step_install() {
207
208 $step = $this->get_data_step_install();
209
210 if ( empty( $step ) ) {
211 return;
212 }
213
214 $icon = FrmAppHelper::icon_by_class(
215 'frmfont ' . $step['icon'],
216 array(
217 'aria-label' => __( 'Step 1', 'formidable' ),
218 'echo' => false,
219 'style' => 'width:50px;height:50px;',
220 )
221 );
222
223 /* translators: %s: Name of the plugin */
224 $label = sprintf( __( 'Install and Activate %s', 'formidable' ), 'WP Mail SMTP' );
225
226 printf(
227 '<section class="step step-install">
228 <aside class="num">
229 %1$s
230 <i class="loader hidden"></i>
231 </aside>
232 <div>
233 <h2>%2$s</h2>
234 <p>%3$s</p>
235 <span><a rel="%4$s" class="button button-primary frm-button-primary %5$s" aria-label="%6$s">%7$s</a></span>
236 </div>
237 </section>',
238 FrmAppHelper::kses( $icon, array( 'a', 'i', 'span', 'use', 'svg' ) ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
239 esc_html( $label ),
240 esc_html__( 'Install WP Mail SMTP from the WordPress.org plugin repository.', 'formidable' ),
241 esc_attr( $step['plugin'] ),
242 esc_attr( $step['button_class'] ),
243 esc_attr( $step['button_action'] ),
244 esc_html( $step['button_text'] )
245 );
246 }
247
248 /**
249 * Generate and output step 'Setup' section HTML.
250 *
251 * @since 4.04.04
252 *
253 * @return void
254 */
255 protected function output_section_step_setup() {
256
257 $step = $this->get_data_step_setup();
258
259 if ( empty( $step ) ) {
260 return;
261 }
262
263 $icon = FrmAppHelper::icon_by_class(
264 'frmfont ' . $step['icon'],
265 array(
266 'aria-label' => __( 'Step 2', 'formidable' ),
267 'echo' => false,
268 'style' => 'width:50px;height:50px;',
269 )
270 );
271
272 printf(
273 '<section class="step step-setup %1$s">
274 <aside class="num">
275 %2$s
276 <i class="loader hidden"></i>
277 </aside>
278 <div>
279 <h2>%3$s</h2>
280 <p>%4$s</p>
281 <span><a href="%5$s" class="button button-primary frm-button-primary %6$s">%7$s</a></span>
282 </div>
283 </section>',
284 esc_attr( $step['section_class'] ),
285 FrmAppHelper::kses( $icon, array( 'a', 'i', 'span', 'use', 'svg' ) ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
286 esc_html__( 'Set Up WP Mail SMTP', 'formidable' ),
287 esc_html__( 'Select and configure your mailer.', 'formidable' ),
288 esc_url( admin_url( $this->config['smtp_settings'] ) ),
289 esc_attr( $step['button_class'] ),
290 esc_html( $step['button_text'] )
291 );
292 }
293
294 /**
295 * Step 'Install' data.
296 *
297 * @since 4.04.04
298 *
299 * @return array Step data.
300 */
301 protected function get_data_step_install() {
302
303 $lite_plugin = new FrmInstallPlugin( array( 'plugin_file' => $this->config['lite_plugin'] ) );
304 $pro_plugin = new FrmInstallPlugin( array( 'plugin_file' => $this->config['pro_plugin'] ) );
305
306 $this->output_data['plugin_installed'] = $lite_plugin->is_installed();
307 $this->output_data['pro_plugin_installed'] = $pro_plugin->is_installed();
308 $this->output_data['plugin_activated'] = false;
309 $this->output_data['plugin_setup'] = false;
310
311 $step = array(
312 'icon' => 'frm_step1_icon',
313 'button_action' => '',
314 );
315
316 $is_installed = $this->output_data['plugin_installed'] || $this->output_data['pro_plugin_installed'];
317 if ( ! $is_installed ) {
318 // Return the download url.
319 $step['button_text'] = __( 'Install WP Mail SMTP', 'formidable' );
320 $step['button_class'] = 'frm-install-addon';
321 $step['button_action'] = __( 'Install', 'formidable' );
322 $step['plugin'] = $this->config['lite_download_url'];
323 return $step;
324 }
325
326 $this->output_data['plugin_activated'] = $this->is_smtp_activated();
327 $this->output_data['plugin_setup'] = $this->is_smtp_configured();
328
329 $step['plugin'] = $this->output_data['pro_plugin_installed'] ? $this->config['pro_plugin'] : $this->config['lite_plugin'];
330
331 if ( $this->output_data['plugin_activated'] ) {
332 $step['icon'] = 'frm_step_complete_icon';
333 $step['button_text'] = __( 'WP Mail SMTP Installed & Activated', 'formidable' );
334 $step['button_class'] = 'grey disabled';
335 } else {
336 $step['button_text'] = __( 'Activate WP Mail SMTP', 'formidable' );
337 $step['button_class'] = 'frm-activate-addon';
338 $step['button_action'] = __( 'Activate', 'formidable' );
339 }
340
341 return $step;
342 }
343
344 /**
345 * Step 'Setup' data.
346 *
347 * @since 4.04.04
348 *
349 * @return array Step data.
350 */
351 protected function get_data_step_setup() {
352
353 $step = array();
354
355 $step['icon'] = 'frm_step2_icon';
356 $step['section_class'] = $this->output_data['plugin_activated'] ? '' : 'grey';
357 $step['button_text'] = esc_html__( 'Start Setup', 'formidable' );
358 $step['button_class'] = 'grey disabled';
359
360 if ( $this->output_data['plugin_setup'] ) {
361 $step['icon'] = 'frm_step_complete_icon';
362 $step['section_class'] = '';
363 $step['button_text'] = esc_html__( 'Go to SMTP settings', 'formidable' );
364 } elseif ( $this->output_data['plugin_activated'] ) {
365 $step['button_class'] = '';
366 }
367
368 return $step;
369 }
370
371 /**
372 * Whether WP Mail SMTP plugin configured or not.
373 *
374 * @since 4.04.04
375 *
376 * @return bool True if some mailer is selected and configured properly.
377 */
378 protected function is_smtp_configured() {
379
380 if ( ! $this->is_smtp_activated() ) {
381 return false;
382 }
383
384 $phpmailer = $this->get_phpmailer();
385
386 $mailer = WPMailSMTP\Options::init()->get( 'mail', 'mailer' );
387 $is_mailer_complete = wp_mail_smtp()->get_providers()->get_mailer( $mailer, $phpmailer )->is_mailer_complete();
388
389 return 'mail' !== $mailer && $is_mailer_complete;
390 }
391
392 /**
393 * Whether WP Mail SMTP plugin active or not.
394 *
395 * @since 4.04.04
396 *
397 * @return bool True if SMTP plugin is active.
398 */
399 protected function is_smtp_activated() {
400 return function_exists( 'wp_mail_smtp' ) && ( is_plugin_active( $this->config['lite_plugin'] ) || is_plugin_active( $this->config['pro_plugin'] ) );
401 }
402
403 /**
404 * Get $phpmailer instance.
405 *
406 * @since 4.04.04
407 *
408 * @return PHPMailer|\WPMailSMTP\Providers\MailCatcherInterface Instance of PHPMailer.
409 */
410 protected function get_phpmailer() {
411 global $phpmailer;
412
413 if ( ! is_object( $phpmailer ) || ! is_a( $phpmailer, 'PHPMailer' ) ) {
414 if ( is_callable( array( wp_mail_smtp(), 'generate_mail_catcher' ) ) ) {
415 $phpmailer = wp_mail_smtp()->generate_mail_catcher( true ); // phpcs:ignore
416 } else {
417 require_once ABSPATH . WPINC . '/class-phpmailer.php';
418 $phpmailer = new PHPMailer( true ); // phpcs:ignore
419 }
420 }
421
422 return $phpmailer;
423 }
424
425 /**
426 * Redirect to SMTP settings page if it is activated..
427 *
428 * @since 4.04.04
429 *
430 * @return void
431 */
432 public function redirect_to_smtp_settings() {
433 if ( $this->is_smtp_configured() ) {
434 wp_safe_redirect( admin_url( $this->config['smtp_settings'] ) );
435 exit;
436 }
437 }
438
439 /**
440 * @return void
441 */
442 private function stmp_logo() {
443 ?>
444 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" height="90" width="90"><defs><style>.cls-11,.cls-12{fill-rule:evenodd}.cls-4{fill:none}.cls-11{fill:#86a196}.cls-12{fill:#fff}</style></defs><path class="cls-4" d="M-6.3 0h60v60h-60z"/><path d="M16.7 8.1a15.4 15.4 0 00-8 10.2 23.5 23.5 0 1030 0 15.4 15.4 0 00-9.3-10.8 3.4 3.4 0 00-2.1-2.7A4.6 4.6 0 0018.4 3a24.4 24.4 0 00-1.7 5z" fill="#395360" fill-rule="evenodd"/><path fill="#fbaa6f" d="M18 26h12v14H18z"/><path d="M25.9 33.2l-.1-.1a1.4 1.4 0 111.6-2.3 1.9 1.9 0 00-1.2.8 1.9 1.9 0 00-.3 1.6zm-4.5 0a1.8 1.8 0 00-.4-1.6 2 2 0 00-1.2-.8 1.4 1.4 0 011.6 2.3zm7.2-3.2h.5l-1 4.8-2.2 6.5h-4.3l-3.2-5.4 1.1-3.2 2.1 2.7c.6.5 2.7.5 3.8-.6a26.2 26.2 0 003.2-4.8z" fill="#dc7f3c" fill-rule="evenodd"/><path d="M9.7 29H15v-9h-4a13 13 0 017.4-10q1.2-5 2.8-6.8l.1-.1.1-.1a2.3 2.3 0 011.1-.5 2.3 2.3 0 012.2 3.8 1.6 1.6 0 01-.4.3A15 15 0 0023 8a5 5 0 013-1.5 1.4 1.4 0 01.7.2 1.3 1.3 0 01.5 1.8 1.3 1.3 0 01-.6.6 13 13 0 0110.1 11l.1.8H33v8h4.8l1.8 13.4q-6.3 4-15.8 4T8 42.4zM25 38.4q3.8-6.4 3.8-7.6c0-2.2-3.2-4-4.8-4s-4.9 1.7-4.9 4q0 1.2 3.8 7.6a1.2 1.2 0 001 .6 1 1 0 001-.6z" fill="#bdcfc8" fill-rule="evenodd"/><path class="cls-4" d="M19 31h9.6L27 47.2h-6.4l-1.6-16z"/><path d="M39.8 48.8a20 20 0 01-32 0l.8-6a2.7 2.7 0 001 .1 2.8 2.8 0 002.8-2.4v1.2a2.8 2.8 0 005.6 0v1.6a2.9 2.9 0 005.7 0 2.8 2.8 0 005.7 0v-1.6a2.8 2.8 0 105.7 0v-1.2A2.8 2.8 0 0038 43a2.9 2.9 0 001-.2l.8 6z" fill="#809eb0" fill-rule="evenodd"/><path d="M8.3 44.6l.3-1.8a2.7 2.7 0 001 .2 2.8 2.8 0 002.8-2.5v1.2a2.8 2.8 0 005.7 0v1.7a2.9 2.9 0 005.6 0 2.8 2.8 0 005.7 0v-1.7a2.8 2.8 0 105.7 0v-1.2A2.8 2.8 0 0038 43a2.9 2.9 0 001-.2l.3 2a2.9 2.9 0 01-4.1-2.2v1.2a2.8 2.8 0 11-5.7 0v1.6a2.8 2.8 0 01-5.7 0 2.9 2.9 0 01-5.7 0v-1.7a2.8 2.8 0 01-5.7 0v-1.2A2.8 2.8 0 019.6 45a2.9 2.9 0 01-1.3-.3z" fill="#738e9e" fill-rule="evenodd"/><path class="cls-11" d="M37.8 22.4c-1-2.9-3-4.7-4.7-4.5-2.2.2-2.8 3.7-2.3 8s1.7 7.5 3.9 7.3 4-3.9 3.6-8c0 1.2-.5 2.3-1.3 2.4-1.2 0-1.5-1.2-1.6-2.9s-.2-3 1-3a1.5 1.5 0 011.4.7z"/><path class="cls-12" d="M37 21.8c-.6-1.3-1.5-2-2.4-1.9-1.5.1-1.9 2.6-1.6 5.5s1.2 5.1 2.7 5c1.1-.2 2-1.5 2.2-3.4a1.2 1.2 0 01-1 .6c-1 0-1.4-1.2-1.5-2.9s-.1-3 1-3a1.6 1.6 0 01.6 0z"/><path class="cls-11" d="M9.6 22.4c1-2.9 3-4.7 4.7-4.5 2.2.2 2.8 3.7 2.3 8s-1.7 7.5-3.9 7.3-4-3.9-3.7-8c.1 1.2.5 2.3 1.4 2.4 1.1 0 1.5-1.2 1.6-2.9s.1-3-1-3a1.5 1.5 0 00-1.4.7z"/><path class="cls-12" d="M10.4 21.8c.6-1.3 1.5-2 2.4-1.9 1.5.1 1.8 2.6 1.5 5.5s-1.1 5.1-2.6 5c-1.1-.2-2-1.5-2.2-3.4a1.2 1.2 0 00.9.6c1.1 0 1.4-1.2 1.6-2.9s.1-3-1-3a1.7 1.7 0 00-.7 0z"/><path d="M19 28.6a5.3 5.3 0 010-.7c0-2.4 1.2-5.2 4.9-5.2s4.8 2.8 4.8 5.2a4.4 4.4 0 010 1c-.9-1.3-2.4-2.1-4.9-2.1-2.4 0-3.9.7-4.8 1.8z" fill="#f4f8ff" fill-rule="evenodd"/><path class="cls-11" d="M26.5 9.2L23.3 9l4-1.2a1.4 1.4 0 01-.8 1.4zm-3.5-1l-1.3 1a16.8 16.8 0 002-3.8 6.6 6.6 0 00.3-2.7A2.4 2.4 0 0125.2 5a2.4 2.4 0 01-.7 1.5A15 15 0 0023 8.1z"/></svg>
445 <?php
446 }
447
448 /**
449 * @return void
450 */
451 private function css() {
452 ?>
453 <style>
454 #frm-admin-smtp *, #frm-admin-smtp *::before, #frm-admin-smtpp *::after {
455 box-sizing: border-box;
456 }
457 #frm-admin-smtp{
458 width: 700px;
459 margin: 0 auto;
460 }
461 #frm-admin-smtp p {
462 font-size: 15px;
463 }
464 #frm-admin-smtp section{
465 margin: 50px 0;
466 text-align: left;
467 clear: both;
468 }
469 #frm-admin-smtp .top{
470 text-align: center;
471 }
472 .frm-smtp-logos {
473 margin-bottom: 38px;
474 }
475 .frm-smtp-logos svg {
476 vertical-align: middle;
477 }
478 #frm-admin-smtp .top h1 {
479 font-size: 26px;
480 font-weight: 600;
481 margin-bottom: 0;
482 padding: 0;
483 }
484 #frm-admin-smtp .top p {
485 font-size: 17px;
486 color: #777;
487 margin-top: .5em;
488 }
489 #frm-admin-smtp .screenshot ul {
490 display: inline-block;
491 margin: 0 0 0 30px;
492 list-style-type: none;
493 max-width: calc(100% - 350px);
494 }
495 #frm-admin-smtp .screenshot li {
496 margin: 16px 0;
497 padding: 0;
498 font-size: 15px;
499 color: #777;
500 }
501 #frm-admin-smtp .screenshot .cont img {
502 max-width: 100%;
503 display: block;
504 }
505 #frm-admin-smtp .screenshot .cont {
506 display: inline-block;
507 position: relative;
508 width: 315px;
509 padding: 5px;
510 background-color: #fff;
511 border-radius: 3px;
512 }
513 #frm-admin-smtp .step,
514 #frm-admin-smtp .screenshot .cont {
515 box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
516 }
517 #frm-admin-smtp .step {
518 background-color: #F9F9F9;
519 border: 1px solid #E5E5E5;
520 margin: 0 0 25px;
521 }
522 #frm-admin-smtp .screenshot > *,
523 #frm-admin-smtp .step > * {
524 vertical-align: middle;
525 }
526 #frm-admin-smtp .step p {
527 font-size: 16px;
528 color: #777777;
529 }
530 #frm-admin-smtp .step .num {
531 display: inline-block;
532 position: relative;
533 width: 100px;
534 height: 50px;
535 text-align: center;
536 }
537 #frm-admin-smtp .step div {
538 display: inline-block;
539 width: calc(100% - 104px);
540 background-color: #fff;
541 padding: 30px;
542 border-left: 1px solid #eee;
543 }
544 #frm-admin-smtp .grey {
545 opacity: 0.5;
546 background: #F6F6F6 !important;
547 border-color: #ddd !important;
548 color: #9FA5AA !important;
549 }
550 #frm-admin-smtp .step h2 {
551 font-size: 24px;
552 line-height: 22px;
553 margin-top: 0;
554 margin-bottom: 15px;
555 }
556 #frm-admin-smtp .button.disabled {
557 cursor: default;
558 }
559 </style>
560 <?php
561 }
562 }
563