Edit File by line
/home/zeestwma/ceyloniy.../wp-conte.../plugins/wpforms-.../src/Integrat.../SMTP
File: Notifications.php
<?php
[0] Fix | Delete
[1] Fix | Delete
namespace WPForms\Integrations\SMTP;
[2] Fix | Delete
[3] Fix | Delete
use WPForms\Integrations\IntegrationInterface;
[4] Fix | Delete
[5] Fix | Delete
/**
[6] Fix | Delete
* Notifications class.
[7] Fix | Delete
*
[8] Fix | Delete
* @since 1.7.6
[9] Fix | Delete
*/
[10] Fix | Delete
class Notifications implements IntegrationInterface {
[11] Fix | Delete
[12] Fix | Delete
/**
[13] Fix | Delete
* Determine if the class is allowed to load.
[14] Fix | Delete
*
[15] Fix | Delete
* @since 1.7.6
[16] Fix | Delete
*
[17] Fix | Delete
* @return bool
[18] Fix | Delete
*/
[19] Fix | Delete
public function allow_load() {
[20] Fix | Delete
[21] Fix | Delete
return wpforms_is_admin_page( 'builder' ) || wpforms_is_admin_ajax();
[22] Fix | Delete
}
[23] Fix | Delete
[24] Fix | Delete
/**
[25] Fix | Delete
* Load the class.
[26] Fix | Delete
*
[27] Fix | Delete
* @since 1.7.6
[28] Fix | Delete
*/
[29] Fix | Delete
public function load() {
[30] Fix | Delete
[31] Fix | Delete
$this->hooks();
[32] Fix | Delete
}
[33] Fix | Delete
[34] Fix | Delete
/**
[35] Fix | Delete
* Hooks.
[36] Fix | Delete
*
[37] Fix | Delete
* @since 1.7.6
[38] Fix | Delete
*/
[39] Fix | Delete
private function hooks() {
[40] Fix | Delete
[41] Fix | Delete
add_filter( 'wpforms_builder_notifications_sender_address_settings', [ $this, 'change_from_email_settings' ], PHP_INT_MIN, 3 );
[42] Fix | Delete
add_filter( 'wpforms_builder_notifications_sender_name_settings', [ $this, 'change_from_name_settings' ], PHP_INT_MIN, 3 );
[43] Fix | Delete
add_action( 'wp_ajax_wpforms_builder_notification_from_email_validate', [ $this, 'notification_from_email_validate' ] );
[44] Fix | Delete
add_filter( 'wpforms_builder_strings', [ $this, 'form_builder_strings' ], 10, 2 );
[45] Fix | Delete
}
[46] Fix | Delete
[47] Fix | Delete
/**
[48] Fix | Delete
* Validate email.
[49] Fix | Delete
*
[50] Fix | Delete
* @since 1.8.1
[51] Fix | Delete
*/
[52] Fix | Delete
public function notification_from_email_validate() {
[53] Fix | Delete
[54] Fix | Delete
check_ajax_referer( 'wpforms-builder', 'nonce' );
[55] Fix | Delete
[56] Fix | Delete
// Before checking if $_POST['email'] is valid email, we need to check if smart tag is used and return its value.
[57] Fix | Delete
$email = ! empty( $_POST['email'] ) ? sanitize_text_field( wp_unslash( $_POST['email'] ) ) : '';
[58] Fix | Delete
$email = $email ? sanitize_email( wpforms_process_smart_tags( $email, [], [], '', 'smtp-notification-validation' ) ) : '';
[59] Fix | Delete
[60] Fix | Delete
if ( ! is_email( $email ) ) {
[61] Fix | Delete
wp_send_json_error(
[62] Fix | Delete
sprintf(
[63] Fix | Delete
'<div class="wpforms-alert wpforms-alert-warning wpforms-alert-warning-wide">%s</div>',
[64] Fix | Delete
__( 'Please enter a valid email address. Your notifications won\'t be sent if the field is not filled in correctly.', 'wpforms-lite' )
[65] Fix | Delete
)
[66] Fix | Delete
);
[67] Fix | Delete
}
[68] Fix | Delete
[69] Fix | Delete
if ( ! $this->email_domain_matches_site_domain( $email ) ) {
[70] Fix | Delete
wp_send_json_error( $this->get_warning_message() );
[71] Fix | Delete
}
[72] Fix | Delete
[73] Fix | Delete
wp_send_json_success();
[74] Fix | Delete
}
[75] Fix | Delete
[76] Fix | Delete
/**
[77] Fix | Delete
* Append additional strings for form builder.
[78] Fix | Delete
*
[79] Fix | Delete
* @since 1.8.1
[80] Fix | Delete
*
[81] Fix | Delete
* @param array $strings List of strings.
[82] Fix | Delete
* @param object $form Current form object.
[83] Fix | Delete
*
[84] Fix | Delete
* @return array
[85] Fix | Delete
*/
[86] Fix | Delete
public function form_builder_strings( $strings, $form ) {
[87] Fix | Delete
[88] Fix | Delete
$strings['empty_email_address'] = esc_html__( 'Please enter a valid email address. Your notifications won\'t be sent if the field is not filled in correctly.', 'wpforms-lite' );
[89] Fix | Delete
$strings['allow_only_one_email'] = esc_html__( 'Notifications can only use 1 From Email. Please do not enter multiple addresses.', 'wpforms-lite' );
[90] Fix | Delete
$strings['allow_only_email_fields'] = esc_html__( 'This smart tag does not point to an Email field in your form.', 'wpforms-lite' );
[91] Fix | Delete
[92] Fix | Delete
return $strings;
[93] Fix | Delete
}
[94] Fix | Delete
[95] Fix | Delete
/**
[96] Fix | Delete
* Add warning message when email doesn't match site domain.
[97] Fix | Delete
*
[98] Fix | Delete
* @since 1.7.6
[99] Fix | Delete
*
[100] Fix | Delete
* @param array $args Field settings.
[101] Fix | Delete
* @param array $form_data Form data.
[102] Fix | Delete
* @param int $id Notification ID.
[103] Fix | Delete
*
[104] Fix | Delete
* @return array
[105] Fix | Delete
*/
[106] Fix | Delete
public function change_from_email_settings( $args, $form_data, $id ) {
[107] Fix | Delete
[108] Fix | Delete
// phpcs:disable WPForms.PHP.ValidateHooks.InvalidHookName
[109] Fix | Delete
/** This filter is documented in lite/wpforms-lite.php */
[110] Fix | Delete
$from_email_after = apply_filters( 'wpforms_builder_notifications_from_email_after', '', $form_data, $id );
[111] Fix | Delete
// phpcs:enable WPForms.PHP.ValidateHooks.InvalidHookName
[112] Fix | Delete
[113] Fix | Delete
if ( ! empty( $from_email_after ) ) {
[114] Fix | Delete
$default = [
[115] Fix | Delete
'readonly' => true,
[116] Fix | Delete
'after' => '<div class="wpforms-alert wpforms-alert-warning">' . $from_email_after . '</div>',
[117] Fix | Delete
'input_class' => 'wpforms-disabled',
[118] Fix | Delete
'class' => 'from-email wpforms-panel-field-warning',
[119] Fix | Delete
];
[120] Fix | Delete
} else {
[121] Fix | Delete
$default = [
[122] Fix | Delete
'class' => 'from-email js-wpforms-from-email-validation',
[123] Fix | Delete
'tooltip' => esc_html__( 'Notifications can only use 1 From Email. Please do not enter multiple addresses.', 'wpforms-lite' ),
[124] Fix | Delete
];
[125] Fix | Delete
}
[126] Fix | Delete
[127] Fix | Delete
$args = wp_parse_args( $args, $default );
[128] Fix | Delete
[129] Fix | Delete
return $args;
[130] Fix | Delete
}
[131] Fix | Delete
[132] Fix | Delete
/**
[133] Fix | Delete
* Add warning message when name empty.
[134] Fix | Delete
*
[135] Fix | Delete
* @since 1.8.4
[136] Fix | Delete
*
[137] Fix | Delete
* @param array $args Field settings.
[138] Fix | Delete
* @param array $form_data Form data.
[139] Fix | Delete
* @param int $id Notification ID.
[140] Fix | Delete
*
[141] Fix | Delete
* @return array
[142] Fix | Delete
*/
[143] Fix | Delete
public function change_from_name_settings( $args, $form_data, $id ) {
[144] Fix | Delete
[145] Fix | Delete
// phpcs:disable WPForms.PHP.ValidateHooks.InvalidHookName
[146] Fix | Delete
/** This filter is documented in lite/wpforms-lite.php */
[147] Fix | Delete
$from_name_after = apply_filters( 'wpforms_builder_notifications_from_name_after', '', $form_data, $id );
[148] Fix | Delete
// phpcs:enable WPForms.PHP.ValidateHooks.InvalidHookName
[149] Fix | Delete
[150] Fix | Delete
if ( ! empty( $from_name_after ) ) {
[151] Fix | Delete
$default = [
[152] Fix | Delete
'readonly' => true,
[153] Fix | Delete
'after' => '<div class="wpforms-alert wpforms-alert-warning">' . $from_name_after . '</div>',
[154] Fix | Delete
'input_class' => 'wpforms-disabled',
[155] Fix | Delete
'class' => 'from-name wpforms-panel-field-warning',
[156] Fix | Delete
];
[157] Fix | Delete
} else {
[158] Fix | Delete
$default = [
[159] Fix | Delete
'class' => 'from-name',
[160] Fix | Delete
];
[161] Fix | Delete
}
[162] Fix | Delete
[163] Fix | Delete
return wp_parse_args( $args, $default );
[164] Fix | Delete
}
[165] Fix | Delete
[166] Fix | Delete
/**
[167] Fix | Delete
* Get warning message.
[168] Fix | Delete
*
[169] Fix | Delete
* @since 1.8.1
[170] Fix | Delete
*
[171] Fix | Delete
* @return string
[172] Fix | Delete
*/
[173] Fix | Delete
private function get_warning_message() {
[174] Fix | Delete
[175] Fix | Delete
$site_domain = wp_parse_url( get_bloginfo( 'wpurl' ) )['host'];
[176] Fix | Delete
[177] Fix | Delete
$email_does_not_match_text = sprintf( /* translators: %1$s - WordPress site domain. */
[178] Fix | Delete
__( 'The current \'From Email\' address does not match your website domain name (%1$s). This can cause your notification emails to be blocked or marked as spam.', 'wpforms-lite' ),
[179] Fix | Delete
esc_html( $site_domain )
[180] Fix | Delete
);
[181] Fix | Delete
[182] Fix | Delete
$install_wp_mail_smtp_text = '';
[183] Fix | Delete
[184] Fix | Delete
// If WP Mail SMTP is not active, show a message to install it.
[185] Fix | Delete
if (
[186] Fix | Delete
! is_plugin_active( 'wp-mail-smtp-pro/wp_mail_smtp.php' ) &&
[187] Fix | Delete
! is_plugin_active( 'wp-mail-smtp/wp_mail_smtp.php' )
[188] Fix | Delete
) {
[189] Fix | Delete
$install_wp_mail_smtp_text .= sprintf(
[190] Fix | Delete
wp_kses( /* translators: %1$s - WP Mail SMTP install page URL. */
[191] Fix | Delete
__(
[192] Fix | Delete
'We strongly recommend that you install the free <a href="%1$s" target="_blank">WP Mail SMTP</a> plugin! The Setup Wizard makes it easy to fix your emails.',
[193] Fix | Delete
'wpforms-lite'
[194] Fix | Delete
),
[195] Fix | Delete
[
[196] Fix | Delete
'a' => [
[197] Fix | Delete
'href' => [],
[198] Fix | Delete
'target' => [],
[199] Fix | Delete
],
[200] Fix | Delete
]
[201] Fix | Delete
),
[202] Fix | Delete
esc_url( admin_url( 'admin.php?page=wpforms-smtp' ) )
[203] Fix | Delete
);
[204] Fix | Delete
}
[205] Fix | Delete
[206] Fix | Delete
$address_match_text = sprintf( /* translators: %1$s - WordPress site domain. */
[207] Fix | Delete
__( 'Alternately, try using a From Address that matches your website domain (admin@%1$s).', 'wpforms-lite' ),
[208] Fix | Delete
esc_html( $site_domain )
[209] Fix | Delete
);
[210] Fix | Delete
[211] Fix | Delete
$fix_email_delivery_text = sprintf(
[212] Fix | Delete
wp_kses( /* translators: %1$s - fixing email delivery issues doc URL. */
[213] Fix | Delete
__(
[214] Fix | Delete
'Please check out our <a href="%1$s" target="_blank" rel="noopener noreferrer">doc on fixing email delivery issues</a> for more details.',
[215] Fix | Delete
'wpforms-lite'
[216] Fix | Delete
),
[217] Fix | Delete
[
[218] Fix | Delete
'a' => [
[219] Fix | Delete
'href' => [],
[220] Fix | Delete
'target' => [],
[221] Fix | Delete
'rel' => [],
[222] Fix | Delete
],
[223] Fix | Delete
]
[224] Fix | Delete
),
[225] Fix | Delete
esc_url( wpforms_utm_link( 'https://wpforms.com/docs/how-to-fix-wordpress-contact-form-not-sending-email-with-smtp/', 'Builder Notifications', 'Delivery Issues Documentation' ) )
[226] Fix | Delete
);
[227] Fix | Delete
[228] Fix | Delete
return sprintf(
[229] Fix | Delete
'<div class="wpforms-alert wpforms-alert-warning wpforms-alert-warning-wide"> <p>%1$s</p> <p>%2$s</p> <p>%3$s</p> <p>%4$s</p> </div>',
[230] Fix | Delete
$email_does_not_match_text,
[231] Fix | Delete
$install_wp_mail_smtp_text,
[232] Fix | Delete
$address_match_text,
[233] Fix | Delete
$fix_email_delivery_text
[234] Fix | Delete
);
[235] Fix | Delete
}
[236] Fix | Delete
[237] Fix | Delete
/**
[238] Fix | Delete
* Check if the domain name in an email address matches the WordPress site domain.
[239] Fix | Delete
*
[240] Fix | Delete
* @since 1.7.6
[241] Fix | Delete
*
[242] Fix | Delete
* @param string $email The email address to check against the WordPress site domain.
[243] Fix | Delete
*
[244] Fix | Delete
* @return bool
[245] Fix | Delete
*/
[246] Fix | Delete
private function email_domain_matches_site_domain( $email ) {
[247] Fix | Delete
[248] Fix | Delete
// Process smart tags if they are used as a value.
[249] Fix | Delete
$email = wpforms_process_smart_tags( $email, [], [], '', 'smtp-notification-validation' );
[250] Fix | Delete
[251] Fix | Delete
// Skip processing when email is empty or does not set.
[252] Fix | Delete
// e.g. {field_id="3"} which we don't have at the moment.
[253] Fix | Delete
if ( empty( $email ) ) {
[254] Fix | Delete
return true;
[255] Fix | Delete
}
[256] Fix | Delete
[257] Fix | Delete
$email_domain = substr( strrchr( $email, '@' ), 1 );
[258] Fix | Delete
$site_domain = wp_parse_url( get_bloginfo( 'wpurl' ) )['host'];
[259] Fix | Delete
[260] Fix | Delete
// Check if From email domain ends with site domain.
[261] Fix | Delete
return ! empty( $email_domain ) && preg_match( "/\b{$email_domain}$/", $site_domain ) === 1;
[262] Fix | Delete
}
[263] Fix | Delete
[264] Fix | Delete
/**
[265] Fix | Delete
* Check if the site has any active SMTP plugins.
[266] Fix | Delete
*
[267] Fix | Delete
* @since 1.7.6
[268] Fix | Delete
*
[269] Fix | Delete
* @return bool
[270] Fix | Delete
*/
[271] Fix | Delete
private function has_active_smtp_plugin() {
[272] Fix | Delete
[273] Fix | Delete
// List of plugins from \WPMailSMTP\Conflicts.
[274] Fix | Delete
$smtp_plugin_list = [
[275] Fix | Delete
'branda-white-labeling/ultimate-branding.php',
[276] Fix | Delete
'bws-smtp/bws-smtp.php',
[277] Fix | Delete
'cimy-swift-smtp/cimy_swift_smtp.php',
[278] Fix | Delete
'disable-emails/disable-emails.php',
[279] Fix | Delete
'easy-wp-smtp/easy-wp-smtp.php',
[280] Fix | Delete
'fluent-smtp/fluent-smtp.php',
[281] Fix | Delete
'gmail-smtp/main.php',
[282] Fix | Delete
'mailgun/mailgun.php',
[283] Fix | Delete
'my-smtp-wp/my-smtp-wp.php',
[284] Fix | Delete
'post-smtp/postman-smtp.php',
[285] Fix | Delete
'postman-smtp/postman-smtp.php',
[286] Fix | Delete
'postmark-approved-wordpress-plugin/postmark.php',
[287] Fix | Delete
'sar-friendly-smtp/sar-friendly-smtp.php',
[288] Fix | Delete
'sendgrid-email-delivery-simplified/wpsendgrid.php',
[289] Fix | Delete
'smtp-mail/index.php',
[290] Fix | Delete
'smtp-mailer/main.php',
[291] Fix | Delete
'sparkpost/wordpress-sparkpost.php',
[292] Fix | Delete
'turbosmtp/turbo-smtp-plugin.php',
[293] Fix | Delete
'woocommerce-sendinblue-newsletter-subscription/woocommerce-sendinblue.php',
[294] Fix | Delete
'wp-amazon-ses-smtp/wp-amazon-ses.php',
[295] Fix | Delete
'wp-easy-smtp/wp-easy-smtp.php',
[296] Fix | Delete
'wp-gmail-smtp/wp-gmail-smtp.php',
[297] Fix | Delete
'wp-html-mail/wp-html-mail.php',
[298] Fix | Delete
'wp-mail-bank/wp-mail-bank.php',
[299] Fix | Delete
'wp-mail-booster/wp-mail-booster.php',
[300] Fix | Delete
'wp-mail-smtp-mailer/wp-mail-smtp-mailer.php',
[301] Fix | Delete
'wp-mail-smtp-pro/wp_mail_smtp.php',
[302] Fix | Delete
'wp-mail-smtp/wp_mail_smtp.php',
[303] Fix | Delete
'wp-mailgun-smtp/wp-mailgun-smtp.php',
[304] Fix | Delete
'wp-offload-ses/wp-offload-ses.php',
[305] Fix | Delete
'wp-sendgrid-smtp/wp-sendgrid-smtp.php',
[306] Fix | Delete
'wp-ses/wp-ses.php',
[307] Fix | Delete
'wp-smtp/wp-smtp.php',
[308] Fix | Delete
'wp-yahoo-smtp/wp-yahoo-smtp.php',
[309] Fix | Delete
];
[310] Fix | Delete
[311] Fix | Delete
foreach ( $smtp_plugin_list as $smtp_plugin ) {
[312] Fix | Delete
if ( is_plugin_active( $smtp_plugin ) ) {
[313] Fix | Delete
return true;
[314] Fix | Delete
}
[315] Fix | Delete
}
[316] Fix | Delete
[317] Fix | Delete
return false;
[318] Fix | Delete
}
[319] Fix | Delete
}
[320] Fix | Delete
[321] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function