PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 8.2.2
Admin and Site Enhancements (ASE) v8.2.2
9.1.0 9.0.2 9.0.1 9.0.0 8.9.2 8.9.1 8.9.0 8.8.8 8.8.7 8.8.6 8.8.5 8.8.4 8.8.3 8.8.2 8.8.1 8.8.0 8.7.3 8.7.2 8.7.1 8.2.1 8.2.2 8.2.3 8.3.0 8.3.1 8.3.2 8.4.0 8.4.1 8.4.2 8.5.0 8.5.1 8.5.2 8.6.0 8.6.1 8.6.2 8.7.0 5.0.1 5.0.2 5.0.2.1 5.0.2.2 5.0.2.3 5.0.2.4 5.1.0 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.8.0 5.8.1 6.0.0 6.0.3 6.0.4 6.0.5 6.0.5.1 6.0.6 6.0.7 6.0.8.1 6.1.0 6.1.3 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.3.0 6.3.1 6.3.2 6.4.0 6.5.0 6.5.1 6.6.0 6.7.0 6.8.0 6.8.2 6.8.3 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13.1 6.9.13.2 6.9.2 6.9.3 6.9.4 6.9.5 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.2 7.0.2.1 7.0.2.2 7.0.2.3 7.0.3 7.1.0 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2.0 7.2.1 7.3.0 7.3.1 7.3.2 7.3.3 7.4.0 7.4.2 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.5.0 7.5.1 7.5.2 7.5.3 7.5.4 7.6.0 7.6.1 7.6.1.1 7.6.10 7.6.11 7.6.2 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.7.1 7.6.8 7.6.9 7.7.0 7.8.0 7.8.1 7.8.10 7.8.11 7.8.12 7.8.13 7.8.14 7.8.15 7.8.16 7.8.17 7.8.18 7.8.2 7.8.3 7.8.4 7.8.5 7.8.5.1 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1 7.9.10 7.9.11 7.9.2 7.9.3 7.9.4 7.9.5 7.9.6 7.9.7 7.9.8 7.9.9 8.0.0 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.0.6 8.0.7 8.0.8 8.1.0 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 trunk 1.0.0 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0 1.6.0 1.7.0 1.8.0 1.9.0 2.0.0 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.1 3.7.0 3.8.0 3.9.0 3.9.1 3.9.2 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.9.0 4.9.1 4.9.2 4.9.3 5.0.0
admin-site-enhancements / classes / class-email-delivery.php
admin-site-enhancements / classes Last commit date
class-activation.php 7 months ago class-admin-menu-organizer.php 7 months ago class-admin-menu-svg-icon-mask.php 7 months ago class-auto-publish-posts-with-missed-schedule.php 7 months ago class-avif-upload.php 7 months ago class-captcha-protection.php 7 months ago class-change-login-url.php 7 months ago class-cleanup-admin-bar.php 7 months ago class-common-methods.php 7 months ago class-content-duplication.php 7 months ago class-content-order.php 7 months ago class-custom-admin-footer-text.php 7 months ago class-custom-body-class.php 7 months ago class-custom-css.php 7 months ago class-custom-nav-menu-items-in-new-tab.php 7 months ago class-deactivation.php 7 months ago class-disable-author-archives.php 7 months ago class-disable-comments.php 7 months ago class-disable-dashboard-widgets.php 7 months ago class-disable-embeds.php 7 months ago class-disable-feeds.php 7 months ago class-disable-gutenberg.php 7 months ago class-disable-rest-api.php 7 months ago class-disable-smaller-components.php 7 months ago class-disable-updates.php 7 months ago class-disable-xml-rpc.php 7 months ago class-display-system-summary.php 7 months ago class-email-address-obfuscator.php 7 months ago class-email-delivery.php 7 months ago class-enhance-list-tables.php 7 months ago class-external-permalinks.php 7 months ago class-heartbeat-control.php 7 months ago class-hide-admin-bar.php 7 months ago class-hide-admin-notices.php 7 months ago class-image-sizes-panel.php 7 months ago class-image-upload-control.php 7 months ago class-insert-head-body-footer-code.php 7 months ago class-last-login-column.php 7 months ago class-limit-login-attempts.php 7 months ago class-login-id-type.php 7 months ago class-login-logout-menu.php 7 months ago class-maintenance-mode.php 7 months ago class-manage-ads-appads-txt.php 7 months ago class-manage-robots-txt.php 7 months ago class-media-replacement.php 7 months ago class-multiple-user-roles.php 7 months ago class-obfuscate-author-slugs.php 7 months ago class-open-external-links-in-new-tab.php 7 months ago class-password-protection.php 7 months ago class-redirect-after-login.php 7 months ago class-redirect-after-logout.php 7 months ago class-redirect-fourofour.php 7 months ago class-registration-date-column.php 7 months ago class-revisions-control.php 7 months ago class-search-engines-visibility.php 7 months ago class-settings-fields-render.php 7 months ago class-settings-sanitization.php 7 months ago class-settings-sections-fields.php 7 months ago class-show-custom-taxonomy-filters.php 7 months ago class-site-identity-on-login-page.php 7 months ago class-svg-upload.php 7 months ago class-various-admin-ui-enhancements.php 7 months ago class-view-admin-as-role.php 7 months ago class-wider-admin-menu.php 7 months ago class-wp-config-transformer.php 7 months ago
class-email-delivery.php
184 lines
1 <?php
2
3 namespace ASENHA\Classes;
4
5 use WP_Error;
6 use ASENHA\EmailDelivery\Email_Log_Table;
7 /**
8 * Class for Email Delivery module
9 *
10 * @since 6.9.5
11 */
12 class Email_Delivery {
13 private $log_entry_id;
14
15 /**
16 * Send emails using external SMTP service
17 *
18 * @since 4.6.0
19 */
20 public function deliver_email_via_smtp( $phpmailer ) {
21 $options = get_option( ASENHA_SLUG_U, array() );
22 $smtp_host = $options['smtp_host'];
23 $smtp_port = $options['smtp_port'];
24 $smtp_security = $options['smtp_security'];
25 $smtp_authentication = ( isset( $options['smtp_authentication'] ) ? $options['smtp_authentication'] : 'enable' );
26 $smtp_username = $options['smtp_username'];
27 $smtp_password = $options['smtp_password'];
28 $smtp_default_from_name = $options['smtp_default_from_name'];
29 $smtp_default_from_email = $options['smtp_default_from_email'];
30 $smtp_force_from = $options['smtp_force_from'];
31 $smtp_bypass_ssl_verification = $options['smtp_bypass_ssl_verification'];
32 $smtp_debug = $options['smtp_debug'];
33 // Do nothing if host or password is empty
34 // if ( empty( $smtp_host ) || empty( $smtp_password ) ) {
35 // return;
36 // }
37 // Maybe override FROM email and/or name if the sender is "WordPress <wordpress@sitedomain.com>", the default from WordPress core and not yet overridden by another plugin.
38 $from_name = $phpmailer->FromName;
39 $from_email_beginning = substr( $phpmailer->From, 0, 9 );
40 // Get the first 9 characters of the current FROM email
41 if ( $smtp_force_from ) {
42 $phpmailer->FromName = $smtp_default_from_name;
43 $phpmailer->From = $smtp_default_from_email;
44 // WP 6.9 fix. Ref: https://make.wordpress.org/core/2025/11/18/more-reliable-email-in-wordpress-6-9/
45 $phpmailer->Sender = $smtp_default_from_email;
46 $phpmailer->ReturnPath = $smtp_default_from_email;
47 } else {
48 if ( 'WordPress' === $from_name && !empty( $smtp_default_from_name ) ) {
49 $phpmailer->FromName = $smtp_default_from_name;
50 }
51 if ( 'wordpress' === $from_email_beginning && !empty( $smtp_default_from_email ) ) {
52 $phpmailer->From = $smtp_default_from_email;
53 // WP 6.9 fix. Ref: https://make.wordpress.org/core/2025/11/18/more-reliable-email-in-wordpress-6-9/
54 $phpmailer->Sender = $smtp_default_from_email;
55 $phpmailer->ReturnPath = $smtp_default_from_email;
56 }
57 }
58 // Only attempt to send via SMTP if all the required info is present. Otherwise, use default PHP Mailer settings as set by wp_mail()
59 if ( !empty( $smtp_host ) && !empty( $smtp_port ) && !empty( $smtp_security ) ) {
60 // Send using SMTP
61 $phpmailer->isSMTP();
62 // phpcs:ignore
63 if ( 'enable' == $smtp_authentication ) {
64 $phpmailer->SMTPAuth = true;
65 // phpcs:ignore
66 } else {
67 $phpmailer->SMTPAuth = false;
68 // phpcs:ignore
69 }
70 // Set some other defaults
71 // $phpmailer->CharSet = 'utf-8'; // phpcs:ignore
72 $phpmailer->XMailer = 'Admin and Site Enhancements v' . ASENHA_VERSION . ' - a WordPress plugin';
73 // phpcs:ignore
74 $phpmailer->Host = $smtp_host;
75 // phpcs:ignore
76 $phpmailer->Port = $smtp_port;
77 // phpcs:ignore
78 $phpmailer->SMTPSecure = $smtp_security;
79 // phpcs:ignore
80 if ( 'enable' == $smtp_authentication ) {
81 $phpmailer->Username = trim( $smtp_username );
82 // phpcs:ignore
83 $phpmailer->Password = trim( $smtp_password );
84 // phpcs:ignore
85 }
86 }
87 // If verification of SSL certificate is bypassed
88 // Reference: https://www.php.net/manual/en/context.ssl.php & https://stackoverflow.com/a/30803024
89 if ( $smtp_bypass_ssl_verification ) {
90 $phpmailer->SMTPOptions = [
91 'ssl' => [
92 'verify_peer' => false,
93 'verify_peer_name' => false,
94 'allow_self_signed' => true,
95 ],
96 ];
97 }
98 // If debug mode is enabled, send debug info (SMTP::DEBUG_CONNECTION) to WordPress debug.log file set in wp-config.php
99 // Reference: https://github.com/PHPMailer/PHPMailer/wiki/SMTP-Debugging
100 if ( $smtp_debug ) {
101 $phpmailer->SMTPDebug = 4;
102 //phpcs:ignore
103 $phpmailer->Debugoutput = 'error_log';
104 //phpcs:ignore
105 }
106 }
107
108 /**
109 * Send a test email and use SMTP host if defined in settings
110 *
111 * @since 5.3.0
112 */
113 public function send_test_email() {
114 if ( isset( $_REQUEST['email_to'] ) && isset( $_REQUEST['nonce'] ) && current_user_can( 'manage_options' ) ) {
115 if ( wp_verify_nonce( sanitize_text_field( $_REQUEST['nonce'] ), 'send-test-email-nonce_' . get_current_user_id() ) ) {
116 $content = array(
117 array(
118 'title' => 'Hey... are you getting this?',
119 'body' => '<p><strong>Looks like you did!</strong></p>',
120 ),
121 array(
122 'title' => 'There\'s a message for you...',
123 'body' => '<p><strong>Here it is:</strong></p>',
124 ),
125 array(
126 'title' => 'Is it working?',
127 'body' => '<p><strong>Yes, it\'s working!</strong></p>',
128 ),
129 array(
130 'title' => 'Hope you\'re getting this...',
131 'body' => '<p><strong>Looks like this was sent out just fine and you got it.</strong></p>',
132 ),
133 array(
134 'title' => 'Testing delivery configuration...',
135 'body' => '<p><strong>Everything looks good!</strong></p>',
136 ),
137 array(
138 'title' => 'Testing email delivery',
139 'body' => '<p><strong>Looks good!</strong></p>',
140 ),
141 array(
142 'title' => 'Config is looking good',
143 'body' => '<p><strong>Seems like everything has been set up properly!</strong></p>',
144 ),
145 array(
146 'title' => 'All set up',
147 'body' => '<p><strong>Your configuration is working properly.</strong></p>',
148 ),
149 array(
150 'title' => 'Good to go',
151 'body' => '<p><strong>Config is working great.</strong></p>',
152 ),
153 array(
154 'title' => 'Good job',
155 'body' => '<p><strong>Everything is set.</strong></p>',
156 )
157 );
158 $random_number = rand( 0, count( $content ) - 1 );
159 $to = $_REQUEST['email_to'];
160 $title = $content[$random_number]['title'];
161 $body = $content[$random_number]['body'] . '<p>This message was sent from <a href="' . get_bloginfo( 'url' ) . '">' . get_bloginfo( 'url' ) . '</a> on ' . wp_date( 'F j, Y' ) . ' at ' . wp_date( 'H:i:s' ) . ' via ASE.</p>';
162 $headers = array('Content-Type: text/html; charset=UTF-8');
163 $success = wp_mail(
164 $to,
165 $title,
166 $body,
167 $headers
168 );
169 if ( $success ) {
170 $response = array(
171 'status' => 'success',
172 );
173 } else {
174 $response = array(
175 'status' => 'failed',
176 );
177 }
178 echo json_encode( $response );
179 }
180 }
181 }
182
183 }
184