+ get_stored_settings();
- $has_secret_key = '' !== $settings[ self::OPTION_SECRET_KEY ];
- $placeholder_label = $has_secret_key ? \__( 'Leave empty to keep the stored secret access key.', 'robotstxt-smtp-amazonses' ) : '';
+ $settings = $this->get_stored_settings();
+ $has_secret_key = '' !== $settings[ self::OPTION_SECRET_KEY ];
+ $placeholder = $has_secret_key ? \__( 'Leave empty to keep the stored secret access key.', 'robotstxt-smtp-amazonses' ) : '';
+ $scope = \is_network_admin() ? 'network' : 'site';
?>
-
-
- get_field_name( self::OPTION_SECRET_KEY ) ); ?>"
+ type="password"
+ id="robotstxt_smtp_amazon_ses_secret_key"
+ class="regular-text"
+ value=""
+ autocomplete="new-password"
+ placeholder=""
+ />
+
+
+
+
+
+
+ handle_clear_credential(
+ self::OPTION_ACCESS_KEY,
+ 'robotstxt_smtp_amazonses_clear_access_key',
+ 'access_key'
+ );
+ }
+
+ /**
+ * Handles the request to clear the stored Secret Access Key.
+ *
+ * @since 2.1.6
+ *
+ * @return void
+ */
+ public function handle_clear_secret_key(): void {
+ $this->handle_clear_credential(
+ self::OPTION_SECRET_KEY,
+ 'robotstxt_smtp_amazonses_clear_secret_key',
+ 'secret_key'
+ );
+ }
+
+ /**
+ * Clears a stored AWS credential from the settings option.
+ *
+ * Uses a priority-11 filter on `robotstxt_smtp_sanitized_options` to override
+ * the keep-existing logic in sanitize_settings() (priority 10) during the direct
+ * option update, matching the same pattern used by the parent plugin for the SMTP
+ * password.
+ *
+ * @since 2.1.6
+ *
+ * @param string $field Settings key to clear (OPTION_ACCESS_KEY or OPTION_SECRET_KEY).
+ * @param string $nonce_action Nonce action string for this specific clear request.
+ * @param string $cleared_key Value used in the success redirect query parameter.
+ *
+ * @return void
+ */
+ private function handle_clear_credential( string $field, string $nonce_action, string $cleared_key ): void {
+ $nonce_raw = \filter_input( INPUT_GET, '_wpnonce', FILTER_UNSAFE_RAW );
+ $nonce = is_string( $nonce_raw ) ? (string) \wp_unslash( $nonce_raw ) : '';
+
+ if ( ! \wp_verify_nonce( $nonce, $nonce_action ) ) {
+ \wp_die( \esc_html__( 'The link you followed has expired.', 'robotstxt-smtp-amazonses' ) );
+ }
+
+ $scope_raw = \filter_input( INPUT_GET, 'robotstxt_smtp_scope', FILTER_UNSAFE_RAW );
+ $is_network = ROBOTSTXT_SMTP_IS_MULTISITE
+ && is_string( $scope_raw )
+ && 'network' === \sanitize_key( \wp_unslash( $scope_raw ) )
+ && Settings_Page::is_network_mode_enabled();
+
+ $required_cap = $is_network ? 'manage_network_options' : 'manage_options';
+ if ( ! \current_user_can( $required_cap ) ) {
+ \wp_die( \esc_html__( 'You do not have sufficient permissions to access this page.', 'robotstxt-smtp-amazonses' ) );
+ }
+
+ if ( $is_network ) {
+ $settings = \get_site_option( Settings_Page::NETWORK_OPTION_NAME, array() );
+ $settings = is_array( $settings ) ? $settings : array();
+ $settings[ $field ] = '';
+ \update_site_option( Settings_Page::NETWORK_OPTION_NAME, $settings );
+ $redirect_base = \network_admin_url( 'admin.php' );
+ $page_slug = 'robotstxt-smtp-network';
+ } else {
+ $settings = \get_option( Settings_Page::OPTION_NAME, array() );
+ $settings = is_array( $settings ) ? $settings : array();
+ $settings[ $field ] = '';
+ // sanitize_settings() at priority 10 preserves the existing value when the
+ // submitted field is empty. Hook at priority 11 to force the empty value after it.
+ $this->clearing_field = $field;
+ \add_filter( 'robotstxt_smtp_sanitized_options', array( $this, 'force_clear_credential' ), 11, 1 );
+ \update_option( Settings_Page::OPTION_NAME, $settings );
+ \remove_filter( 'robotstxt_smtp_sanitized_options', array( $this, 'force_clear_credential' ), 11 );
+ $this->clearing_field = null;
+ $redirect_base = \admin_url( 'admin.php' );
+ $page_slug = 'robotstxt-smtp';
+ }
+
+ \delete_site_transient( self::get_quota_cache_key() );
+
+ \wp_safe_redirect(
+ \add_query_arg(
+ array(
+ 'page' => $page_slug,
+ 'robotstxt_smtp_amazonses_cleared' => $cleared_key,
+ ),
+ $redirect_base
+ )
+ );
+ exit;
+ }
+
+ /**
+ * Forces a credential field to empty string during a direct option update.
+ *
+ * Runs at priority 11, after sanitize_settings() at priority 10, and overrides
+ * its keep-existing logic. Only active during handle_clear_credential().
+ *
+ * @since 2.1.6
+ *
+ * @param array $clean Sanitized option values.
+ *
+ * @return array
+ */
+ public function force_clear_credential( array $clean ): array {
+ if ( null !== $this->clearing_field ) {
+ $clean[ $this->clearing_field ] = '';
+ }
+ return $clean;
+ }
+
+ /**
+ * Displays a success notice after an AWS credential has been cleared.
+ *
+ * @since 2.1.6
+ *
+ * @return void
+ */
+ public function display_clear_key_notice(): void {
+ $cleared_raw = \filter_input( INPUT_GET, 'robotstxt_smtp_amazonses_cleared', FILTER_SANITIZE_SPECIAL_CHARS );
+ $cleared_raw = is_string( $cleared_raw ) ? \sanitize_key( $cleared_raw ) : '';
+ if ( '' === $cleared_raw ) {
+ return;
+ }
+
+ $screen = \get_current_screen();
+ if ( null === $screen || false === strpos( $screen->id, 'robotstxt-smtp' ) ) {
+ return;
+ }
+
+ if ( 'access_key' === $cleared_raw ) {
+ $message = \__( 'The Amazon SES Access Key ID has been cleared.', 'robotstxt-smtp-amazonses' );
+ } elseif ( 'secret_key' === $cleared_raw ) {
+ $message = \__( 'The Amazon SES Secret Access Key has been cleared.', 'robotstxt-smtp-amazonses' );
+ } else {
+ return;
+ }
+
+ printf(
+ '
%s
',
+ \esc_html( $message )
+ );
+ }
}
diff --git a/languages/robotstxt-smtp-amazonses-ca.mo b/languages/robotstxt-smtp-amazonses-ca.mo
index e7a6c9e..511fdd0 100644
Binary files a/languages/robotstxt-smtp-amazonses-ca.mo and b/languages/robotstxt-smtp-amazonses-ca.mo differ
diff --git a/languages/robotstxt-smtp-amazonses-ca.po b/languages/robotstxt-smtp-amazonses-ca.po
index d5cbe3c..ea776c5 100644
--- a/languages/robotstxt-smtp-amazonses-ca.po
+++ b/languages/robotstxt-smtp-amazonses-ca.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-smtp-"
"amazonses\n"
-"POT-Creation-Date: 2026-06-09T10:41:00+00:00\n"
+"POT-Creation-Date: 2026-06-09T12:37:13+00:00\n"
"PO-Revision-Date: 2026-01-29 09:30+0100\n"
"Last-Translator: ROBOTSTXT \n"
"Language-Team: Catalan\n"
@@ -43,107 +43,112 @@ msgstr ""
msgid "Security check failed"
msgstr "Ha fallat la comprovació de seguretat"
-#: class-robotstxt-updater.php:384 includes/class-plugin.php:918
+#: class-robotstxt-updater.php:384 includes/class-plugin.php:932
+#: includes/class-plugin.php:1807
msgid "You do not have sufficient permissions to access this page."
msgstr "No tens permisos suficients per accedir a aquesta pàgina."
-#: includes/class-plugin.php:149
+#: includes/class-plugin.php:163
msgid "Amazon SES could not send the email because no recipient was provided."
msgstr ""
"Amazon SES no ha pogut enviar l'email perquè no s'ha proporcionat cap "
"destinatari."
#. translators: %s: Error details describing the email preparation failure.
-#: includes/class-plugin.php:231
+#: includes/class-plugin.php:245
#, php-format
msgid "Amazon SES could not prepare the email: %s"
msgstr "Amazon SES no ha pogut preparar l'email: %s"
#. translators: %s: Error message returned by Amazon SES.
-#: includes/class-plugin.php:275
+#: includes/class-plugin.php:289
#, php-format
msgid "Amazon SES could not send the email: %s"
msgstr "Amazon SES no ha pogut enviar l'email: %s"
#. translators: %s: Error message describing the unexpected failure.
-#: includes/class-plugin.php:295
+#: includes/class-plugin.php:309
#, php-format
msgid "An unexpected error occurred while sending through Amazon SES: %s"
msgstr "S'ha produït un error inesperat en enviar a través d'Amazon SES: %s"
#. translators: %s: Error details describing why the From header is invalid.
-#: includes/class-plugin.php:357
+#: includes/class-plugin.php:371
#, php-format
msgid "Amazon SES rejected the \"From\" address: %s"
msgstr "Amazon SES ha rebutjat l'adreça \"De\": %s"
#. translators: %s: Invalid recipient email address.
-#: includes/class-plugin.php:378
+#: includes/class-plugin.php:392
#, php-format
msgid "Amazon SES rejected the recipient address: %s"
msgstr "Amazon SES ha rebutjat l'adreça del destinatari: %s"
#. translators: %s: Invalid CC email address.
-#: includes/class-plugin.php:400
+#: includes/class-plugin.php:414
#, php-format
msgid "Amazon SES rejected the CC address: %s"
msgstr "Amazon SES ha rebutjat l'adreça CC: %s"
#. translators: %s: Invalid BCC email address.
-#: includes/class-plugin.php:422
+#: includes/class-plugin.php:436
#, php-format
msgid "Amazon SES rejected the BCC address: %s"
msgstr "Amazon SES ha rebutjat l'adreça CCO: %s"
#. translators: %s: Invalid reply-to email address.
-#: includes/class-plugin.php:444
+#: includes/class-plugin.php:458
#, php-format
msgid "Amazon SES rejected the reply-to address: %s"
msgstr "Amazon SES ha rebutjat l'adreça de resposta: %s"
#. translators: %s: Invalid reply-to email address from settings.
-#: includes/class-plugin.php:473
+#: includes/class-plugin.php:487
#, php-format
msgid "Amazon SES rejected the configured reply-to address: %s"
msgstr "Amazon SES ha rebutjat l'adreça de resposta configurada: %s"
#. translators: %s: Attachment path that could not be added.
-#: includes/class-plugin.php:524
+#: includes/class-plugin.php:538
#, php-format
msgid "Amazon SES could not include the attachment: %s"
msgstr "Amazon SES no ha pogut incloure l'adjunt: %s"
-#: includes/class-plugin.php:910
+#: includes/class-plugin.php:924
msgid "Security check failed."
msgstr "Ha fallat la comprovació de seguretat."
-#: includes/class-plugin.php:931
+#: includes/class-plugin.php:945
msgid "Amazon SES quotas refreshed successfully."
msgstr "Quotes d'Amazon SES actualitzades correctament."
-#: includes/class-plugin.php:938
+#: includes/class-plugin.php:952
msgid "Unable to fetch quotas from Amazon SES. Check debug log for details."
msgstr ""
"No s'han pogut obtenir les quotes d'Amazon SES. Verifica el registre de "
"depuració per a més detalls."
-#: includes/class-plugin.php:977
+#: includes/class-plugin.php:991
msgid "Access Key ID"
msgstr "ID de clau d'accés"
-#: includes/class-plugin.php:983
+#: includes/class-plugin.php:997
msgid "Secret Access Key"
msgstr "Clau d'accés secreta"
-#: includes/class-plugin.php:989
+#: includes/class-plugin.php:1003
msgid "Region"
msgstr "Regió"
-#: includes/class-plugin.php:1028
+#: includes/class-plugin.php:1042
msgid "Leave empty to keep the stored access key."
msgstr "Deixar buit per mantenir la clau d'accés emmagatzemada."
-#: includes/class-plugin.php:1039
+#: includes/class-plugin.php:1071
+msgid "Clear access key"
+msgstr "Elimina la clau d'accés"
+
+#: includes/class-plugin.php:1074
msgid ""
"Provide the IAM access key ID with permissions to send email through Amazon "
"SES. Leave the field empty to retain the existing value."
@@ -151,11 +156,15 @@ msgstr ""
"Proporciona l'ID de clau d'accés IAM amb permisos per enviar email a través "
"d'Amazon SES. Deixa el camp buit per mantenir el valor existent."
-#: includes/class-plugin.php:1051
+#: includes/class-plugin.php:1086
msgid "Leave empty to keep the stored secret access key."
msgstr "Deixar buit per mantenir la clau d'accés secreta emmagatzemada."
-#: includes/class-plugin.php:1062
+#: includes/class-plugin.php:1115
+msgid "Clear secret key"
+msgstr "Elimina la clau d'accés secreta"
+
+#: includes/class-plugin.php:1118
msgid ""
"Enter the secret access key associated with the IAM user. Leave the field "
"empty to retain the existing value."
@@ -163,19 +172,19 @@ msgstr ""
"Introdueix la clau d'accés secreta associada amb l'usuari IAM. Deixa el camp "
"buit per mantenir el valor existent."
-#: includes/class-plugin.php:1077
+#: includes/class-plugin.php:1133
msgid "Select a region"
msgstr "Selecciona una regió"
-#: includes/class-plugin.php:1082
+#: includes/class-plugin.php:1138
msgid "Choose the AWS region where your Amazon SES account is hosted."
msgstr "Tria la regió d'AWS on està allotjat el teu compte d'Amazon SES."
-#: includes/class-plugin.php:1160
+#: includes/class-plugin.php:1216
msgid "The selected Amazon SES region is not available."
msgstr "La regió d'Amazon SES seleccionada no està disponible."
-#: includes/class-plugin.php:1176
+#: includes/class-plugin.php:1232
msgid ""
"Amazon SES credentials were not saved. Provide an access key, secret key, "
"and region."
@@ -183,169 +192,181 @@ msgstr ""
"Les credencials d'Amazon SES no s'han desat. Proporciona una clau d'accés, "
"clau secreta i regió."
-#: includes/class-plugin.php:1200
+#: includes/class-plugin.php:1256
msgid "Amazon SES credentials verified successfully."
msgstr "Credencials d'Amazon SES verificades correctament."
-#: includes/class-plugin.php:1411
+#: includes/class-plugin.php:1467
msgid "US East (Ohio)"
msgstr "EUA Est (Ohio)"
-#: includes/class-plugin.php:1412
+#: includes/class-plugin.php:1468
msgid "US East (N. Virginia)"
msgstr "EUA Est (N. Virgínia)"
-#: includes/class-plugin.php:1413
+#: includes/class-plugin.php:1469
msgid "US West (N. California)"
msgstr "EUA Oest (N. Califòrnia)"
-#: includes/class-plugin.php:1414
+#: includes/class-plugin.php:1470
msgid "US West (Oregon)"
msgstr "EUA Oest (Oregon)"
-#: includes/class-plugin.php:1415
+#: includes/class-plugin.php:1471
msgid "Africa (Cape Town)"
msgstr "Àfrica (Ciutat del Cap)"
-#: includes/class-plugin.php:1416
+#: includes/class-plugin.php:1472
msgid "Asia Pacific (Hyderabad)"
msgstr "Àsia Pacífic (Hyderabad)"
-#: includes/class-plugin.php:1417
+#: includes/class-plugin.php:1473
msgid "Asia Pacific (Jakarta)"
msgstr "Àsia Pacífic (Jakarta)"
-#: includes/class-plugin.php:1418
+#: includes/class-plugin.php:1474
msgid "Asia Pacific (Mumbai)"
msgstr "Àsia Pacífic (Mumbai)"
-#: includes/class-plugin.php:1419
+#: includes/class-plugin.php:1475
msgid "Asia Pacific (Osaka)"
msgstr "Àsia Pacífic (Osaka)"
-#: includes/class-plugin.php:1420
+#: includes/class-plugin.php:1476
msgid "Asia Pacific (Seoul)"
msgstr "Àsia Pacífic (Seül)"
-#: includes/class-plugin.php:1421
+#: includes/class-plugin.php:1477
msgid "Asia Pacific (Singapore)"
msgstr "Àsia Pacífic (Singapur)"
-#: includes/class-plugin.php:1422
+#: includes/class-plugin.php:1478
msgid "Asia Pacific (Sydney)"
msgstr "Àsia Pacífic (Sydney)"
-#: includes/class-plugin.php:1423
+#: includes/class-plugin.php:1479
msgid "Asia Pacific (Tokyo)"
msgstr "Àsia Pacífic (Tòquio)"
-#: includes/class-plugin.php:1424
+#: includes/class-plugin.php:1480
msgid "Canada (Central)"
msgstr "Canadà (Central)"
-#: includes/class-plugin.php:1425
+#: includes/class-plugin.php:1481
msgid "Europe (Frankfurt)"
msgstr "Europa (Frankfurt)"
-#: includes/class-plugin.php:1426
+#: includes/class-plugin.php:1482
msgid "Europe (Ireland)"
msgstr "Europa (Irlanda)"
-#: includes/class-plugin.php:1427
+#: includes/class-plugin.php:1483
msgid "Europe (London)"
msgstr "Europa (Londres)"
-#: includes/class-plugin.php:1428
+#: includes/class-plugin.php:1484
msgid "Europe (Milan)"
msgstr "Europa (Milà)"
-#: includes/class-plugin.php:1429
+#: includes/class-plugin.php:1485
msgid "Europe (Paris)"
msgstr "Europa (París)"
-#: includes/class-plugin.php:1430
+#: includes/class-plugin.php:1486
msgid "Europe (Stockholm)"
msgstr "Europa (Estocolm)"
-#: includes/class-plugin.php:1431
+#: includes/class-plugin.php:1487
msgid "Europe (Zurich)"
msgstr "Europa (Zuric)"
-#: includes/class-plugin.php:1432
+#: includes/class-plugin.php:1488
msgid "Israel (Tel Aviv)"
msgstr "Israel (Tel Aviv)"
-#: includes/class-plugin.php:1433
+#: includes/class-plugin.php:1489
msgid "Middle East (Bahrain)"
msgstr "Orient Mitjà (Bahrain)"
-#: includes/class-plugin.php:1434
+#: includes/class-plugin.php:1490
msgid "Middle East (UAE)"
msgstr "Orient Mitjà (EAU)"
-#: includes/class-plugin.php:1435
+#: includes/class-plugin.php:1491
msgid "South America (São Paulo)"
msgstr "Sud-amèrica (São Paulo)"
-#: includes/class-plugin.php:1436
+#: includes/class-plugin.php:1492
msgid "AWS GovCloud (US-East)"
msgstr "AWS GovCloud (EUA-Est)"
-#: includes/class-plugin.php:1437
+#: includes/class-plugin.php:1493
msgid "AWS GovCloud (US-West)"
msgstr "AWS GovCloud (EUA-Oest)"
#. translators: 1: AWS region display name. 2: AWS region code.
-#: includes/class-plugin.php:1452
+#: includes/class-plugin.php:1508
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
#. translators: %s: AWS region code.
-#: includes/class-plugin.php:1468
+#: includes/class-plugin.php:1524
#, php-format
msgid "Region %s"
msgstr "Regió %s"
#. translators: %s: Error message from Amazon SES.
-#: includes/class-plugin.php:1509
+#: includes/class-plugin.php:1565
#, php-format
msgid "Invalid Amazon SES credentials: %s"
msgstr "Credencials d'Amazon SES invàlides: %s"
-#: includes/class-plugin.php:1574 includes/class-plugin.php:1596
+#: includes/class-plugin.php:1630 includes/class-plugin.php:1652
msgid "Amazon SES credentials are not configured."
msgstr "Les credencials d'Amazon SES no estan configurades."
-#: includes/class-plugin.php:1610
+#: includes/class-plugin.php:1666
msgid "Amazon SES did not return quota data."
msgstr "Amazon SES no ha retornat dades de quota."
-#: includes/class-plugin.php:1632
+#: includes/class-plugin.php:1688
msgid "Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission."
msgstr ""
"No es poden obtenir les quotes de SES: l'usuari IAM no té el permís ses:"
"GetAccount."
#. translators: %s: AWS error message
-#: includes/class-plugin.php:1640
+#: includes/class-plugin.php:1696
#, php-format
msgid "Amazon SES API error: %s"
msgstr "Error d'API d'Amazon SES: %s"
#. translators: %s: Error message
-#: includes/class-plugin.php:1649
+#: includes/class-plugin.php:1705
#, php-format
msgid "Failed to fetch SES quota: %s"
msgstr "Ha fallat en obtenir la quota de SES: %s"
-#: robotstxt-smtp-amazonses.php:68
+#: includes/class-plugin.php:1796
+msgid "The link you followed has expired."
+msgstr "L'enllaç que has seguit ha caducat."
+
+#: includes/class-plugin.php:1884
+msgid "The Amazon SES Access Key ID has been cleared."
+msgstr "L'ID de clau d'accés d'Amazon SES s'ha eliminat."
+
+#: includes/class-plugin.php:1886
+msgid "The Amazon SES Secret Access Key has been cleared."
+msgstr "La clau d'accés secreta d'Amazon SES s'ha eliminat."
+
+#: robotstxt-smtp-amazonses.php:85
msgid ""
"SMTP (by ROBOTSTXT) Amazon SES requires the SMTP (by ROBOTSTXT) plugin to be "
"installed and active."
msgstr ""
-"SMTP (by ROBOTSTXT) Amazon SES requereix que el connector SMTP (by ROBOTSTXT) "
-"estigui instal·lat i actiu."
+"SMTP (by ROBOTSTXT) Amazon SES requereix que el connector SMTP (by "
+"ROBOTSTXT) estigui instal·lat i actiu."
#~ msgid "From Email"
#~ msgstr "Email remitent"
diff --git a/languages/robotstxt-smtp-amazonses-es_ES.mo b/languages/robotstxt-smtp-amazonses-es_ES.mo
index 034d1d2..bdade16 100644
Binary files a/languages/robotstxt-smtp-amazonses-es_ES.mo and b/languages/robotstxt-smtp-amazonses-es_ES.mo differ
diff --git a/languages/robotstxt-smtp-amazonses-es_ES.po b/languages/robotstxt-smtp-amazonses-es_ES.po
index ace5076..82c4264 100644
--- a/languages/robotstxt-smtp-amazonses-es_ES.po
+++ b/languages/robotstxt-smtp-amazonses-es_ES.po
@@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-smtp-"
"amazonses\n"
-"POT-Creation-Date: 2026-06-09T10:41:00+00:00\n"
+"POT-Creation-Date: 2026-06-09T12:37:13+00:00\n"
"PO-Revision-Date: 2026-01-29 09:30+0100\n"
"Last-Translator: ROBOTSTXT \n"
"Language-Team: Spanish\n"
@@ -43,107 +43,112 @@ msgstr ""
msgid "Security check failed"
msgstr "Falló la comprobación de seguridad"
-#: class-robotstxt-updater.php:384 includes/class-plugin.php:918
+#: class-robotstxt-updater.php:384 includes/class-plugin.php:932
+#: includes/class-plugin.php:1807
msgid "You do not have sufficient permissions to access this page."
msgstr "No tienes permisos suficientes para acceder a esta página."
-#: includes/class-plugin.php:149
+#: includes/class-plugin.php:163
msgid "Amazon SES could not send the email because no recipient was provided."
msgstr ""
"Amazon SES no pudo enviar el email porque no se proporcionó ningún "
"destinatario."
#. translators: %s: Error details describing the email preparation failure.
-#: includes/class-plugin.php:231
+#: includes/class-plugin.php:245
#, php-format
msgid "Amazon SES could not prepare the email: %s"
msgstr "Amazon SES no pudo preparar el email: %s"
#. translators: %s: Error message returned by Amazon SES.
-#: includes/class-plugin.php:275
+#: includes/class-plugin.php:289
#, php-format
msgid "Amazon SES could not send the email: %s"
msgstr "Amazon SES no pudo enviar el email: %s"
#. translators: %s: Error message describing the unexpected failure.
-#: includes/class-plugin.php:295
+#: includes/class-plugin.php:309
#, php-format
msgid "An unexpected error occurred while sending through Amazon SES: %s"
msgstr "Ocurrió un error inesperado al enviar a través de Amazon SES: %s"
#. translators: %s: Error details describing why the From header is invalid.
-#: includes/class-plugin.php:357
+#: includes/class-plugin.php:371
#, php-format
msgid "Amazon SES rejected the \"From\" address: %s"
msgstr "Amazon SES rechazó la dirección \"De\": %s"
#. translators: %s: Invalid recipient email address.
-#: includes/class-plugin.php:378
+#: includes/class-plugin.php:392
#, php-format
msgid "Amazon SES rejected the recipient address: %s"
msgstr "Amazon SES rechazó la dirección del destinatario: %s"
#. translators: %s: Invalid CC email address.
-#: includes/class-plugin.php:400
+#: includes/class-plugin.php:414
#, php-format
msgid "Amazon SES rejected the CC address: %s"
msgstr "Amazon SES rechazó la dirección CC: %s"
#. translators: %s: Invalid BCC email address.
-#: includes/class-plugin.php:422
+#: includes/class-plugin.php:436
#, php-format
msgid "Amazon SES rejected the BCC address: %s"
msgstr "Amazon SES rechazó la dirección CCO: %s"
#. translators: %s: Invalid reply-to email address.
-#: includes/class-plugin.php:444
+#: includes/class-plugin.php:458
#, php-format
msgid "Amazon SES rejected the reply-to address: %s"
msgstr "Amazon SES rechazó la dirección de respuesta: %s"
#. translators: %s: Invalid reply-to email address from settings.
-#: includes/class-plugin.php:473
+#: includes/class-plugin.php:487
#, php-format
msgid "Amazon SES rejected the configured reply-to address: %s"
msgstr "Amazon SES rechazó la dirección de respuesta configurada: %s"
#. translators: %s: Attachment path that could not be added.
-#: includes/class-plugin.php:524
+#: includes/class-plugin.php:538
#, php-format
msgid "Amazon SES could not include the attachment: %s"
msgstr "Amazon SES no pudo incluir el adjunto: %s"
-#: includes/class-plugin.php:910
+#: includes/class-plugin.php:924
msgid "Security check failed."
msgstr "Falló la comprobación de seguridad."
-#: includes/class-plugin.php:931
+#: includes/class-plugin.php:945
msgid "Amazon SES quotas refreshed successfully."
msgstr "Cuotas de Amazon SES actualizadas correctamente."
-#: includes/class-plugin.php:938
+#: includes/class-plugin.php:952
msgid "Unable to fetch quotas from Amazon SES. Check debug log for details."
msgstr ""
"No se pudieron obtener las cuotas de Amazon SES. Verifica el registro de "
"depuración para más detalles."
-#: includes/class-plugin.php:977
+#: includes/class-plugin.php:991
msgid "Access Key ID"
msgstr "ID de clave de acceso"
-#: includes/class-plugin.php:983
+#: includes/class-plugin.php:997
msgid "Secret Access Key"
msgstr "Clave de acceso secreta"
-#: includes/class-plugin.php:989
+#: includes/class-plugin.php:1003
msgid "Region"
msgstr "Región"
-#: includes/class-plugin.php:1028
+#: includes/class-plugin.php:1042
msgid "Leave empty to keep the stored access key."
msgstr "Dejar vacío para mantener la clave de acceso almacenada."
-#: includes/class-plugin.php:1039
+#: includes/class-plugin.php:1071
+msgid "Clear access key"
+msgstr "Eliminar clave de acceso"
+
+#: includes/class-plugin.php:1074
msgid ""
"Provide the IAM access key ID with permissions to send email through Amazon "
"SES. Leave the field empty to retain the existing value."
@@ -151,11 +156,15 @@ msgstr ""
"Proporciona el ID de clave de acceso IAM con permisos para enviar email a "
"través de Amazon SES. Deja el campo vacío para mantener el valor existente."
-#: includes/class-plugin.php:1051
+#: includes/class-plugin.php:1086
msgid "Leave empty to keep the stored secret access key."
msgstr "Dejar vacío para mantener la clave de acceso secreta almacenada."
-#: includes/class-plugin.php:1062
+#: includes/class-plugin.php:1115
+msgid "Clear secret key"
+msgstr "Eliminar clave de acceso secreta"
+
+#: includes/class-plugin.php:1118
msgid ""
"Enter the secret access key associated with the IAM user. Leave the field "
"empty to retain the existing value."
@@ -163,19 +172,19 @@ msgstr ""
"Introduce la clave de acceso secreta asociada con el usuario IAM. Deja el "
"campo vacío para mantener el valor existente."
-#: includes/class-plugin.php:1077
+#: includes/class-plugin.php:1133
msgid "Select a region"
msgstr "Selecciona una región"
-#: includes/class-plugin.php:1082
+#: includes/class-plugin.php:1138
msgid "Choose the AWS region where your Amazon SES account is hosted."
msgstr "Elige la región de AWS donde está alojada tu cuenta de Amazon SES."
-#: includes/class-plugin.php:1160
+#: includes/class-plugin.php:1216
msgid "The selected Amazon SES region is not available."
msgstr "La región de Amazon SES seleccionada no está disponible."
-#: includes/class-plugin.php:1176
+#: includes/class-plugin.php:1232
msgid ""
"Amazon SES credentials were not saved. Provide an access key, secret key, "
"and region."
@@ -183,163 +192,175 @@ msgstr ""
"Las credenciales de Amazon SES no se guardaron. Proporciona una clave de "
"acceso, clave secreta y región."
-#: includes/class-plugin.php:1200
+#: includes/class-plugin.php:1256
msgid "Amazon SES credentials verified successfully."
msgstr "Credenciales de Amazon SES verificadas correctamente."
-#: includes/class-plugin.php:1411
+#: includes/class-plugin.php:1467
msgid "US East (Ohio)"
msgstr "EE.UU. Este (Ohio)"
-#: includes/class-plugin.php:1412
+#: includes/class-plugin.php:1468
msgid "US East (N. Virginia)"
msgstr "EE.UU. Este (N. Virginia)"
-#: includes/class-plugin.php:1413
+#: includes/class-plugin.php:1469
msgid "US West (N. California)"
msgstr "EE.UU. Oeste (N. California)"
-#: includes/class-plugin.php:1414
+#: includes/class-plugin.php:1470
msgid "US West (Oregon)"
msgstr "EE.UU. Oeste (Oregón)"
-#: includes/class-plugin.php:1415
+#: includes/class-plugin.php:1471
msgid "Africa (Cape Town)"
msgstr "África (Ciudad del Cabo)"
-#: includes/class-plugin.php:1416
+#: includes/class-plugin.php:1472
msgid "Asia Pacific (Hyderabad)"
msgstr "Asia Pacífico (Hyderabad)"
-#: includes/class-plugin.php:1417
+#: includes/class-plugin.php:1473
msgid "Asia Pacific (Jakarta)"
msgstr "Asia Pacífico (Yakarta)"
-#: includes/class-plugin.php:1418
+#: includes/class-plugin.php:1474
msgid "Asia Pacific (Mumbai)"
msgstr "Asia Pacífico (Mumbai)"
-#: includes/class-plugin.php:1419
+#: includes/class-plugin.php:1475
msgid "Asia Pacific (Osaka)"
msgstr "Asia Pacífico (Osaka)"
-#: includes/class-plugin.php:1420
+#: includes/class-plugin.php:1476
msgid "Asia Pacific (Seoul)"
msgstr "Asia Pacífico (Seúl)"
-#: includes/class-plugin.php:1421
+#: includes/class-plugin.php:1477
msgid "Asia Pacific (Singapore)"
msgstr "Asia Pacífico (Singapur)"
-#: includes/class-plugin.php:1422
+#: includes/class-plugin.php:1478
msgid "Asia Pacific (Sydney)"
msgstr "Asia Pacífico (Sídney)"
-#: includes/class-plugin.php:1423
+#: includes/class-plugin.php:1479
msgid "Asia Pacific (Tokyo)"
msgstr "Asia Pacífico (Tokio)"
-#: includes/class-plugin.php:1424
+#: includes/class-plugin.php:1480
msgid "Canada (Central)"
msgstr "Canadá (Central)"
-#: includes/class-plugin.php:1425
+#: includes/class-plugin.php:1481
msgid "Europe (Frankfurt)"
msgstr "Europa (Fráncfort)"
-#: includes/class-plugin.php:1426
+#: includes/class-plugin.php:1482
msgid "Europe (Ireland)"
msgstr "Europa (Irlanda)"
-#: includes/class-plugin.php:1427
+#: includes/class-plugin.php:1483
msgid "Europe (London)"
msgstr "Europa (Londres)"
-#: includes/class-plugin.php:1428
+#: includes/class-plugin.php:1484
msgid "Europe (Milan)"
msgstr "Europa (Milán)"
-#: includes/class-plugin.php:1429
+#: includes/class-plugin.php:1485
msgid "Europe (Paris)"
msgstr "Europa (París)"
-#: includes/class-plugin.php:1430
+#: includes/class-plugin.php:1486
msgid "Europe (Stockholm)"
msgstr "Europa (Estocolmo)"
-#: includes/class-plugin.php:1431
+#: includes/class-plugin.php:1487
msgid "Europe (Zurich)"
msgstr "Europa (Zúrich)"
-#: includes/class-plugin.php:1432
+#: includes/class-plugin.php:1488
msgid "Israel (Tel Aviv)"
msgstr "Israel (Tel Aviv)"
-#: includes/class-plugin.php:1433
+#: includes/class-plugin.php:1489
msgid "Middle East (Bahrain)"
msgstr "Oriente Medio (Baréin)"
-#: includes/class-plugin.php:1434
+#: includes/class-plugin.php:1490
msgid "Middle East (UAE)"
msgstr "Oriente Medio (EAU)"
-#: includes/class-plugin.php:1435
+#: includes/class-plugin.php:1491
msgid "South America (São Paulo)"
msgstr "Sudamérica (São Paulo)"
-#: includes/class-plugin.php:1436
+#: includes/class-plugin.php:1492
msgid "AWS GovCloud (US-East)"
msgstr "AWS GovCloud (EE.UU.-Este)"
-#: includes/class-plugin.php:1437
+#: includes/class-plugin.php:1493
msgid "AWS GovCloud (US-West)"
msgstr "AWS GovCloud (EE.UU.-Oeste)"
#. translators: 1: AWS region display name. 2: AWS region code.
-#: includes/class-plugin.php:1452
+#: includes/class-plugin.php:1508
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
#. translators: %s: AWS region code.
-#: includes/class-plugin.php:1468
+#: includes/class-plugin.php:1524
#, php-format
msgid "Region %s"
msgstr "Región %s"
#. translators: %s: Error message from Amazon SES.
-#: includes/class-plugin.php:1509
+#: includes/class-plugin.php:1565
#, php-format
msgid "Invalid Amazon SES credentials: %s"
msgstr "Credenciales de Amazon SES inválidas: %s"
-#: includes/class-plugin.php:1574 includes/class-plugin.php:1596
+#: includes/class-plugin.php:1630 includes/class-plugin.php:1652
msgid "Amazon SES credentials are not configured."
msgstr "Las credenciales de Amazon SES no están configuradas."
-#: includes/class-plugin.php:1610
+#: includes/class-plugin.php:1666
msgid "Amazon SES did not return quota data."
msgstr "Amazon SES no devolvió datos de cuota."
-#: includes/class-plugin.php:1632
+#: includes/class-plugin.php:1688
msgid "Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission."
msgstr ""
"No se pueden obtener las cuotas de SES: el usuario IAM no tiene el permiso "
"ses:GetAccount."
#. translators: %s: AWS error message
-#: includes/class-plugin.php:1640
+#: includes/class-plugin.php:1696
#, php-format
msgid "Amazon SES API error: %s"
msgstr "Error de API de Amazon SES: %s"
#. translators: %s: Error message
-#: includes/class-plugin.php:1649
+#: includes/class-plugin.php:1705
#, php-format
msgid "Failed to fetch SES quota: %s"
msgstr "Falló al obtener la cuota de SES: %s"
-#: robotstxt-smtp-amazonses.php:68
+#: includes/class-plugin.php:1796
+msgid "The link you followed has expired."
+msgstr "El enlace que has seguido ha caducado."
+
+#: includes/class-plugin.php:1884
+msgid "The Amazon SES Access Key ID has been cleared."
+msgstr "El ID de clave de acceso de Amazon SES se ha eliminado."
+
+#: includes/class-plugin.php:1886
+msgid "The Amazon SES Secret Access Key has been cleared."
+msgstr "La clave de acceso secreta de Amazon SES se ha eliminado."
+
+#: robotstxt-smtp-amazonses.php:85
msgid ""
"SMTP (by ROBOTSTXT) Amazon SES requires the SMTP (by ROBOTSTXT) plugin to be "
"installed and active."
diff --git a/languages/robotstxt-smtp-amazonses.pot b/languages/robotstxt-smtp-amazonses.pot
index 29ec8f6..effe038 100644
--- a/languages/robotstxt-smtp-amazonses.pot
+++ b/languages/robotstxt-smtp-amazonses.pot
@@ -1,13 +1,13 @@
msgid ""
msgstr ""
-"Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES 2.1.5\n"
+"Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES 2.1.6\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-smtp-amazonses\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"POT-Creation-Date: 2026-06-09T10:41:00+00:00\n"
+"POT-Creation-Date: 2026-06-09T12:37:13+00:00\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"X-Generator: WP-CLI 2.12.0\n"
"X-Domain: robotstxt-smtp-amazonses\n"
@@ -42,285 +42,306 @@ msgid "Security check failed"
msgstr ""
#: class-robotstxt-updater.php:384
-#: includes/class-plugin.php:918
+#: includes/class-plugin.php:932
+#: includes/class-plugin.php:1807
msgid "You do not have sufficient permissions to access this page."
msgstr ""
-#: includes/class-plugin.php:149
+#: includes/class-plugin.php:163
msgid "Amazon SES could not send the email because no recipient was provided."
msgstr ""
#. translators: %s: Error details describing the email preparation failure.
-#: includes/class-plugin.php:231
+#: includes/class-plugin.php:245
#, php-format
msgid "Amazon SES could not prepare the email: %s"
msgstr ""
#. translators: %s: Error message returned by Amazon SES.
-#: includes/class-plugin.php:275
+#: includes/class-plugin.php:289
#, php-format
msgid "Amazon SES could not send the email: %s"
msgstr ""
#. translators: %s: Error message describing the unexpected failure.
-#: includes/class-plugin.php:295
+#: includes/class-plugin.php:309
#, php-format
msgid "An unexpected error occurred while sending through Amazon SES: %s"
msgstr ""
#. translators: %s: Error details describing why the From header is invalid.
-#: includes/class-plugin.php:357
+#: includes/class-plugin.php:371
#, php-format
msgid "Amazon SES rejected the \"From\" address: %s"
msgstr ""
#. translators: %s: Invalid recipient email address.
-#: includes/class-plugin.php:378
+#: includes/class-plugin.php:392
#, php-format
msgid "Amazon SES rejected the recipient address: %s"
msgstr ""
#. translators: %s: Invalid CC email address.
-#: includes/class-plugin.php:400
+#: includes/class-plugin.php:414
#, php-format
msgid "Amazon SES rejected the CC address: %s"
msgstr ""
#. translators: %s: Invalid BCC email address.
-#: includes/class-plugin.php:422
+#: includes/class-plugin.php:436
#, php-format
msgid "Amazon SES rejected the BCC address: %s"
msgstr ""
#. translators: %s: Invalid reply-to email address.
-#: includes/class-plugin.php:444
+#: includes/class-plugin.php:458
#, php-format
msgid "Amazon SES rejected the reply-to address: %s"
msgstr ""
#. translators: %s: Invalid reply-to email address from settings.
-#: includes/class-plugin.php:473
+#: includes/class-plugin.php:487
#, php-format
msgid "Amazon SES rejected the configured reply-to address: %s"
msgstr ""
#. translators: %s: Attachment path that could not be added.
-#: includes/class-plugin.php:524
+#: includes/class-plugin.php:538
#, php-format
msgid "Amazon SES could not include the attachment: %s"
msgstr ""
-#: includes/class-plugin.php:910
+#: includes/class-plugin.php:924
msgid "Security check failed."
msgstr ""
-#: includes/class-plugin.php:931
+#: includes/class-plugin.php:945
msgid "Amazon SES quotas refreshed successfully."
msgstr ""
-#: includes/class-plugin.php:938
+#: includes/class-plugin.php:952
msgid "Unable to fetch quotas from Amazon SES. Check debug log for details."
msgstr ""
-#: includes/class-plugin.php:977
+#: includes/class-plugin.php:991
msgid "Access Key ID"
msgstr ""
-#: includes/class-plugin.php:983
+#: includes/class-plugin.php:997
msgid "Secret Access Key"
msgstr ""
-#: includes/class-plugin.php:989
+#: includes/class-plugin.php:1003
msgid "Region"
msgstr ""
-#: includes/class-plugin.php:1028
+#: includes/class-plugin.php:1042
msgid "Leave empty to keep the stored access key."
msgstr ""
-#: includes/class-plugin.php:1039
+#: includes/class-plugin.php:1071
+msgid "Clear access key"
+msgstr ""
+
+#: includes/class-plugin.php:1074
msgid "Provide the IAM access key ID with permissions to send email through Amazon SES. Leave the field empty to retain the existing value."
msgstr ""
-#: includes/class-plugin.php:1051
+#: includes/class-plugin.php:1086
msgid "Leave empty to keep the stored secret access key."
msgstr ""
-#: includes/class-plugin.php:1062
+#: includes/class-plugin.php:1115
+msgid "Clear secret key"
+msgstr ""
+
+#: includes/class-plugin.php:1118
msgid "Enter the secret access key associated with the IAM user. Leave the field empty to retain the existing value."
msgstr ""
-#: includes/class-plugin.php:1077
+#: includes/class-plugin.php:1133
msgid "Select a region"
msgstr ""
-#: includes/class-plugin.php:1082
+#: includes/class-plugin.php:1138
msgid "Choose the AWS region where your Amazon SES account is hosted."
msgstr ""
-#: includes/class-plugin.php:1160
+#: includes/class-plugin.php:1216
msgid "The selected Amazon SES region is not available."
msgstr ""
-#: includes/class-plugin.php:1176
+#: includes/class-plugin.php:1232
msgid "Amazon SES credentials were not saved. Provide an access key, secret key, and region."
msgstr ""
-#: includes/class-plugin.php:1200
+#: includes/class-plugin.php:1256
msgid "Amazon SES credentials verified successfully."
msgstr ""
-#: includes/class-plugin.php:1411
+#: includes/class-plugin.php:1467
msgid "US East (Ohio)"
msgstr ""
-#: includes/class-plugin.php:1412
+#: includes/class-plugin.php:1468
msgid "US East (N. Virginia)"
msgstr ""
-#: includes/class-plugin.php:1413
+#: includes/class-plugin.php:1469
msgid "US West (N. California)"
msgstr ""
-#: includes/class-plugin.php:1414
+#: includes/class-plugin.php:1470
msgid "US West (Oregon)"
msgstr ""
-#: includes/class-plugin.php:1415
+#: includes/class-plugin.php:1471
msgid "Africa (Cape Town)"
msgstr ""
-#: includes/class-plugin.php:1416
+#: includes/class-plugin.php:1472
msgid "Asia Pacific (Hyderabad)"
msgstr ""
-#: includes/class-plugin.php:1417
+#: includes/class-plugin.php:1473
msgid "Asia Pacific (Jakarta)"
msgstr ""
-#: includes/class-plugin.php:1418
+#: includes/class-plugin.php:1474
msgid "Asia Pacific (Mumbai)"
msgstr ""
-#: includes/class-plugin.php:1419
+#: includes/class-plugin.php:1475
msgid "Asia Pacific (Osaka)"
msgstr ""
-#: includes/class-plugin.php:1420
+#: includes/class-plugin.php:1476
msgid "Asia Pacific (Seoul)"
msgstr ""
-#: includes/class-plugin.php:1421
+#: includes/class-plugin.php:1477
msgid "Asia Pacific (Singapore)"
msgstr ""
-#: includes/class-plugin.php:1422
+#: includes/class-plugin.php:1478
msgid "Asia Pacific (Sydney)"
msgstr ""
-#: includes/class-plugin.php:1423
+#: includes/class-plugin.php:1479
msgid "Asia Pacific (Tokyo)"
msgstr ""
-#: includes/class-plugin.php:1424
+#: includes/class-plugin.php:1480
msgid "Canada (Central)"
msgstr ""
-#: includes/class-plugin.php:1425
+#: includes/class-plugin.php:1481
msgid "Europe (Frankfurt)"
msgstr ""
-#: includes/class-plugin.php:1426
+#: includes/class-plugin.php:1482
msgid "Europe (Ireland)"
msgstr ""
-#: includes/class-plugin.php:1427
+#: includes/class-plugin.php:1483
msgid "Europe (London)"
msgstr ""
-#: includes/class-plugin.php:1428
+#: includes/class-plugin.php:1484
msgid "Europe (Milan)"
msgstr ""
-#: includes/class-plugin.php:1429
+#: includes/class-plugin.php:1485
msgid "Europe (Paris)"
msgstr ""
-#: includes/class-plugin.php:1430
+#: includes/class-plugin.php:1486
msgid "Europe (Stockholm)"
msgstr ""
-#: includes/class-plugin.php:1431
+#: includes/class-plugin.php:1487
msgid "Europe (Zurich)"
msgstr ""
-#: includes/class-plugin.php:1432
+#: includes/class-plugin.php:1488
msgid "Israel (Tel Aviv)"
msgstr ""
-#: includes/class-plugin.php:1433
+#: includes/class-plugin.php:1489
msgid "Middle East (Bahrain)"
msgstr ""
-#: includes/class-plugin.php:1434
+#: includes/class-plugin.php:1490
msgid "Middle East (UAE)"
msgstr ""
-#: includes/class-plugin.php:1435
+#: includes/class-plugin.php:1491
msgid "South America (São Paulo)"
msgstr ""
-#: includes/class-plugin.php:1436
+#: includes/class-plugin.php:1492
msgid "AWS GovCloud (US-East)"
msgstr ""
-#: includes/class-plugin.php:1437
+#: includes/class-plugin.php:1493
msgid "AWS GovCloud (US-West)"
msgstr ""
#. translators: 1: AWS region display name. 2: AWS region code.
-#: includes/class-plugin.php:1452
+#: includes/class-plugin.php:1508
#, php-format
msgid "%1$s (%2$s)"
msgstr ""
#. translators: %s: AWS region code.
-#: includes/class-plugin.php:1468
+#: includes/class-plugin.php:1524
#, php-format
msgid "Region %s"
msgstr ""
#. translators: %s: Error message from Amazon SES.
-#: includes/class-plugin.php:1509
+#: includes/class-plugin.php:1565
#, php-format
msgid "Invalid Amazon SES credentials: %s"
msgstr ""
-#: includes/class-plugin.php:1574
-#: includes/class-plugin.php:1596
+#: includes/class-plugin.php:1630
+#: includes/class-plugin.php:1652
msgid "Amazon SES credentials are not configured."
msgstr ""
-#: includes/class-plugin.php:1610
+#: includes/class-plugin.php:1666
msgid "Amazon SES did not return quota data."
msgstr ""
-#: includes/class-plugin.php:1632
+#: includes/class-plugin.php:1688
msgid "Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission."
msgstr ""
#. translators: %s: AWS error message
-#: includes/class-plugin.php:1640
+#: includes/class-plugin.php:1696
#, php-format
msgid "Amazon SES API error: %s"
msgstr ""
#. translators: %s: Error message
-#: includes/class-plugin.php:1649
+#: includes/class-plugin.php:1705
#, php-format
msgid "Failed to fetch SES quota: %s"
msgstr ""
-#: robotstxt-smtp-amazonses.php:68
+#: includes/class-plugin.php:1796
+msgid "The link you followed has expired."
+msgstr ""
+
+#: includes/class-plugin.php:1884
+msgid "The Amazon SES Access Key ID has been cleared."
+msgstr ""
+
+#: includes/class-plugin.php:1886
+msgid "The Amazon SES Secret Access Key has been cleared."
+msgstr ""
+
+#: robotstxt-smtp-amazonses.php:85
msgid "SMTP (by ROBOTSTXT) Amazon SES requires the SMTP (by ROBOTSTXT) plugin to be installed and active."
msgstr ""
diff --git a/readme.txt b/readme.txt
index 4b00053..9dfb5e7 100644
--- a/readme.txt
+++ b/readme.txt
@@ -3,9 +3,9 @@ Contributors: javiercasares
Tags: amazon-ses, smtp, email, mail
Requires at least: 5.7
Tested up to: 7.1
-Stable tag: 2.1.5
+Stable tag: 2.1.6
Requires PHP: 8.2
-Version: 2.1.5
+Version: 2.1.6
License: GPL-3.0-or-later
License URI: https://www.gnu.org/licenses/gpl-3.0.html
@@ -53,6 +53,26 @@ Yes. Network administrators can manage credentials centrally or allow individual
Only the 3 last versions. The full changelog will be at changelog.txt
+= 2.1.6 =
+
+_Release date: 2026-06-09_
+
+**Added**
+
+* Clear buttons for Access Key ID and Secret Access Key on the settings page. When a credential is stored, a "Clear access key" or "Clear secret key" button appears next to the field, allowing immediate removal of the stored value.
+
+**Compatibility**
+
+* WordPress: 5.7 - 7.1
+* PHP: 8.2 - 8.5
+
+**Tests**
+
+* PHP_CodeSniffer: 3.13.5
+* WordPress Coding Standards: 3.3.0
+* PHPCompatibility: 9.3.5
+* PHPStan: 2.2.2
+
= 2.1.5 =
_Release date: 2026-06-09_
@@ -98,28 +118,6 @@ _Release date: 2026-06-09_
* PHPCompatibility: 9.3.5
* PHPStan: 2.2.2
-= 2.1.3 =
-
-_Release date: 2026-06-09_
-
-**Fixed**
-
-* Nonce handling in manual quota refresh now correctly handles `false` values from `filter_input()`.
-* Admin notices display now skips non-array notice entries.
-* Input normalization for recipients, attachments, and headers now properly skips non-string values.
-
-**Compatibility**
-
-* WordPress: 5.7 - 7.1
-* PHP: 8.2 - 8.5
-
-**Tests**
-
-* PHP_CodeSniffer: 3.13.5
-* WordPress Coding Standards: 3.3.0
-* PHPCompatibility: 9.3.5
-* PHPStan: 2.2.2
-
= Previous versions =
If you want to see the full changelog, visit the [changelog.txt](https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses/raw/branch/main/changelog.txt) file.
diff --git a/robotstxt-smtp-amazonses.php b/robotstxt-smtp-amazonses.php
index 6a3478f..e28413d 100644
--- a/robotstxt-smtp-amazonses.php
+++ b/robotstxt-smtp-amazonses.php
@@ -3,7 +3,7 @@
* Plugin Name: SMTP (by ROBOTSTXT) Amazon SES
* Plugin URI: https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses
* Description: Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin.
- * Version: 2.1.5
+ * Version: 2.1.6
* Requires at least: 5.7
* Requires PHP: 8.2
* Network: true
@@ -26,7 +26,7 @@ if ( ! defined( 'ABSPATH' ) ) {
}
if ( ! defined( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION' ) ) {
- define( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION', '2.1.5' );
+ define( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION', '2.1.6' );
}
if ( ! defined( 'ROBOTSTXT_SMTP_AMAZONSES_FILE' ) ) {
@@ -58,7 +58,7 @@ if ( \is_readable( $autoload ) ) {
/**
* Loads the plugin text domain for translations.
*
- * @since 2.1.5
+ * @since 2.1.6
*
* @return void
*/
@@ -75,7 +75,7 @@ function robotstxt_smtp_amazonses_load_textdomain(): void {
/**
* Displays an admin notice when the parent plugin is missing or inactive.
*
- * @since 2.1.5
+ * @since 2.1.6
*
* @return void
*/
diff --git a/update.json b/update.json
index 130bbb7..8af0c06 100644
--- a/update.json
+++ b/update.json
@@ -1,8 +1,8 @@
{
"name": "SMTP (by ROBOTSTXT) Amazon SES",
"slug": "robotstxt-smtp-amazonses",
- "version": "2.1.5",
- "download_url": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses/releases/download/2.1.5/robotstxt-smtp-amazonses-2.1.5.zip",
+ "version": "2.1.6",
+ "download_url": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses/releases/download/2.1.6/robotstxt-smtp-amazonses-2.1.6.zip",
"requires": "5.7",
"requires_php": "8.2",
"tested": "7.1",
@@ -12,10 +12,10 @@
"homepage": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses",
"requires_plugins": ["robotstxt-smtp"],
"description": "Adds Amazon SES (Simple Email Service) configuration support to the ROBOTSTXT SMTP plugin. Integrates seamlessly with AWS SDK for PHP to send emails through Amazon SES infrastructure.",
- "changelog": "
2.1.5 - 2026-06-09
Added: Runtime check for missing parent plugin — shows admin notice instead of fatal error
Fixed: Credentials never saving on first entry — validation now only blocks on definitive auth failures (InvalidClientTokenId, SignatureDoesNotMatch, InvalidAccessKeyId)
Fixed: Reply-to email field cannot be cleared — submitting empty now removes the stored address
2.1.4 - 2026-06-09
Changed: Minimum WordPress version lowered to 5.7 (verified real minimum by static analysis)
2.1.3 - 2026-06-09
Fixed: Nonce handling in manual quota refresh to correctly handle false values from filter_input()
Fixed: Admin notices display now skips non-array notice entries
Fixed: Input normalization for recipients, attachments, and headers now properly skips non-string values
Fixed: Charset encoding issue that caused \"expected parameter value, got null\" error when sending emails through Amazon SES
Improved: Added robust charset validation in header parsing to prevent empty or invalid charset values
Improved: Enhanced charset handling with automatic fallback to UTF-8 when no valid charset is provided
",
+ "changelog": "
2.1.6 - 2026-06-09
Added: Clear buttons for Access Key ID and Secret Access Key — when a credential is stored, a button appears next to the field to immediately remove the stored value
2.1.5 - 2026-06-09
Added: Runtime check for missing parent plugin — shows admin notice instead of fatal error
Fixed: Credentials never saving on first entry — validation now only blocks on definitive auth failures
Fixed: Reply-to email field cannot be cleared — submitting empty now removes the stored address
2.1.4 - 2026-06-09
Changed: Minimum WordPress version lowered to 5.7 (verified real minimum by static analysis)
2.1.3 - 2026-06-09
Fixed: Nonce handling in manual quota refresh to correctly handle false values from filter_input()
Fixed: Admin notices display now skips non-array notice entries
Fixed: Input normalization for recipients, attachments, and headers now properly skips non-string values
Fixed: Charset encoding issue that caused \"expected parameter value, got null\" error when sending emails through Amazon SES
Improved: Added robust charset validation in header parsing to prevent empty or invalid charset values
Improved: Enhanced charset handling with automatic fallback to UTF-8 when no valid charset is provided
",
"sections": {
"description": "Adds Amazon SES (Simple Email Service) configuration support to the ROBOTSTXT SMTP plugin. Integrates seamlessly with AWS SDK for PHP to send emails through Amazon SES infrastructure.",
- "changelog": "
2.1.5 - 2026-06-09
Added: Runtime check for missing parent plugin — shows admin notice instead of fatal error
Fixed: Credentials never saving on first entry — validation now only blocks on definitive auth failures
Fixed: Reply-to email field cannot be cleared — submitting empty now removes the stored address
2.1.4 - 2026-06-09
Changed: Minimum WordPress version lowered to 5.7 (verified real minimum by static analysis)
2.1.3 - 2026-06-09
Fixed: Nonce handling in manual quota refresh to correctly handle false values from filter_input()
Fixed: Admin notices display now skips non-array notice entries
Fixed: Input normalization for recipients, attachments, and headers now properly skips non-string values
Fixed: Charset encoding issue that caused \"expected parameter value, got null\" error when sending emails through Amazon SES
Improved: Added robust charset validation in header parsing to prevent empty or invalid charset values
Improved: Enhanced charset handling with automatic fallback to UTF-8 when no valid charset is provided
2.1.1 - 2026-02-09
Added: Comprehensive Amazon SES debug context to test email error reports
Security: Access keys are now masked in error output (shows only first 4 and last 4 characters)
2.1.0 - 2026-02-09
Changed: Uninstall behavior: plugin no longer performs cleanup on uninstall, all data cleanup is now handled by the core SMTP plugin
"
+ "changelog": "
2.1.6 - 2026-06-09
Added: Clear buttons for Access Key ID and Secret Access Key — when a credential is stored, a button appears next to the field to immediately remove the stored value
2.1.5 - 2026-06-09
Added: Runtime check for missing parent plugin — shows admin notice instead of fatal error
Fixed: Credentials never saving on first entry — validation now only blocks on definitive auth failures
Fixed: Reply-to email field cannot be cleared — submitting empty now removes the stored address
2.1.4 - 2026-06-09
Changed: Minimum WordPress version lowered to 5.7 (verified real minimum by static analysis)
2.1.3 - 2026-06-09
Fixed: Nonce handling in manual quota refresh to correctly handle false values from filter_input()
Fixed: Admin notices display now skips non-array notice entries
Fixed: Input normalization for recipients, attachments, and headers now properly skips non-string values