From 6269b77f132a71adbf5046cbd708001f30528d60 Mon Sep 17 00:00:00 2001 From: Javier Casares Date: Tue, 9 Jun 2026 12:55:04 +0000 Subject: [PATCH] v2.1.5 --- changelog.txt | 171 ++++++++++-- includes/class-plugin.php | 43 +-- languages/robotstxt-smtp-amazonses-ca.mo | Bin 7164 -> 7010 bytes languages/robotstxt-smtp-amazonses-ca.po | 278 ++++++++++++-------- languages/robotstxt-smtp-amazonses-es_ES.mo | Bin 7247 -> 7076 bytes languages/robotstxt-smtp-amazonses-es_ES.po | 277 +++++++++++-------- languages/robotstxt-smtp-amazonses.pot | 251 ++++++++---------- readme.txt | 114 +++++--- robotstxt-smtp-amazonses.php | 54 +++- update.json | 8 +- vendor/composer/installed.php | 4 +- 11 files changed, 736 insertions(+), 464 deletions(-) diff --git a/changelog.txt b/changelog.txt index 631c596..2b21110 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,49 +1,170 @@ +== Changelog == + += 2.1.5 = + +_Release date: 2026-06-09_ + +**Added** + +* Runtime check at initialization: if the parent SMTP (by ROBOTSTXT) plugin is missing or inactive, the plugin skips initialization and displays an admin notice instead of producing a fatal error. + +**Fixed** + +* Credentials never saving on first entry: credential validation now only blocks saving for definitive authentication failures (InvalidClientTokenId, SignatureDoesNotMatch, InvalidAccessKeyId). All other AWS errors — wrong region, missing IAM permission, SES not enabled in region, network timeouts — allow saving so the user is not locked out. +* Reply-to email field cannot be cleared: submitting an empty value now explicitly removes the stored address. The parent plugin preserves the existing value when empty is submitted; this filter corrects that behavior. + +**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.4 = -* Updated minimum WordPress version to 5.7 (the actual code minimum, verified by static analysis). +_Release date: 2026-06-09_ + +**Changed** + +* Minimum WordPress version lowered from 6.5 to 5.7. The plugin code only uses APIs available since WordPress 5.7 (the `pre_wp_mail` filter), verified by static analysis with wp-compat. Note: on WordPress 5.7–6.4, the `Requires Plugins` dependency header is not enforced by the platform. + +**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.3 = -* Fixed nonce handling in manual quota refresh to correctly handle false values returned by filter_input(). -* Fixed admin notices display to skip non-array notice entries. -* Fixed input normalization for recipients, attachments, and headers to properly skip non-string values instead of attempting unsafe casts. -* Removed unused internal method (dead code cleanup). -* Updated compatibility: tested up to WordPress 7.1. +_Release date: 2026-06-09_ + +**Fixed** + +* Nonce handling in manual quota refresh now correctly handles `false` values returned by `filter_input()`. +* Admin notices display now skips non-array notice entries. +* Input normalization for recipients, attachments, and headers now properly skips non-string values instead of attempting unsafe casts. + +**Changed** + +* Removed unused internal rate limit application method. + +**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.2 = -* Fixed charset encoding issue that caused "expected parameter value, got null" error when sending emails through Amazon SES. -* Added robust charset validation in header parsing to prevent empty or invalid charset values. -* Enhanced charset handling with fallback to UTF-8 when no valid charset is provided. +_Release date: 2026-02-12_ + +**Fixed** + +* Charset encoding issue that caused "expected parameter value, got null" error when sending emails through Amazon SES. +* Charset validation in header parsing now prevents empty or invalid charset values. +* Charset handling falls back to UTF-8 when no valid charset is provided. + +**Compatibility** + +* WordPress: 6.5 - 6.9 +* PHP: 8.2 - 8.4 = 2.1.1 = -* Added comprehensive Amazon SES debug context to test email error reports. -* Debug information now includes: AWS region, masked access key, SDK version, endpoint URL, and UTC timestamp. +_Release date: 2026-02-09_ + +**Added** + +* Comprehensive Amazon SES debug context to test email error reports: AWS region, masked access key, SDK version, endpoint URL, and UTC timestamp. * Enhanced AWS error reporting with request IDs, HTTP status codes, and error codes for easier troubleshooting. -* Improved security by masking access keys in error output (shows only first 4 and last 4 characters). + +**Security** + +* Access keys are now masked in error output, showing only the first and last 4 characters. + +**Compatibility** + +* WordPress: 6.5 - 6.9 +* PHP: 8.2 - 8.4 = 2.1.0 = -* Changed uninstall behavior: plugin no longer performs cleanup on uninstall, all data cleanup is now handled by the core SMTP plugin. -* This ensures Amazon SES credentials are preserved when only the add-on is removed, and properly cleaned when the core plugin is uninstalled. -* Simplified uninstall.php to delegate all cleanup responsibility to core SMTP plugin. +_Release date: 2026-02-09_ + +**Changed** + +* Uninstall behavior: the add-on no longer performs cleanup on its own uninstall. All data cleanup — including Amazon SES credentials — is now handled by the core SMTP plugin when it is uninstalled. This ensures credentials are preserved if only the add-on is removed. + +**Compatibility** + +* WordPress: 6.5 - 6.9 +* PHP: 8.2 - 8.4 = 2.0.1 = -* Version bump for maintenance release. +_Release date: 2026-01-30_ + +**Changed** + +* Maintenance release with minor internal fixes. + +**Compatibility** + +* WordPress: 6.5 - 6.9 +* PHP: 8.2 - 8.4 = 2.0.0 = -* Added Reply-To header support for emails sent via Amazon SES. -* Improved error handling and validation. -* Enhanced compatibility with core SMTP plugin 2.0.0. -* Improved credential handling and encryption. -* Code quality improvements and documentation. -* **BREAKING CHANGE**: Minimum PHP version increased to 8.2 (required by AWS SDK for PHP). -* Updated AWS SDK for PHP to latest version with security updates. +_Release date: 2026-01-29_ + +**Added** + +* Reply-To header support for emails sent through Amazon SES. + +**Changed** + +* Minimum PHP version increased to 8.2. Required by the AWS SDK for PHP. +* Updated AWS SDK for PHP to version 3.369.20 with security patches. + +**Compatibility** + +* WordPress: 6.5 - 6.9 +* PHP: 8.2 - 8.4 = 1.0.0 = -* Initial release with Amazon SES credential management, region selection, and live validation inside the SMTP plugin settings. -* Routes WordPress and SMTP test emails through Amazon SES whenever credentials are configured and verified. +_Release date: 2026-01-27_ + +**Highlights** + +* Initial release. + +**Added** + +* Amazon SES credential management (IAM access key, secret key, region) inside the SMTP plugin settings. +* Live credential validation on save via the `GetAccount` API call. +* Region selector with automatic discovery of all SES-enabled AWS endpoints. +* Routes WordPress mail and SMTP test emails through Amazon SES whenever credentials are configured. +* AWS SDK for PHP v3 bundled as a Composer dependency. + +**Compatibility** + +* WordPress: 6.5 - 6.8 +* PHP: 8.2 - 8.3 diff --git a/includes/class-plugin.php b/includes/class-plugin.php index 41e2e3a..6c2f7e4 100644 --- a/includes/class-plugin.php +++ b/includes/class-plugin.php @@ -1210,6 +1210,15 @@ class Plugin { } } + // The parent plugin only updates reply_to_email when a valid address is submitted — it never + // clears the field. Explicitly clear it here when the user submits an empty value. + if ( array_key_exists( 'reply_to_email', $options ) ) { + $submitted_reply_to = is_string( $options['reply_to_email'] ) ? \sanitize_email( \trim( $options['reply_to_email'] ) ) : ''; + if ( '' === $submitted_reply_to ) { + $clean['reply_to_email'] = ''; + } + } + return $clean; } @@ -1491,17 +1500,7 @@ class Plugin { $message = \esc_html( (string) $message ); - // Allow saving if the error is due to missing IAM permissions (not authorization to use SES itself). - // The credentials may still work for sending emails which requires different permissions. - if ( 'AccessDeniedException' === $aws_error_code || 'UnauthorizedException' === $aws_error_code ) { - if ( \strpos( $message, 'not authorized to perform: ses:GetAccount' ) !== false ) { - // Permission error for GetAccount API - credentials might still work for sending. - // Return null (success) but we could add a notice here if needed. - return null; - } - } - - // For authentication errors (invalid credentials), prevent saving. + // Block only when credentials are definitively wrong (wrong access key or signature). if ( in_array( $aws_error_code, array( 'InvalidClientTokenId', 'SignatureDoesNotMatch', 'InvalidAccessKeyId' ), true ) ) { return new WP_Error( 'robotstxt_smtp_amazon_ses_invalid_credentials', @@ -1513,26 +1512,10 @@ class Plugin { ); } - // For other AWS errors, show warning but allow saving. - return new WP_Error( - 'robotstxt_smtp_amazon_ses_invalid_credentials', - \sprintf( - /* translators: %s: Error message from Amazon SES. */ - \esc_html__( 'Could not verify Amazon SES credentials: %s', 'robotstxt-smtp-amazonses' ), - $message - ) - ); + // Any other AWS error (missing permission, wrong region, SES not enabled in region, etc.) — + // the credentials may still be valid for sending. Allow saving. } catch ( Throwable $exception ) { - $message = \esc_html( $exception->getMessage() ); - - return new WP_Error( - 'robotstxt_smtp_amazon_ses_unexpected_error', - \sprintf( - /* translators: %s: Error message describing the unexpected failure. */ - \esc_html__( 'An unexpected error occurred while validating Amazon SES credentials: %s', 'robotstxt-smtp-amazonses' ), - $message - ) - ); + unset( $exception ); // Network error or timeout — cannot validate, allow saving. } return null; diff --git a/languages/robotstxt-smtp-amazonses-ca.mo b/languages/robotstxt-smtp-amazonses-ca.mo index 416d40c3bc68ecb973ec653b8afebd50349f1903..e7a6c9e932963b4a98136f2798a85ca32e3e37c1 100644 GIT binary patch delta 1798 zcmZwHO>7ip9LMozX_q1`NXtTNx57|fN`dW45vT=iS+GfCYLPAx5)-q#9ky$>JIl^& z0X?jV;sF&83qd_7oCt}Sm{F^V8e^h~dXWPM<4b^xiBV4`iZ9XcZ+7a*C;RN@d1juO zdH(1BOup4&n;5F@(n@ciqj@$<->%~yCBZ=v?e5EobQDP*qZ7gPo#++21bNi^$g zG_)3js2ioi6KPZ=IaDMsgy-MJA^M-;DE@=|%qX)VSaSr=ViC0`{zUDOD6?0;4YfyB z;}clhNrOq7i>TM?UDN}=3y()h4^0!tA>4_|ObHdi>G1qHQ~+<{G5i>Zu`f>4s9-b! zeJhk9O^Vli5R4h1_EI$wl`Rd-eYl9K&9Y{PtOgqtr+CsNhCn@Bsu){N(s-Qi^Ngj1O=^B8x)spOMxwXDI(#=VmjC+m2wchXC^ zvtBuonaw=ulw8~OqbtUu{>!V%5kJ-09`T*7Gyl!};b7)=#V(w*j#q8VE?POKRI+oP lQ~BRGY}YH~tA#LxPv(mm&ng5VR0qud`Xik&f3o{(MNsfX2QLUJB8r8Ah1iEam|M{7~BG7*mNIxDeO*?!;=^Utk|jVgzsCV*D9b z;}dMfy1B*-Vn43HZ;@%r}SXcU1Qo-yEm11kWI2n48Gt&5ziG(^!jtVk?Hodk1!+ zR+2*9KZ0N3G1T)BMkV{E0o86sO{9$V-#8sXBpL!8xqQYuJv{ zsD1%%QZ@Cs2wPB@+JyZ$f<1T&w^=-gB+1weruWBd$-f@#Qh`nZOR82 z$LFY&*O9*+IDjqq19svad=LM^QEcUA~y55N5a^`cj(iBysn?WGv9c+-tKrk|h&KIC7YLLM=fkqH#d z11c=ugkt3tG@?4JLJhD5_u+2r#@onV@=k&#rZc{o(Bw3bK9}}DGogv7Xz!@#*v=x> z5FZfzW;Vy6bUqL(_Rt(6^z}8oa`C!oSUP$|e=SO|%2I+2;vHVKRY;?k2W_`TVi~cD z&_`$@RJ7dJMcb3ZsF{_Ew&5T_TD&h*zFPig(Ep-x(n*Afxr9o4>C52!A)STLFQHFt6Dm4U`cx`wiJ1E+_{;3lSh%U;U?P)FCJO1?{*zS=?#1wC zYhIr-kxAM)r(hpU<n4)Wkm<`PSzgCCej(>RfiMVl>4%BkJT`e8p}+!?R5OR zZ<^{+I#Au{KCC`%x%X-Yf~C9BW#RImc{@{j7KyoY7ED<6!;U?^;`2n#9&`3j_#>zH zCj35uZhQH-dw5~QTH=jw=Tq5qA(bnbVW#w^(N}sAS?r!&bii6#?v_k(b9~GhFC@I4 N|7&~GnyR~F{RetQ*k=F$ diff --git a/languages/robotstxt-smtp-amazonses-ca.po b/languages/robotstxt-smtp-amazonses-ca.po index b26802e..d5cbe3c 100644 --- a/languages/robotstxt-smtp-amazonses-ca.po +++ b/languages/robotstxt-smtp-amazonses-ca.po @@ -1,7 +1,9 @@ msgid "" msgstr "" "Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES\n" -"POT-Creation-Date: 2026-01-29 10:03+0100\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" "PO-Revision-Date: 2026-01-29 09:30+0100\n" "Last-Translator: ROBOTSTXT \n" "Language-Team: Catalan\n" @@ -12,304 +14,358 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Manual\n" -#: includes/class-plugin.php:151 -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." +#. Plugin Name of the plugin +#: robotstxt-smtp-amazonses.php +msgid "SMTP (by ROBOTSTXT) Amazon SES" +msgstr "SMTP (by ROBOTSTXT) Amazon SES" -#: includes/class-plugin.php:224 +#. Plugin URI of the plugin +#: robotstxt-smtp-amazonses.php +msgid "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses" +msgstr "" + +#. Description of the plugin +#: robotstxt-smtp-amazonses.php +msgid "Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin." +msgstr "Afegeix suport de configuració d'Amazon SES al plugin ROBOTSTXT SMTP." + +#. Author of the plugin +#: robotstxt-smtp-amazonses.php +msgid "ROBOTSTXT" +msgstr "ROBOTSTXT" + +#. Author URI of the plugin +#: robotstxt-smtp-amazonses.php +msgid "https://www.robotstxt.es/" +msgstr "" + +#: class-robotstxt-updater.php:379 +msgid "Security check failed" +msgstr "Ha fallat la comprovació de seguretat" + +#: class-robotstxt-updater.php:384 includes/class-plugin.php:918 +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 +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 #, php-format msgid "Amazon SES could not prepare the email: %s" msgstr "Amazon SES no ha pogut preparar l'email: %s" -#: includes/class-plugin.php:265 +#. translators: %s: Error message returned by Amazon SES. +#: includes/class-plugin.php:275 #, php-format msgid "Amazon SES could not send the email: %s" msgstr "Amazon SES no ha pogut enviar l'email: %s" -#: includes/class-plugin.php:282 +#. translators: %s: Error message describing the unexpected failure. +#: includes/class-plugin.php:295 #, 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" -#: includes/class-plugin.php:330 +#. translators: %s: Error details describing why the From header is invalid. +#: includes/class-plugin.php:357 #, php-format msgid "Amazon SES rejected the \"From\" address: %s" msgstr "Amazon SES ha rebutjat l'adreça \"De\": %s" -#: includes/class-plugin.php:351 +#. translators: %s: Invalid recipient email address. +#: includes/class-plugin.php:378 #, php-format msgid "Amazon SES rejected the recipient address: %s" msgstr "Amazon SES ha rebutjat l'adreça del destinatari: %s" -#: includes/class-plugin.php:373 +#. translators: %s: Invalid CC email address. +#: includes/class-plugin.php:400 #, php-format msgid "Amazon SES rejected the CC address: %s" msgstr "Amazon SES ha rebutjat l'adreça CC: %s" -#: includes/class-plugin.php:395 +#. translators: %s: Invalid BCC email address. +#: includes/class-plugin.php:422 #, php-format msgid "Amazon SES rejected the BCC address: %s" msgstr "Amazon SES ha rebutjat l'adreça CCO: %s" -#: includes/class-plugin.php:417 +#. translators: %s: Invalid reply-to email address. +#: includes/class-plugin.php:444 #, php-format msgid "Amazon SES rejected the reply-to address: %s" msgstr "Amazon SES ha rebutjat l'adreça de resposta: %s" -#: includes/class-plugin.php:446 +#. translators: %s: Invalid reply-to email address from settings. +#: includes/class-plugin.php:473 #, php-format msgid "Amazon SES rejected the configured reply-to address: %s" msgstr "Amazon SES ha rebutjat l'adreça de resposta configurada: %s" -#: includes/class-plugin.php:497 +#. translators: %s: Attachment path that could not be added. +#: includes/class-plugin.php:524 #, 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:833 +#: includes/class-plugin.php:910 msgid "Security check failed." msgstr "Ha fallat la comprovació de seguretat." -#: includes/class-plugin.php:841 robotstxt-updater.php:367 -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:854 +#: includes/class-plugin.php:931 msgid "Amazon SES quotas refreshed successfully." msgstr "Quotes d'Amazon SES actualitzades correctament." -#: includes/class-plugin.php:861 +#: includes/class-plugin.php:938 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." +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:900 +#: includes/class-plugin.php:977 msgid "Access Key ID" msgstr "ID de clau d'accés" -#: includes/class-plugin.php:906 +#: includes/class-plugin.php:983 msgid "Secret Access Key" msgstr "Clau d'accés secreta" -#: includes/class-plugin.php:912 +#: includes/class-plugin.php:989 msgid "Region" msgstr "Regió" -#: includes/class-plugin.php:918 -msgid "From Email" -msgstr "Email remitent" - -#: includes/class-plugin.php:924 -msgid "From Name" -msgstr "Nom remitent" - -#: includes/class-plugin.php:930 -msgid "Reply-To Email" -msgstr "Email de resposta" - -#: includes/class-plugin.php:936 -msgid "Reply-To Name" -msgstr "Nom de resposta" - -#: includes/class-plugin.php:951 +#: includes/class-plugin.php:1028 msgid "Leave empty to keep the stored access key." msgstr "Deixar buit per mantenir la clau d'accés emmagatzemada." -#: includes/class-plugin.php:962 -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 "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:1039 +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 "" +"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:974 +#: includes/class-plugin.php:1051 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:985 -msgid "Enter the secret access key associated with the IAM user. Leave the field empty to retain the existing value." -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:1062 +msgid "" +"Enter the secret access key associated with the IAM user. Leave the field " +"empty to retain the existing value." +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:1000 +#: includes/class-plugin.php:1077 msgid "Select a region" msgstr "Selecciona una regió" -#: includes/class-plugin.php:1005 +#: includes/class-plugin.php:1082 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:1082 +#: includes/class-plugin.php:1160 msgid "The selected Amazon SES region is not available." msgstr "La regió d'Amazon SES seleccionada no està disponible." -#: includes/class-plugin.php:1102 -msgid "Amazon SES credentials were not saved. Provide an access key, secret key, and region." -msgstr "Les credencials d'Amazon SES no s'han desat. Proporciona una clau d'accés, clau secreta i regió." +#: includes/class-plugin.php:1176 +msgid "" +"Amazon SES credentials were not saved. Provide an access key, secret key, " +"and region." +msgstr "" +"Les credencials d'Amazon SES no s'han desat. Proporciona una clau d'accés, " +"clau secreta i regió." -#: includes/class-plugin.php:1126 +#: includes/class-plugin.php:1200 msgid "Amazon SES credentials verified successfully." msgstr "Credencials d'Amazon SES verificades correctament." -#: includes/class-plugin.php:1281 +#: includes/class-plugin.php:1411 msgid "US East (Ohio)" msgstr "EUA Est (Ohio)" -#: includes/class-plugin.php:1282 +#: includes/class-plugin.php:1412 msgid "US East (N. Virginia)" msgstr "EUA Est (N. Virgínia)" -#: includes/class-plugin.php:1283 +#: includes/class-plugin.php:1413 msgid "US West (N. California)" msgstr "EUA Oest (N. Califòrnia)" -#: includes/class-plugin.php:1284 +#: includes/class-plugin.php:1414 msgid "US West (Oregon)" msgstr "EUA Oest (Oregon)" -#: includes/class-plugin.php:1285 +#: includes/class-plugin.php:1415 msgid "Africa (Cape Town)" msgstr "Àfrica (Ciutat del Cap)" -#: includes/class-plugin.php:1286 +#: includes/class-plugin.php:1416 msgid "Asia Pacific (Hyderabad)" msgstr "Àsia Pacífic (Hyderabad)" -#: includes/class-plugin.php:1287 +#: includes/class-plugin.php:1417 msgid "Asia Pacific (Jakarta)" msgstr "Àsia Pacífic (Jakarta)" -#: includes/class-plugin.php:1288 +#: includes/class-plugin.php:1418 msgid "Asia Pacific (Mumbai)" msgstr "Àsia Pacífic (Mumbai)" -#: includes/class-plugin.php:1289 +#: includes/class-plugin.php:1419 msgid "Asia Pacific (Osaka)" msgstr "Àsia Pacífic (Osaka)" -#: includes/class-plugin.php:1290 +#: includes/class-plugin.php:1420 msgid "Asia Pacific (Seoul)" msgstr "Àsia Pacífic (Seül)" -#: includes/class-plugin.php:1291 +#: includes/class-plugin.php:1421 msgid "Asia Pacific (Singapore)" msgstr "Àsia Pacífic (Singapur)" -#: includes/class-plugin.php:1292 +#: includes/class-plugin.php:1422 msgid "Asia Pacific (Sydney)" msgstr "Àsia Pacífic (Sydney)" -#: includes/class-plugin.php:1293 +#: includes/class-plugin.php:1423 msgid "Asia Pacific (Tokyo)" msgstr "Àsia Pacífic (Tòquio)" -#: includes/class-plugin.php:1294 +#: includes/class-plugin.php:1424 msgid "Canada (Central)" msgstr "Canadà (Central)" -#: includes/class-plugin.php:1295 +#: includes/class-plugin.php:1425 msgid "Europe (Frankfurt)" msgstr "Europa (Frankfurt)" -#: includes/class-plugin.php:1296 +#: includes/class-plugin.php:1426 msgid "Europe (Ireland)" msgstr "Europa (Irlanda)" -#: includes/class-plugin.php:1297 +#: includes/class-plugin.php:1427 msgid "Europe (London)" msgstr "Europa (Londres)" -#: includes/class-plugin.php:1298 +#: includes/class-plugin.php:1428 msgid "Europe (Milan)" msgstr "Europa (Milà)" -#: includes/class-plugin.php:1299 +#: includes/class-plugin.php:1429 msgid "Europe (Paris)" msgstr "Europa (París)" -#: includes/class-plugin.php:1300 +#: includes/class-plugin.php:1430 msgid "Europe (Stockholm)" msgstr "Europa (Estocolm)" -#: includes/class-plugin.php:1301 +#: includes/class-plugin.php:1431 msgid "Europe (Zurich)" msgstr "Europa (Zuric)" -#: includes/class-plugin.php:1302 +#: includes/class-plugin.php:1432 msgid "Israel (Tel Aviv)" msgstr "Israel (Tel Aviv)" -#: includes/class-plugin.php:1303 +#: includes/class-plugin.php:1433 msgid "Middle East (Bahrain)" msgstr "Orient Mitjà (Bahrain)" -#: includes/class-plugin.php:1304 +#: includes/class-plugin.php:1434 msgid "Middle East (UAE)" msgstr "Orient Mitjà (EAU)" -#: includes/class-plugin.php:1305 +#: includes/class-plugin.php:1435 msgid "South America (São Paulo)" msgstr "Sud-amèrica (São Paulo)" -#: includes/class-plugin.php:1306 +#: includes/class-plugin.php:1436 msgid "AWS GovCloud (US-East)" msgstr "AWS GovCloud (EUA-Est)" -#: includes/class-plugin.php:1307 +#: includes/class-plugin.php:1437 msgid "AWS GovCloud (US-West)" msgstr "AWS GovCloud (EUA-Oest)" -#: includes/class-plugin.php:1322 +#. translators: 1: AWS region display name. 2: AWS region code. +#: includes/class-plugin.php:1452 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" -#: includes/class-plugin.php:1338 +#. translators: %s: AWS region code. +#: includes/class-plugin.php:1468 #, php-format msgid "Region %s" msgstr "Regió %s" -#: includes/class-plugin.php:1389 +#. translators: %s: Error message from Amazon SES. +#: includes/class-plugin.php:1509 #, php-format msgid "Invalid Amazon SES credentials: %s" msgstr "Credencials d'Amazon SES invàlides: %s" -#: includes/class-plugin.php:1400 -#, php-format -msgid "Could not verify Amazon SES credentials: %s" -msgstr "No s'han pogut verificar les credencials d'Amazon SES: %s" - -#: includes/class-plugin.php:1411 -#, php-format -msgid "An unexpected error occurred while validating Amazon SES credentials: %s" -msgstr "S'ha produït un error inesperat en validar les credencials d'Amazon SES: %s" - -#: includes/class-plugin.php:1470 includes/class-plugin.php:1492 +#: includes/class-plugin.php:1574 includes/class-plugin.php:1596 msgid "Amazon SES credentials are not configured." msgstr "Les credencials d'Amazon SES no estan configurades." -#: includes/class-plugin.php:1506 +#: includes/class-plugin.php:1610 msgid "Amazon SES did not return quota data." msgstr "Amazon SES no ha retornat dades de quota." -#: includes/class-plugin.php:1524 +#: includes/class-plugin.php:1632 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." +msgstr "" +"No es poden obtenir les quotes de SES: l'usuari IAM no té el permís ses:" +"GetAccount." -#: includes/class-plugin.php:1532 +#. translators: %s: AWS error message +#: includes/class-plugin.php:1640 #, php-format msgid "Amazon SES API error: %s" msgstr "Error d'API d'Amazon SES: %s" -#: includes/class-plugin.php:1541 +#. translators: %s: Error message +#: includes/class-plugin.php:1649 #, php-format msgid "Failed to fetch SES quota: %s" msgstr "Ha fallat en obtenir la quota de SES: %s" -#: robotstxt-updater.php:362 -msgid "Security check failed" -msgstr "Ha fallat la comprovació de seguretat" +#: robotstxt-smtp-amazonses.php:68 +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." -msgid "SMTP (by ROBOTSTXT) Amazon SES" -msgstr "SMTP (by ROBOTSTXT) Amazon SES" +#~ msgid "From Email" +#~ msgstr "Email remitent" -msgid "Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin." -msgstr "Afegeix suport de configuració d'Amazon SES al plugin ROBOTSTXT SMTP." +#~ msgid "From Name" +#~ msgstr "Nom remitent" -msgid "ROBOTSTXT" -msgstr "ROBOTSTXT" +#~ msgid "Reply-To Email" +#~ msgstr "Email de resposta" + +#~ msgid "Reply-To Name" +#~ msgstr "Nom de resposta" + +#, php-format +#~ msgid "Could not verify Amazon SES credentials: %s" +#~ msgstr "No s'han pogut verificar les credencials d'Amazon SES: %s" + +#, php-format +#~ msgid "" +#~ "An unexpected error occurred while validating Amazon SES credentials: %s" +#~ msgstr "" +#~ "S'ha produït un error inesperat en validar les credencials d'Amazon SES: " +#~ "%s" diff --git a/languages/robotstxt-smtp-amazonses-es_ES.mo b/languages/robotstxt-smtp-amazonses-es_ES.mo index 95ef0e3c38949fea3db2e7b2538a129a9cff9fad..034d1d21a46eeb380dc9e9ca1e04903ef41f736c 100644 GIT binary patch delta 1791 zcmZwHOKenC9LMo9eE_xv`r^@ta6ukzWoB9s`k;yq1TCh4w4)Ki!kNys9W$LfoqJnb z6CD?53`7=A2tE=B!3_(e=4yl}EOezTd?c(iL^RR5FuE`bF-E_?JGZVp>3=@w-Z^vb z|NPIn{bJy){?g6nnlpxWfaoNKtBgtE@ftp8-_;sZkGF6w{t{ZV%$Sv2ci?{P#%7$x z_4oqD@pbIM&+s7rj@xnX^5A~SOwfsP<1{{oALCYRUcsa|fSMqU+wm3Lh96)*evA5j z>s`j|zyv;o4l0rNP>FwzYw#Af;-7&fV;brz12>@t450=b!A7((fpho(UcqU+jauF~aYVHJBe5r1^fu4y@zpnr|CEg2UK`FQO7X-(*U`9$(`|7dIAh44bHz z_Bexk@D%RGPcVzOQD-6DQc3(I_Hg|XcH@tz`5M_rZP_4do_XAf@1VBy`&R0&jJJ}e z4$Fh66(2>FY9{n$ROaVVF%c%bw*HPmaaSH!IoslUH0!Jj+ z4ke`j6)L?BF3-_!7!xBl6I3r~+Do-TqKeQ&eZ)TE-twKA4!t%(p?lS#X$ebh51s1p zVi9C| zjuP55wH1UmLTzXHtJ;HpEtA1NPi-$-mYU={6|*=*5vEpN)U#z&J!tgiHe zHFh|0I60ntBH3*fal&e}g{14YZ|6leGSF*Q@wly0 delta 1836 zcmYk+OKenC9LMoK7nwMZI-NF@ z5k?bZOwa_lAuKe65KM%)Q17NOLE}OaWl@t#Vq&P#xM9UgLxLfGe|IkGN&fS>k8{uC zf6kff0}F%YrD*7qp$rpoBDKtzBz_j+htm6$F)OeSSL3e0ajfP34cv!w7{yz-7JtMZ zypNsO^t3TUn84@p9P+$uJTAI6Pr8IO@I)HIQz8sA6_v`57)oxKIOWRD&f{sxF{r@F_OqJoe%u zs$PhfT$*NFgB_?$?ZE_&;SRivhb+EBl4RQGOzrj5lm8YjMtGnGPoUQ9Eo{Q?Py_rG zJMb}X#Es-{3|~duz?#*pc7RufqH+8ALd|+_!_=f=0d6Z4V9{P zT04ak$RN!xsFXekRBL3>)CX=rCT;pq^%AJlb2xZk3Z9=s&G=)~0B+-UEdR`fj!Tr` z(uWyGb)3P=_%=pxEz{9lkE(wVwNyt@?Ue9YbWsDEN9JgjkS@)i_@d7L zN;Uv}m|;|dlc+zUS=0wEp2VBD0~>hBUh>yb1JiyvKxn6Ht@jgJx;BE<@Jm;qjxGOh z{u1|N!Yt=FxHm#AWi>raY$G%r&EZL5oT}&-lHl%2~L?OCUgJ~5{k534OJHdM%G?fuzgI%E9H(PY-~9`u=mmGCacncU2wALqLV8+W;CCjC^-K;aKDYly@fSrt#*H)c1rK2r)He#V)9Al N|3C9bx6pLg`Ul&k+N=No diff --git a/languages/robotstxt-smtp-amazonses-es_ES.po b/languages/robotstxt-smtp-amazonses-es_ES.po index 2e92960..ace5076 100644 --- a/languages/robotstxt-smtp-amazonses-es_ES.po +++ b/languages/robotstxt-smtp-amazonses-es_ES.po @@ -1,7 +1,9 @@ msgid "" msgstr "" "Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES\n" -"POT-Creation-Date: 2026-01-29 10:03+0100\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" "PO-Revision-Date: 2026-01-29 09:30+0100\n" "Last-Translator: ROBOTSTXT \n" "Language-Team: Spanish\n" @@ -12,304 +14,357 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Manual\n" -#: includes/class-plugin.php:151 -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." +#. Plugin Name of the plugin +#: robotstxt-smtp-amazonses.php +msgid "SMTP (by ROBOTSTXT) Amazon SES" +msgstr "SMTP (by ROBOTSTXT) Amazon SES" -#: includes/class-plugin.php:224 +#. Plugin URI of the plugin +#: robotstxt-smtp-amazonses.php +msgid "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses" +msgstr "" + +#. Description of the plugin +#: robotstxt-smtp-amazonses.php +msgid "Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin." +msgstr "Añade soporte de configuración de Amazon SES al plugin ROBOTSTXT SMTP." + +#. Author of the plugin +#: robotstxt-smtp-amazonses.php +msgid "ROBOTSTXT" +msgstr "ROBOTSTXT" + +#. Author URI of the plugin +#: robotstxt-smtp-amazonses.php +msgid "https://www.robotstxt.es/" +msgstr "" + +#: class-robotstxt-updater.php:379 +msgid "Security check failed" +msgstr "Falló la comprobación de seguridad" + +#: class-robotstxt-updater.php:384 includes/class-plugin.php:918 +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 +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 #, php-format msgid "Amazon SES could not prepare the email: %s" msgstr "Amazon SES no pudo preparar el email: %s" -#: includes/class-plugin.php:265 +#. translators: %s: Error message returned by Amazon SES. +#: includes/class-plugin.php:275 #, php-format msgid "Amazon SES could not send the email: %s" msgstr "Amazon SES no pudo enviar el email: %s" -#: includes/class-plugin.php:282 +#. translators: %s: Error message describing the unexpected failure. +#: includes/class-plugin.php:295 #, 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" -#: includes/class-plugin.php:330 +#. translators: %s: Error details describing why the From header is invalid. +#: includes/class-plugin.php:357 #, php-format msgid "Amazon SES rejected the \"From\" address: %s" msgstr "Amazon SES rechazó la dirección \"De\": %s" -#: includes/class-plugin.php:351 +#. translators: %s: Invalid recipient email address. +#: includes/class-plugin.php:378 #, php-format msgid "Amazon SES rejected the recipient address: %s" msgstr "Amazon SES rechazó la dirección del destinatario: %s" -#: includes/class-plugin.php:373 +#. translators: %s: Invalid CC email address. +#: includes/class-plugin.php:400 #, php-format msgid "Amazon SES rejected the CC address: %s" msgstr "Amazon SES rechazó la dirección CC: %s" -#: includes/class-plugin.php:395 +#. translators: %s: Invalid BCC email address. +#: includes/class-plugin.php:422 #, php-format msgid "Amazon SES rejected the BCC address: %s" msgstr "Amazon SES rechazó la dirección CCO: %s" -#: includes/class-plugin.php:417 +#. translators: %s: Invalid reply-to email address. +#: includes/class-plugin.php:444 #, php-format msgid "Amazon SES rejected the reply-to address: %s" msgstr "Amazon SES rechazó la dirección de respuesta: %s" -#: includes/class-plugin.php:446 +#. translators: %s: Invalid reply-to email address from settings. +#: includes/class-plugin.php:473 #, php-format msgid "Amazon SES rejected the configured reply-to address: %s" msgstr "Amazon SES rechazó la dirección de respuesta configurada: %s" -#: includes/class-plugin.php:497 +#. translators: %s: Attachment path that could not be added. +#: includes/class-plugin.php:524 #, php-format msgid "Amazon SES could not include the attachment: %s" msgstr "Amazon SES no pudo incluir el adjunto: %s" -#: includes/class-plugin.php:833 +#: includes/class-plugin.php:910 msgid "Security check failed." msgstr "Falló la comprobación de seguridad." -#: includes/class-plugin.php:841 robotstxt-updater.php:367 -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:854 +#: includes/class-plugin.php:931 msgid "Amazon SES quotas refreshed successfully." msgstr "Cuotas de Amazon SES actualizadas correctamente." -#: includes/class-plugin.php:861 +#: includes/class-plugin.php:938 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." +msgstr "" +"No se pudieron obtener las cuotas de Amazon SES. Verifica el registro de " +"depuración para más detalles." -#: includes/class-plugin.php:900 +#: includes/class-plugin.php:977 msgid "Access Key ID" msgstr "ID de clave de acceso" -#: includes/class-plugin.php:906 +#: includes/class-plugin.php:983 msgid "Secret Access Key" msgstr "Clave de acceso secreta" -#: includes/class-plugin.php:912 +#: includes/class-plugin.php:989 msgid "Region" msgstr "Región" -#: includes/class-plugin.php:918 -msgid "From Email" -msgstr "Email remitente" - -#: includes/class-plugin.php:924 -msgid "From Name" -msgstr "Nombre remitente" - -#: includes/class-plugin.php:930 -msgid "Reply-To Email" -msgstr "Email de respuesta" - -#: includes/class-plugin.php:936 -msgid "Reply-To Name" -msgstr "Nombre de respuesta" - -#: includes/class-plugin.php:951 +#: includes/class-plugin.php:1028 msgid "Leave empty to keep the stored access key." msgstr "Dejar vacío para mantener la clave de acceso almacenada." -#: includes/class-plugin.php:962 -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 "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:1039 +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 "" +"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:974 +#: includes/class-plugin.php:1051 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:985 -msgid "Enter the secret access key associated with the IAM user. Leave the field empty to retain the existing value." -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:1062 +msgid "" +"Enter the secret access key associated with the IAM user. Leave the field " +"empty to retain the existing value." +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:1000 +#: includes/class-plugin.php:1077 msgid "Select a region" msgstr "Selecciona una región" -#: includes/class-plugin.php:1005 +#: includes/class-plugin.php:1082 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:1082 +#: includes/class-plugin.php:1160 msgid "The selected Amazon SES region is not available." msgstr "La región de Amazon SES seleccionada no está disponible." -#: includes/class-plugin.php:1102 -msgid "Amazon SES credentials were not saved. Provide an access key, secret key, and region." -msgstr "Las credenciales de Amazon SES no se guardaron. Proporciona una clave de acceso, clave secreta y región." +#: includes/class-plugin.php:1176 +msgid "" +"Amazon SES credentials were not saved. Provide an access key, secret key, " +"and region." +msgstr "" +"Las credenciales de Amazon SES no se guardaron. Proporciona una clave de " +"acceso, clave secreta y región." -#: includes/class-plugin.php:1126 +#: includes/class-plugin.php:1200 msgid "Amazon SES credentials verified successfully." msgstr "Credenciales de Amazon SES verificadas correctamente." -#: includes/class-plugin.php:1281 +#: includes/class-plugin.php:1411 msgid "US East (Ohio)" msgstr "EE.UU. Este (Ohio)" -#: includes/class-plugin.php:1282 +#: includes/class-plugin.php:1412 msgid "US East (N. Virginia)" msgstr "EE.UU. Este (N. Virginia)" -#: includes/class-plugin.php:1283 +#: includes/class-plugin.php:1413 msgid "US West (N. California)" msgstr "EE.UU. Oeste (N. California)" -#: includes/class-plugin.php:1284 +#: includes/class-plugin.php:1414 msgid "US West (Oregon)" msgstr "EE.UU. Oeste (Oregón)" -#: includes/class-plugin.php:1285 +#: includes/class-plugin.php:1415 msgid "Africa (Cape Town)" msgstr "África (Ciudad del Cabo)" -#: includes/class-plugin.php:1286 +#: includes/class-plugin.php:1416 msgid "Asia Pacific (Hyderabad)" msgstr "Asia Pacífico (Hyderabad)" -#: includes/class-plugin.php:1287 +#: includes/class-plugin.php:1417 msgid "Asia Pacific (Jakarta)" msgstr "Asia Pacífico (Yakarta)" -#: includes/class-plugin.php:1288 +#: includes/class-plugin.php:1418 msgid "Asia Pacific (Mumbai)" msgstr "Asia Pacífico (Mumbai)" -#: includes/class-plugin.php:1289 +#: includes/class-plugin.php:1419 msgid "Asia Pacific (Osaka)" msgstr "Asia Pacífico (Osaka)" -#: includes/class-plugin.php:1290 +#: includes/class-plugin.php:1420 msgid "Asia Pacific (Seoul)" msgstr "Asia Pacífico (Seúl)" -#: includes/class-plugin.php:1291 +#: includes/class-plugin.php:1421 msgid "Asia Pacific (Singapore)" msgstr "Asia Pacífico (Singapur)" -#: includes/class-plugin.php:1292 +#: includes/class-plugin.php:1422 msgid "Asia Pacific (Sydney)" msgstr "Asia Pacífico (Sídney)" -#: includes/class-plugin.php:1293 +#: includes/class-plugin.php:1423 msgid "Asia Pacific (Tokyo)" msgstr "Asia Pacífico (Tokio)" -#: includes/class-plugin.php:1294 +#: includes/class-plugin.php:1424 msgid "Canada (Central)" msgstr "Canadá (Central)" -#: includes/class-plugin.php:1295 +#: includes/class-plugin.php:1425 msgid "Europe (Frankfurt)" msgstr "Europa (Fráncfort)" -#: includes/class-plugin.php:1296 +#: includes/class-plugin.php:1426 msgid "Europe (Ireland)" msgstr "Europa (Irlanda)" -#: includes/class-plugin.php:1297 +#: includes/class-plugin.php:1427 msgid "Europe (London)" msgstr "Europa (Londres)" -#: includes/class-plugin.php:1298 +#: includes/class-plugin.php:1428 msgid "Europe (Milan)" msgstr "Europa (Milán)" -#: includes/class-plugin.php:1299 +#: includes/class-plugin.php:1429 msgid "Europe (Paris)" msgstr "Europa (París)" -#: includes/class-plugin.php:1300 +#: includes/class-plugin.php:1430 msgid "Europe (Stockholm)" msgstr "Europa (Estocolmo)" -#: includes/class-plugin.php:1301 +#: includes/class-plugin.php:1431 msgid "Europe (Zurich)" msgstr "Europa (Zúrich)" -#: includes/class-plugin.php:1302 +#: includes/class-plugin.php:1432 msgid "Israel (Tel Aviv)" msgstr "Israel (Tel Aviv)" -#: includes/class-plugin.php:1303 +#: includes/class-plugin.php:1433 msgid "Middle East (Bahrain)" msgstr "Oriente Medio (Baréin)" -#: includes/class-plugin.php:1304 +#: includes/class-plugin.php:1434 msgid "Middle East (UAE)" msgstr "Oriente Medio (EAU)" -#: includes/class-plugin.php:1305 +#: includes/class-plugin.php:1435 msgid "South America (São Paulo)" msgstr "Sudamérica (São Paulo)" -#: includes/class-plugin.php:1306 +#: includes/class-plugin.php:1436 msgid "AWS GovCloud (US-East)" msgstr "AWS GovCloud (EE.UU.-Este)" -#: includes/class-plugin.php:1307 +#: includes/class-plugin.php:1437 msgid "AWS GovCloud (US-West)" msgstr "AWS GovCloud (EE.UU.-Oeste)" -#: includes/class-plugin.php:1322 +#. translators: 1: AWS region display name. 2: AWS region code. +#: includes/class-plugin.php:1452 #, php-format msgid "%1$s (%2$s)" msgstr "%1$s (%2$s)" -#: includes/class-plugin.php:1338 +#. translators: %s: AWS region code. +#: includes/class-plugin.php:1468 #, php-format msgid "Region %s" msgstr "Región %s" -#: includes/class-plugin.php:1389 +#. translators: %s: Error message from Amazon SES. +#: includes/class-plugin.php:1509 #, php-format msgid "Invalid Amazon SES credentials: %s" msgstr "Credenciales de Amazon SES inválidas: %s" -#: includes/class-plugin.php:1400 -#, php-format -msgid "Could not verify Amazon SES credentials: %s" -msgstr "No se pudieron verificar las credenciales de Amazon SES: %s" - -#: includes/class-plugin.php:1411 -#, php-format -msgid "An unexpected error occurred while validating Amazon SES credentials: %s" -msgstr "Ocurrió un error inesperado al validar las credenciales de Amazon SES: %s" - -#: includes/class-plugin.php:1470 includes/class-plugin.php:1492 +#: includes/class-plugin.php:1574 includes/class-plugin.php:1596 msgid "Amazon SES credentials are not configured." msgstr "Las credenciales de Amazon SES no están configuradas." -#: includes/class-plugin.php:1506 +#: includes/class-plugin.php:1610 msgid "Amazon SES did not return quota data." msgstr "Amazon SES no devolvió datos de cuota." -#: includes/class-plugin.php:1524 +#: includes/class-plugin.php:1632 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." +msgstr "" +"No se pueden obtener las cuotas de SES: el usuario IAM no tiene el permiso " +"ses:GetAccount." -#: includes/class-plugin.php:1532 +#. translators: %s: AWS error message +#: includes/class-plugin.php:1640 #, php-format msgid "Amazon SES API error: %s" msgstr "Error de API de Amazon SES: %s" -#: includes/class-plugin.php:1541 +#. translators: %s: Error message +#: includes/class-plugin.php:1649 #, php-format msgid "Failed to fetch SES quota: %s" msgstr "Falló al obtener la cuota de SES: %s" -#: robotstxt-updater.php:362 -msgid "Security check failed" -msgstr "Falló la comprobación de seguridad" +#: robotstxt-smtp-amazonses.php:68 +msgid "" +"SMTP (by ROBOTSTXT) Amazon SES requires the SMTP (by ROBOTSTXT) plugin to be " +"installed and active." +msgstr "" +"SMTP (by ROBOTSTXT) Amazon SES requiere que el plugin SMTP (by ROBOTSTXT) " +"esté instalado y activo." -msgid "SMTP (by ROBOTSTXT) Amazon SES" -msgstr "SMTP (by ROBOTSTXT) Amazon SES" +#~ msgid "From Email" +#~ msgstr "Email remitente" -msgid "Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin." -msgstr "Añade soporte de configuración de Amazon SES al plugin ROBOTSTXT SMTP." +#~ msgid "From Name" +#~ msgstr "Nombre remitente" -msgid "ROBOTSTXT" -msgstr "ROBOTSTXT" +#~ msgid "Reply-To Email" +#~ msgstr "Email de respuesta" + +#~ msgid "Reply-To Name" +#~ msgstr "Nombre de respuesta" + +#, php-format +#~ msgid "Could not verify Amazon SES credentials: %s" +#~ msgstr "No se pudieron verificar las credenciales de Amazon SES: %s" + +#, php-format +#~ msgid "" +#~ "An unexpected error occurred while validating Amazon SES credentials: %s" +#~ msgstr "" +#~ "Ocurrió un error inesperado al validar las credenciales de Amazon SES: %s" diff --git a/languages/robotstxt-smtp-amazonses.pot b/languages/robotstxt-smtp-amazonses.pot index 50d535e..29ec8f6 100644 --- a/languages/robotstxt-smtp-amazonses.pot +++ b/languages/robotstxt-smtp-amazonses.pot @@ -1,359 +1,326 @@ -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES\n" -"POT-Creation-Date: 2026-01-29 10:03+0100\n" -"PO-Revision-Date: 2026-01-29 10:03+0100\n" -"Last-Translator: \n" -"Language-Team: \n" +"Project-Id-Version: SMTP (by ROBOTSTXT) Amazon SES 2.1.5\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" -"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -"X-Generator: Poedit 3.8\n" -"X-Poedit-Basepath: ..\n" -"X-Poedit-Flags-xgettext: --add-comments=translators:\n" -"X-Poedit-WPHeader: robotstxt-smtp-amazonses.php\n" -"X-Poedit-SourceCharset: UTF-8\n" -"X-Poedit-KeywordsList: " -"__;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;_nx_noop:3c,1,2;__ngettext_noop:1,2\n" -"X-Poedit-SearchPath-0: .\n" -"X-Poedit-SearchPathExcluded-0: *.min.js\n" -"X-Poedit-SearchPathExcluded-1: vendor\n" +"POT-Creation-Date: 2026-06-09T10:41:00+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" -#: includes/class-plugin.php:151 +#. Plugin Name of the plugin +#: robotstxt-smtp-amazonses.php +msgid "SMTP (by ROBOTSTXT) Amazon SES" +msgstr "" + +#. Plugin URI of the plugin +#: robotstxt-smtp-amazonses.php +msgid "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses" +msgstr "" + +#. Description of the plugin +#: robotstxt-smtp-amazonses.php +msgid "Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin." +msgstr "" + +#. Author of the plugin +#: robotstxt-smtp-amazonses.php +msgid "ROBOTSTXT" +msgstr "" + +#. Author URI of the plugin +#: robotstxt-smtp-amazonses.php +msgid "https://www.robotstxt.es/" +msgstr "" + +#: class-robotstxt-updater.php:379 +msgid "Security check failed" +msgstr "" + +#: class-robotstxt-updater.php:384 +#: includes/class-plugin.php:918 +msgid "You do not have sufficient permissions to access this page." +msgstr "" + +#: includes/class-plugin.php:149 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:224 +#: includes/class-plugin.php:231 #, php-format msgid "Amazon SES could not prepare the email: %s" msgstr "" #. translators: %s: Error message returned by Amazon SES. -#: includes/class-plugin.php:265 +#: includes/class-plugin.php:275 #, php-format msgid "Amazon SES could not send the email: %s" msgstr "" #. translators: %s: Error message describing the unexpected failure. -#: includes/class-plugin.php:282 +#: includes/class-plugin.php:295 #, 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:330 +#: includes/class-plugin.php:357 #, php-format msgid "Amazon SES rejected the \"From\" address: %s" msgstr "" #. translators: %s: Invalid recipient email address. -#: includes/class-plugin.php:351 +#: includes/class-plugin.php:378 #, php-format msgid "Amazon SES rejected the recipient address: %s" msgstr "" #. translators: %s: Invalid CC email address. -#: includes/class-plugin.php:373 +#: includes/class-plugin.php:400 #, php-format msgid "Amazon SES rejected the CC address: %s" msgstr "" #. translators: %s: Invalid BCC email address. -#: includes/class-plugin.php:395 +#: includes/class-plugin.php:422 #, php-format msgid "Amazon SES rejected the BCC address: %s" msgstr "" #. translators: %s: Invalid reply-to email address. -#: includes/class-plugin.php:417 +#: includes/class-plugin.php:444 #, 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:446 +#: includes/class-plugin.php:473 #, 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:497 +#: includes/class-plugin.php:524 #, php-format msgid "Amazon SES could not include the attachment: %s" msgstr "" -#: includes/class-plugin.php:833 +#: includes/class-plugin.php:910 msgid "Security check failed." msgstr "" -#: includes/class-plugin.php:841 robotstxt-updater.php:367 -msgid "You do not have sufficient permissions to access this page." -msgstr "" - -#: includes/class-plugin.php:854 +#: includes/class-plugin.php:931 msgid "Amazon SES quotas refreshed successfully." msgstr "" -#: includes/class-plugin.php:861 +#: includes/class-plugin.php:938 msgid "Unable to fetch quotas from Amazon SES. Check debug log for details." msgstr "" -#: includes/class-plugin.php:900 +#: includes/class-plugin.php:977 msgid "Access Key ID" msgstr "" -#: includes/class-plugin.php:906 +#: includes/class-plugin.php:983 msgid "Secret Access Key" msgstr "" -#: includes/class-plugin.php:912 +#: includes/class-plugin.php:989 msgid "Region" msgstr "" -#: includes/class-plugin.php:918 -msgid "From Email" -msgstr "" - -#: includes/class-plugin.php:924 -msgid "From Name" -msgstr "" - -#: includes/class-plugin.php:930 -msgid "Reply-To Email" -msgstr "" - -#: includes/class-plugin.php:936 -msgid "Reply-To Name" -msgstr "" - -#: includes/class-plugin.php:951 +#: includes/class-plugin.php:1028 msgid "Leave empty to keep the stored access key." msgstr "" -#: includes/class-plugin.php:962 -msgid "" -"Provide the IAM access key ID with permissions to send email through Amazon " -"SES. Leave the field empty to retain the existing value." +#: includes/class-plugin.php:1039 +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:974 +#: includes/class-plugin.php:1051 msgid "Leave empty to keep the stored secret access key." msgstr "" -#: includes/class-plugin.php:985 -msgid "" -"Enter the secret access key associated with the IAM user. Leave the field " -"empty to retain the existing value." +#: includes/class-plugin.php:1062 +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:1000 +#: includes/class-plugin.php:1077 msgid "Select a region" msgstr "" -#: includes/class-plugin.php:1005 +#: includes/class-plugin.php:1082 msgid "Choose the AWS region where your Amazon SES account is hosted." msgstr "" -#: includes/class-plugin.php:1082 +#: includes/class-plugin.php:1160 msgid "The selected Amazon SES region is not available." msgstr "" -#: includes/class-plugin.php:1102 -msgid "" -"Amazon SES credentials were not saved. Provide an access key, secret key, " -"and region." +#: includes/class-plugin.php:1176 +msgid "Amazon SES credentials were not saved. Provide an access key, secret key, and region." msgstr "" -#: includes/class-plugin.php:1126 +#: includes/class-plugin.php:1200 msgid "Amazon SES credentials verified successfully." msgstr "" -#: includes/class-plugin.php:1281 +#: includes/class-plugin.php:1411 msgid "US East (Ohio)" msgstr "" -#: includes/class-plugin.php:1282 +#: includes/class-plugin.php:1412 msgid "US East (N. Virginia)" msgstr "" -#: includes/class-plugin.php:1283 +#: includes/class-plugin.php:1413 msgid "US West (N. California)" msgstr "" -#: includes/class-plugin.php:1284 +#: includes/class-plugin.php:1414 msgid "US West (Oregon)" msgstr "" -#: includes/class-plugin.php:1285 +#: includes/class-plugin.php:1415 msgid "Africa (Cape Town)" msgstr "" -#: includes/class-plugin.php:1286 +#: includes/class-plugin.php:1416 msgid "Asia Pacific (Hyderabad)" msgstr "" -#: includes/class-plugin.php:1287 +#: includes/class-plugin.php:1417 msgid "Asia Pacific (Jakarta)" msgstr "" -#: includes/class-plugin.php:1288 +#: includes/class-plugin.php:1418 msgid "Asia Pacific (Mumbai)" msgstr "" -#: includes/class-plugin.php:1289 +#: includes/class-plugin.php:1419 msgid "Asia Pacific (Osaka)" msgstr "" -#: includes/class-plugin.php:1290 +#: includes/class-plugin.php:1420 msgid "Asia Pacific (Seoul)" msgstr "" -#: includes/class-plugin.php:1291 +#: includes/class-plugin.php:1421 msgid "Asia Pacific (Singapore)" msgstr "" -#: includes/class-plugin.php:1292 +#: includes/class-plugin.php:1422 msgid "Asia Pacific (Sydney)" msgstr "" -#: includes/class-plugin.php:1293 +#: includes/class-plugin.php:1423 msgid "Asia Pacific (Tokyo)" msgstr "" -#: includes/class-plugin.php:1294 +#: includes/class-plugin.php:1424 msgid "Canada (Central)" msgstr "" -#: includes/class-plugin.php:1295 +#: includes/class-plugin.php:1425 msgid "Europe (Frankfurt)" msgstr "" -#: includes/class-plugin.php:1296 +#: includes/class-plugin.php:1426 msgid "Europe (Ireland)" msgstr "" -#: includes/class-plugin.php:1297 +#: includes/class-plugin.php:1427 msgid "Europe (London)" msgstr "" -#: includes/class-plugin.php:1298 +#: includes/class-plugin.php:1428 msgid "Europe (Milan)" msgstr "" -#: includes/class-plugin.php:1299 +#: includes/class-plugin.php:1429 msgid "Europe (Paris)" msgstr "" -#: includes/class-plugin.php:1300 +#: includes/class-plugin.php:1430 msgid "Europe (Stockholm)" msgstr "" -#: includes/class-plugin.php:1301 +#: includes/class-plugin.php:1431 msgid "Europe (Zurich)" msgstr "" -#: includes/class-plugin.php:1302 +#: includes/class-plugin.php:1432 msgid "Israel (Tel Aviv)" msgstr "" -#: includes/class-plugin.php:1303 +#: includes/class-plugin.php:1433 msgid "Middle East (Bahrain)" msgstr "" -#: includes/class-plugin.php:1304 +#: includes/class-plugin.php:1434 msgid "Middle East (UAE)" msgstr "" -#: includes/class-plugin.php:1305 +#: includes/class-plugin.php:1435 msgid "South America (São Paulo)" msgstr "" -#: includes/class-plugin.php:1306 +#: includes/class-plugin.php:1436 msgid "AWS GovCloud (US-East)" msgstr "" -#: includes/class-plugin.php:1307 +#: includes/class-plugin.php:1437 msgid "AWS GovCloud (US-West)" msgstr "" #. translators: 1: AWS region display name. 2: AWS region code. -#: includes/class-plugin.php:1322 +#: includes/class-plugin.php:1452 #, php-format msgid "%1$s (%2$s)" msgstr "" #. translators: %s: AWS region code. -#: includes/class-plugin.php:1338 +#: includes/class-plugin.php:1468 #, php-format msgid "Region %s" msgstr "" #. translators: %s: Error message from Amazon SES. -#: includes/class-plugin.php:1389 +#: includes/class-plugin.php:1509 #, php-format msgid "Invalid Amazon SES credentials: %s" msgstr "" -#. translators: %s: Error message from Amazon SES. -#: includes/class-plugin.php:1400 -#, php-format -msgid "Could not verify Amazon SES credentials: %s" -msgstr "" - -#. translators: %s: Error message describing the unexpected failure. -#: includes/class-plugin.php:1411 -#, php-format -msgid "" -"An unexpected error occurred while validating Amazon SES credentials: %s" -msgstr "" - -#: includes/class-plugin.php:1470 includes/class-plugin.php:1492 +#: includes/class-plugin.php:1574 +#: includes/class-plugin.php:1596 msgid "Amazon SES credentials are not configured." msgstr "" -#: includes/class-plugin.php:1506 +#: includes/class-plugin.php:1610 msgid "Amazon SES did not return quota data." msgstr "" -#: includes/class-plugin.php:1524 +#: includes/class-plugin.php:1632 msgid "Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission." msgstr "" #. translators: %s: AWS error message -#: includes/class-plugin.php:1532 +#: includes/class-plugin.php:1640 #, php-format msgid "Amazon SES API error: %s" msgstr "" #. translators: %s: Error message -#: includes/class-plugin.php:1541 +#: includes/class-plugin.php:1649 #, php-format msgid "Failed to fetch SES quota: %s" msgstr "" -#: robotstxt-updater.php:362 -msgid "Security check failed" -msgstr "" - -#. Plugin Name of the plugin/theme -msgid "SMTP (by ROBOTSTXT) Amazon SES" -msgstr "" - -#. Plugin URI of the plugin/theme -msgid "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses" -msgstr "" - -#. Description of the plugin/theme -msgid "Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin." -msgstr "" - -#. Author of the plugin/theme -msgid "ROBOTSTXT" -msgstr "" - -#. Author URI of the plugin/theme -msgid "https://www.robotstxt.es/" +#: robotstxt-smtp-amazonses.php:68 +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 66963f4..4b00053 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.4 +Stable tag: 2.1.5 Requires PHP: 8.2 -Version: 2.1.4 +Version: 2.1.5 License: GPL-3.0-or-later License URI: https://www.gnu.org/licenses/gpl-3.0.html @@ -34,52 +34,102 @@ SMTP (by ROBOTSTXT) Amazon SES extends the core ROBOTSTXT SMTP plugin with a fir = Do I need the base SMTP plugin? = -Yes. This add-on depends on the core **SMTP (by ROBOTSTXT)** plugin for the settings interface, logging, and overall mail routing logic. +Yes. This add-on depends on the core **SMTP (by ROBOTSTXT)** plugin for the settings interface, logging, and overall mail routing logic. If the base plugin is missing or inactive, this add-on will show an admin notice and will not run. = Are my credentials validated? = -The plugin validates Amazon SES credentials during saving to prevent misconfigurations. Errors appear directly on the SMTP settings page if authentication fails. +The plugin validates Amazon SES credentials during saving to prevent misconfigurations. Only definitive authentication errors (invalid access key or secret) will block saving. If the IAM user lacks the `ses:GetAccount` permission or there is a network issue, the credentials are still saved and will be used for sending. = Does the plugin support multisite? = Yes. Network administrators can manage credentials centrally or allow individual sites to configure their own Amazon SES connection. +== Compatibility == + +* WordPress: 5.7 - 7.1 +* PHP: 8.2 - 8.5 + == Changelog == +Only the 3 last versions. The full changelog will be at changelog.txt + += 2.1.5 = + +_Release date: 2026-06-09_ + +**Added** + +* Runtime check at initialization: if the parent SMTP (by ROBOTSTXT) plugin is missing or inactive, the plugin skips initialization and displays an admin notice instead of producing a fatal error. + +**Fixed** + +* Credentials never saving on first entry: credential validation now only blocks saving for definitive authentication failures. All other AWS errors allow saving. +* Reply-to email field cannot be cleared: submitting an empty value now explicitly removes the stored address. + +**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.4 = -* Updated minimum WordPress version to 5.7 (the actual code minimum, verified by static analysis). + +_Release date: 2026-06-09_ + +**Changed** + +* Minimum WordPress version lowered from 6.5 to 5.7, reflecting the actual code minimum verified by static analysis. + +**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.3 = -* Fixed nonce handling in manual quota refresh to correctly handle false values returned by filter_input(). -* Fixed admin notices display to skip non-array notice entries. -* Fixed input normalization for recipients, attachments, and headers to properly skip non-string values instead of attempting unsafe casts. -* Removed unused internal method (dead code cleanup). -* Updated compatibility: tested up to WordPress 7.1. -* Internal: renamed updater file to follow WordPress naming conventions. -= 2.1.2 = -* Fixed charset encoding issue that caused "expected parameter value, got null" error when sending emails through Amazon SES. -* Added robust charset validation in header parsing to prevent empty or invalid charset values. -* Enhanced charset handling with fallback to UTF-8 when no valid charset is provided. +_Release date: 2026-06-09_ -= 2.1.1 = -* Added comprehensive Amazon SES debug context to test email error reports. -* Debug information now includes: AWS region, masked access key, SDK version, endpoint URL, and UTC timestamp. -* Enhanced AWS error reporting with request IDs, HTTP status codes, and error codes for easier troubleshooting. -* Improved security by masking access keys in error output (shows only first 4 and last 4 characters). +**Fixed** -= 2.1.0 = -* Changed uninstall behavior: plugin no longer performs cleanup on uninstall, all data cleanup is now handled by the core SMTP plugin. -* This ensures Amazon SES credentials are preserved when only the add-on is removed, and properly cleaned when the core plugin is uninstalled. +* 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. -= 2.0.1 = -* Version bump for maintenance release. +**Compatibility** -= 2.0.0 = -* Added Reply-To header support for emails sent via Amazon SES. -* Improved error handling and validation. -* Enhanced compatibility with core SMTP plugin 2.0.0. -* **BREAKING CHANGE**: Minimum PHP version increased to 8.2 (required by AWS SDK for PHP). +* WordPress: 5.7 - 7.1 +* PHP: 8.2 - 8.5 -= 1.0.0 = -* Initial release. +**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. + +== Compliance == + +This plugin adheres to the following security measures and review protocols for each version: + +* [WordPress Plugin Handbook](https://developer.wordpress.org/plugins/) +* [WordPress Plugin Security](https://developer.wordpress.org/plugins/wordpress-org/plugin-security/) +* [WordPress APIs Security](https://developer.wordpress.org/apis/security/) +* [WordPress Coding Standards](https://github.com/WordPress/WordPress-Coding-Standards) +* [Plugin Check (PCP)](https://wordpress.org/plugins/plugin-check/) diff --git a/robotstxt-smtp-amazonses.php b/robotstxt-smtp-amazonses.php index 04264bf..6a3478f 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.4 + * Version: 2.1.5 * 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.4' ); + define( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION', '2.1.5' ); } if ( ! defined( 'ROBOTSTXT_SMTP_AMAZONSES_FILE' ) ) { @@ -55,12 +55,52 @@ if ( \is_readable( $autoload ) ) { require_once $autoload; } -require_once ROBOTSTXT_SMTP_AMAZONSES_PATH . 'includes/class-plugin.php'; +/** + * Loads the plugin text domain for translations. + * + * @since 2.1.5 + * + * @return void + */ +function robotstxt_smtp_amazonses_load_textdomain(): void { + \load_plugin_textdomain( + 'robotstxt-smtp-amazonses', + false, + dirname( ROBOTSTXT_SMTP_AMAZONSES_BASENAME ) . '/languages' + ); +} -// Initialize the plugin. -// Dependency checking is handled by the "Requires Plugins" header in WordPress 6.5+. -\Robotstxt_SMTP_AmazonSES\Plugin::get_instance()->run(); +\add_action( 'init', 'robotstxt_smtp_amazonses_load_textdomain' ); -// Initialize ROBOTSTXT updater (auto-configures from plugin headers). +/** + * Displays an admin notice when the parent plugin is missing or inactive. + * + * @since 2.1.5 + * + * @return void + */ +function robotstxt_smtp_amazonses_missing_parent_notice(): void { + printf( + '

%s

', + \esc_html__( 'SMTP (by ROBOTSTXT) Amazon SES requires the SMTP (by ROBOTSTXT) plugin to be installed and active.', 'robotstxt-smtp-amazonses' ) + ); +} + +// Defer initialization to plugins_loaded so all plugins are available for the dependency check. +\add_action( + 'plugins_loaded', + static function () { + if ( ! \class_exists( 'Robotstxt_SMTP\Plugin' ) ) { + \add_action( 'admin_notices', 'robotstxt_smtp_amazonses_missing_parent_notice' ); + \add_action( 'network_admin_notices', 'robotstxt_smtp_amazonses_missing_parent_notice' ); + return; + } + + require_once ROBOTSTXT_SMTP_AMAZONSES_PATH . 'includes/class-plugin.php'; + \Robotstxt_SMTP_AmazonSES\Plugin::get_instance()->run(); + } +); + +// Initialize ROBOTSTXT updater (does not depend on the parent plugin). require_once __DIR__ . '/class-robotstxt-updater.php'; Robotstxt_Updater::init( __FILE__ ); diff --git a/update.json b/update.json index c148a2b..130bbb7 100644 --- a/update.json +++ b/update.json @@ -1,8 +1,8 @@ { "name": "SMTP (by ROBOTSTXT) Amazon SES", "slug": "robotstxt-smtp-amazonses", - "version": "2.1.4", - "download_url": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-smtp-amazonses/releases/download/2.1.4/robotstxt-smtp-amazonses-2.1.4.zip", + "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", "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.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
  • Removed: Unused internal rate limit method (dead code cleanup)
  • Compatibility: Tested up to WordPress 7.1

2.1.2 - 2026-02-12

  • 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.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
  • Removed: Unused internal rate limit method (dead code cleanup)
  • Compatibility: Tested up to WordPress 7.1

2.1.2 - 2026-02-12

  • 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.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
  • Removed: Unused internal rate limit method (dead code cleanup)
  • Compatibility: Tested up to WordPress 7.1

2.1.2 - 2026-02-12

  • 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.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
  • Removed: Unused internal rate limit method (dead code cleanup)
  • Compatibility: Tested up to WordPress 7.1

2.1.2 - 2026-02-12

  • 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
" }, "banners": { "low": "", diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index b054fb6..ca21afa 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => 'robotstxt/robotstxt-smtp-amazonses', 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => 'b0fb27912c6bcd89eea786badab9921b36b41a91', + 'reference' => '76ef43f421cbfa826db298560ad762a5bbfda1dc', 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -121,7 +121,7 @@ 'robotstxt/robotstxt-smtp-amazonses' => array( 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => 'b0fb27912c6bcd89eea786badab9921b36b41a91', + 'reference' => '76ef43f421cbfa826db298560ad762a5bbfda1dc', 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', 'aliases' => array(),