This commit is contained in:
Javier Casares 2026-09-01 06:17:08 +00:00
commit 25dd2146b1
10 changed files with 286 additions and 231 deletions

View file

@ -1,5 +1,25 @@
== Changelog ==
= 2.1.9 =
_Release date: 2026-09-01_
**Fixed**
* Emails were aborted when a recipient or Reply-To header used the combined "Name <email>" form — for example WooCommerce admin "New order" notifications carrying `Reply-To: Customer Name <customer@email.com>`. The display name and the email address are now split before being passed to PHPMailer, so these emails are delivered instead of failing with "Amazon SES rejected the reply-to address". Applies to To, CC, BCC, and Reply-To headers, including folded (multiline) header values.
**Compatibility**
* WordPress: 5.7 - 7.1
* PHP: 8.2 - 8.5
**Tests**
* PHP_CodeSniffer: 3.13.6
* WordPress Coding Standards: 3.4.1
* PHPCompatibility: 9.3.5
* PHPStan: 2.2.9
= 2.1.8 =
_Release date: 2026-08-24_

View file

@ -382,8 +382,10 @@ class Plugin {
}
foreach ( $mail_context['to'] as $recipient ) {
list( $recipient_address, $recipient_name ) = self::split_name_and_address( $recipient );
try {
$phpmailer->addAddress( $recipient );
$phpmailer->addAddress( $recipient_address, $recipient_name );
} catch ( PHPMailerException $exception ) {
return new WP_Error(
'robotstxt_smtp_amazon_ses_invalid_recipient',
@ -404,8 +406,10 @@ class Plugin {
}
foreach ( $parsed_headers['cc'] ?? array() as $cc ) {
list( $cc_address, $cc_name ) = self::split_name_and_address( $cc );
try {
$phpmailer->addCC( $cc );
$phpmailer->addCC( $cc_address, $cc_name );
} catch ( PHPMailerException $exception ) {
return new WP_Error(
'robotstxt_smtp_amazon_ses_invalid_cc',
@ -426,8 +430,10 @@ class Plugin {
}
foreach ( $parsed_headers['bcc'] ?? array() as $bcc ) {
list( $bcc_address, $bcc_name ) = self::split_name_and_address( $bcc );
try {
$phpmailer->addBCC( $bcc );
$phpmailer->addBCC( $bcc_address, $bcc_name );
} catch ( PHPMailerException $exception ) {
return new WP_Error(
'robotstxt_smtp_amazon_ses_invalid_bcc',
@ -448,8 +454,10 @@ class Plugin {
}
foreach ( $parsed_headers['reply_to'] ?? array() as $reply_to ) {
list( $reply_to_address, $reply_to_name ) = self::split_name_and_address( $reply_to );
try {
$phpmailer->addReplyTo( $reply_to );
$phpmailer->addReplyTo( $reply_to_address, $reply_to_name );
} catch ( PHPMailerException $exception ) {
return new WP_Error(
'robotstxt_smtp_amazon_ses_invalid_reply_to',
@ -747,6 +755,35 @@ class Plugin {
return $normalized;
}
/**
* Splits a recipient string into an email address and an optional display name.
*
* Callers such as wp_mail() may supply addresses in the combined
* "Name <email@example.com>" form. PHPMailer expects the address and the
* display name as separate arguments, so they must be split first.
*
* @since 2.1.9
*
* @param string $recipient Recipient as supplied to wp_mail().
* @return array{0: string, 1: string} Email address and display name (empty string when absent).
*/
public static function split_name_and_address( string $recipient ): array {
$recipient = trim( $recipient );
if ( preg_match( '/^(.*)<([^>]+)>$/s', $recipient, $matches ) ) {
$name = trim( (string) preg_replace( '/\s+/', ' ', $matches[1] ) );
$address = trim( $matches[2] );
if ( strlen( $name ) > 1 && '"' === $name[0] && '"' === substr( $name, -1 ) ) {
$name = substr( $name, 1, -1 );
}
return array( $address, $name );
}
return array( $recipient, '' );
}
/**
* Ensures the attachments argument is converted into an array of paths.
*

View file

@ -1,9 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: SMTP Amazon SES (by ROBOTSTXT) 2.1.8\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-smtp-"
"amazonses\n"
"POT-Creation-Date: 2026-08-24T12:46:43+00:00\n"
"Project-Id-Version: SMTP Amazon SES (by ROBOTSTXT) 2.1.9\n"
"Report-Msgid-Bugs-To: https://www.robotstxt.software/support/\n"
"POT-Creation-Date: 2026-09-01T06:15:06+00:00\n"
"PO-Revision-Date: 2026-08-17 19:30+0000\n"
"Last-Translator: ROBOTSTXT <robotstxt@robotstxt.es>\n"
"Language-Team: Catalan\n"
@ -72,80 +71,80 @@ 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:392
#: includes/class-plugin.php:394
#, 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:414
#: includes/class-plugin.php:418
#, 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:436
#: includes/class-plugin.php:442
#, 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:458
#: includes/class-plugin.php:466
#, 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:487
#: includes/class-plugin.php:495
#, 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:538
#: includes/class-plugin.php:546
#, 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:924
#: includes/class-plugin.php:961
msgid "Security check failed."
msgstr "Ha fallat la comprovació de seguretat."
#: includes/class-plugin.php:932 includes/class-plugin.php:1807
#: includes/class-plugin.php:969 includes/class-plugin.php:1844
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:945
#: includes/class-plugin.php:982
msgid "Amazon SES quotas refreshed successfully."
msgstr "Quotes d'Amazon SES actualitzades correctament."
#: includes/class-plugin.php:952
#: includes/class-plugin.php:989
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:991
#: includes/class-plugin.php:1028
msgid "Access Key ID"
msgstr "ID de clau d'accés"
#: includes/class-plugin.php:997
#: includes/class-plugin.php:1034
msgid "Secret Access Key"
msgstr "Clau d'accés secreta"
#: includes/class-plugin.php:1003
#: includes/class-plugin.php:1040
msgid "Region"
msgstr "Regió"
#: includes/class-plugin.php:1042
#: includes/class-plugin.php:1079
msgid "Leave empty to keep the stored access key."
msgstr "Deixar buit per mantenir la clau d'accés emmagatzemada."
#: includes/class-plugin.php:1071
#: includes/class-plugin.php:1108
msgid "Clear access key"
msgstr "Elimina la clau d'accés"
#: includes/class-plugin.php:1074
#: includes/class-plugin.php:1111
msgid ""
"Provide the IAM access key ID with permissions to send email through Amazon "
"SES. Leave the field empty to retain the existing value."
@ -153,15 +152,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:1086
#: includes/class-plugin.php:1123
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:1115
#: includes/class-plugin.php:1152
msgid "Clear secret key"
msgstr "Elimina la clau d'accés secreta"
#: includes/class-plugin.php:1118
#: includes/class-plugin.php:1155
msgid ""
"Enter the secret access key associated with the IAM user. Leave the field "
"empty to retain the existing value."
@ -169,19 +168,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:1133
#: includes/class-plugin.php:1170
msgid "Select a region"
msgstr "Selecciona una regió"
#: includes/class-plugin.php:1138
#: includes/class-plugin.php:1175
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:1216
#: includes/class-plugin.php:1253
msgid "The selected Amazon SES region is not available."
msgstr "La regió d'Amazon SES seleccionada no està disponible."
#: includes/class-plugin.php:1232
#: includes/class-plugin.php:1269
msgid ""
"Amazon SES credentials were not saved. Provide an access key, secret key, "
"and region."
@ -189,171 +188,171 @@ msgstr ""
"Les credencials d'Amazon SES no s'han desat. Proporciona una clau d'accés, "
"clau secreta i regió."
#: includes/class-plugin.php:1256
#: includes/class-plugin.php:1293
msgid "Amazon SES credentials verified successfully."
msgstr "Credencials d'Amazon SES verificades correctament."
#: includes/class-plugin.php:1467
#: includes/class-plugin.php:1504
msgid "US East (Ohio)"
msgstr "EUA Est (Ohio)"
#: includes/class-plugin.php:1468
#: includes/class-plugin.php:1505
msgid "US East (N. Virginia)"
msgstr "EUA Est (N. Virgínia)"
#: includes/class-plugin.php:1469
#: includes/class-plugin.php:1506
msgid "US West (N. California)"
msgstr "EUA Oest (N. Califòrnia)"
#: includes/class-plugin.php:1470
#: includes/class-plugin.php:1507
msgid "US West (Oregon)"
msgstr "EUA Oest (Oregon)"
#: includes/class-plugin.php:1471
#: includes/class-plugin.php:1508
msgid "Africa (Cape Town)"
msgstr "Àfrica (Ciutat del Cap)"
#: includes/class-plugin.php:1472
#: includes/class-plugin.php:1509
msgid "Asia Pacific (Hyderabad)"
msgstr "Àsia Pacífic (Hyderabad)"
#: includes/class-plugin.php:1473
#: includes/class-plugin.php:1510
msgid "Asia Pacific (Jakarta)"
msgstr "Àsia Pacífic (Jakarta)"
#: includes/class-plugin.php:1474
#: includes/class-plugin.php:1511
msgid "Asia Pacific (Mumbai)"
msgstr "Àsia Pacífic (Mumbai)"
#: includes/class-plugin.php:1475
#: includes/class-plugin.php:1512
msgid "Asia Pacific (Osaka)"
msgstr "Àsia Pacífic (Osaka)"
#: includes/class-plugin.php:1476
#: includes/class-plugin.php:1513
msgid "Asia Pacific (Seoul)"
msgstr "Àsia Pacífic (Seül)"
#: includes/class-plugin.php:1477
#: includes/class-plugin.php:1514
msgid "Asia Pacific (Singapore)"
msgstr "Àsia Pacífic (Singapur)"
#: includes/class-plugin.php:1478
#: includes/class-plugin.php:1515
msgid "Asia Pacific (Sydney)"
msgstr "Àsia Pacífic (Sydney)"
#: includes/class-plugin.php:1479
#: includes/class-plugin.php:1516
msgid "Asia Pacific (Tokyo)"
msgstr "Àsia Pacífic (Tòquio)"
#: includes/class-plugin.php:1480
#: includes/class-plugin.php:1517
msgid "Canada (Central)"
msgstr "Canadà (Central)"
#: includes/class-plugin.php:1481
#: includes/class-plugin.php:1518
msgid "Europe (Frankfurt)"
msgstr "Europa (Frankfurt)"
#: includes/class-plugin.php:1482
#: includes/class-plugin.php:1519
msgid "Europe (Ireland)"
msgstr "Europa (Irlanda)"
#: includes/class-plugin.php:1483
#: includes/class-plugin.php:1520
msgid "Europe (London)"
msgstr "Europa (Londres)"
#: includes/class-plugin.php:1484
#: includes/class-plugin.php:1521
msgid "Europe (Milan)"
msgstr "Europa (Milà)"
#: includes/class-plugin.php:1485
#: includes/class-plugin.php:1522
msgid "Europe (Paris)"
msgstr "Europa (París)"
#: includes/class-plugin.php:1486
#: includes/class-plugin.php:1523
msgid "Europe (Stockholm)"
msgstr "Europa (Estocolm)"
#: includes/class-plugin.php:1487
#: includes/class-plugin.php:1524
msgid "Europe (Zurich)"
msgstr "Europa (Zuric)"
#: includes/class-plugin.php:1488
#: includes/class-plugin.php:1525
msgid "Israel (Tel Aviv)"
msgstr "Israel (Tel Aviv)"
#: includes/class-plugin.php:1489
#: includes/class-plugin.php:1526
msgid "Middle East (Bahrain)"
msgstr "Orient Mitjà (Bahrain)"
#: includes/class-plugin.php:1490
#: includes/class-plugin.php:1527
msgid "Middle East (UAE)"
msgstr "Orient Mitjà (EAU)"
#: includes/class-plugin.php:1491
#: includes/class-plugin.php:1528
msgid "South America (São Paulo)"
msgstr "Sud-amèrica (São Paulo)"
#: includes/class-plugin.php:1492
#: includes/class-plugin.php:1529
msgid "AWS GovCloud (US-East)"
msgstr "AWS GovCloud (EUA-Est)"
#: includes/class-plugin.php:1493
#: includes/class-plugin.php:1530
msgid "AWS GovCloud (US-West)"
msgstr "AWS GovCloud (EUA-Oest)"
#. translators: 1: AWS region display name. 2: AWS region code.
#: includes/class-plugin.php:1508
#: includes/class-plugin.php:1545
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
#. translators: %s: AWS region code.
#: includes/class-plugin.php:1524
#: includes/class-plugin.php:1561
#, php-format
msgid "Region %s"
msgstr "Regió %s"
#. translators: %s: Error message from Amazon SES.
#: includes/class-plugin.php:1565
#: includes/class-plugin.php:1602
#, php-format
msgid "Invalid Amazon SES credentials: %s"
msgstr "Credencials d'Amazon SES invàlides: %s"
#: includes/class-plugin.php:1630 includes/class-plugin.php:1652
#: includes/class-plugin.php:1667 includes/class-plugin.php:1689
msgid "Amazon SES credentials are not configured."
msgstr "Les credencials d'Amazon SES no estan configurades."
#: includes/class-plugin.php:1666
#: includes/class-plugin.php:1703
msgid "Amazon SES did not return quota data."
msgstr "Amazon SES no ha retornat dades de quota."
#: includes/class-plugin.php:1688
#: includes/class-plugin.php:1725
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:1696
#: includes/class-plugin.php:1733
#, php-format
msgid "Amazon SES API error: %s"
msgstr "Error d'API d'Amazon SES: %s"
#. translators: %s: Error message
#: includes/class-plugin.php:1705
#: includes/class-plugin.php:1742
#, php-format
msgid "Failed to fetch SES quota: %s"
msgstr "Ha fallat en obtenir la quota de SES: %s"
#: includes/class-plugin.php:1796
#: includes/class-plugin.php:1833
msgid "The link you followed has expired."
msgstr "L'enllaç que has seguit ha caducat."
#: includes/class-plugin.php:1885
#: includes/class-plugin.php:1922
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:1887
#: includes/class-plugin.php:1924
msgid "The Amazon SES Secret Access Key has been cleared."
msgstr "La clau d'accés secreta d'Amazon SES s'ha eliminat."

View file

@ -1,9 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: SMTP Amazon SES (by ROBOTSTXT) 2.1.8\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-smtp-"
"amazonses\n"
"POT-Creation-Date: 2026-08-24T12:46:43+00:00\n"
"Project-Id-Version: SMTP Amazon SES (by ROBOTSTXT) 2.1.9\n"
"Report-Msgid-Bugs-To: https://www.robotstxt.software/support/\n"
"POT-Creation-Date: 2026-09-01T06:15:06+00:00\n"
"PO-Revision-Date: 2026-08-17 19:30+0000\n"
"Last-Translator: ROBOTSTXT <robotstxt@robotstxt.es>\n"
"Language-Team: Spanish\n"
@ -71,80 +70,80 @@ 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:392
#: includes/class-plugin.php:394
#, 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:414
#: includes/class-plugin.php:418
#, 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:436
#: includes/class-plugin.php:442
#, 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:458
#: includes/class-plugin.php:466
#, 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:487
#: includes/class-plugin.php:495
#, 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:538
#: includes/class-plugin.php:546
#, php-format
msgid "Amazon SES could not include the attachment: %s"
msgstr "Amazon SES no pudo incluir el adjunto: %s"
#: includes/class-plugin.php:924
#: includes/class-plugin.php:961
msgid "Security check failed."
msgstr "Falló la comprobación de seguridad."
#: includes/class-plugin.php:932 includes/class-plugin.php:1807
#: includes/class-plugin.php:969 includes/class-plugin.php:1844
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:945
#: includes/class-plugin.php:982
msgid "Amazon SES quotas refreshed successfully."
msgstr "Cuotas de Amazon SES actualizadas correctamente."
#: includes/class-plugin.php:952
#: includes/class-plugin.php:989
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:991
#: includes/class-plugin.php:1028
msgid "Access Key ID"
msgstr "ID de clave de acceso"
#: includes/class-plugin.php:997
#: includes/class-plugin.php:1034
msgid "Secret Access Key"
msgstr "Clave de acceso secreta"
#: includes/class-plugin.php:1003
#: includes/class-plugin.php:1040
msgid "Region"
msgstr "Región"
#: includes/class-plugin.php:1042
#: includes/class-plugin.php:1079
msgid "Leave empty to keep the stored access key."
msgstr "Dejar vacío para mantener la clave de acceso almacenada."
#: includes/class-plugin.php:1071
#: includes/class-plugin.php:1108
msgid "Clear access key"
msgstr "Eliminar clave de acceso"
#: includes/class-plugin.php:1074
#: includes/class-plugin.php:1111
msgid ""
"Provide the IAM access key ID with permissions to send email through Amazon "
"SES. Leave the field empty to retain the existing value."
@ -152,15 +151,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:1086
#: includes/class-plugin.php:1123
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:1115
#: includes/class-plugin.php:1152
msgid "Clear secret key"
msgstr "Eliminar clave de acceso secreta"
#: includes/class-plugin.php:1118
#: includes/class-plugin.php:1155
msgid ""
"Enter the secret access key associated with the IAM user. Leave the field "
"empty to retain the existing value."
@ -168,19 +167,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:1133
#: includes/class-plugin.php:1170
msgid "Select a region"
msgstr "Selecciona una región"
#: includes/class-plugin.php:1138
#: includes/class-plugin.php:1175
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:1216
#: includes/class-plugin.php:1253
msgid "The selected Amazon SES region is not available."
msgstr "La región de Amazon SES seleccionada no está disponible."
#: includes/class-plugin.php:1232
#: includes/class-plugin.php:1269
msgid ""
"Amazon SES credentials were not saved. Provide an access key, secret key, "
"and region."
@ -188,171 +187,171 @@ msgstr ""
"Las credenciales de Amazon SES no se guardaron. Proporciona una clave de "
"acceso, clave secreta y región."
#: includes/class-plugin.php:1256
#: includes/class-plugin.php:1293
msgid "Amazon SES credentials verified successfully."
msgstr "Credenciales de Amazon SES verificadas correctamente."
#: includes/class-plugin.php:1467
#: includes/class-plugin.php:1504
msgid "US East (Ohio)"
msgstr "EE.UU. Este (Ohio)"
#: includes/class-plugin.php:1468
#: includes/class-plugin.php:1505
msgid "US East (N. Virginia)"
msgstr "EE.UU. Este (N. Virginia)"
#: includes/class-plugin.php:1469
#: includes/class-plugin.php:1506
msgid "US West (N. California)"
msgstr "EE.UU. Oeste (N. California)"
#: includes/class-plugin.php:1470
#: includes/class-plugin.php:1507
msgid "US West (Oregon)"
msgstr "EE.UU. Oeste (Oregón)"
#: includes/class-plugin.php:1471
#: includes/class-plugin.php:1508
msgid "Africa (Cape Town)"
msgstr "África (Ciudad del Cabo)"
#: includes/class-plugin.php:1472
#: includes/class-plugin.php:1509
msgid "Asia Pacific (Hyderabad)"
msgstr "Asia Pacífico (Hyderabad)"
#: includes/class-plugin.php:1473
#: includes/class-plugin.php:1510
msgid "Asia Pacific (Jakarta)"
msgstr "Asia Pacífico (Yakarta)"
#: includes/class-plugin.php:1474
#: includes/class-plugin.php:1511
msgid "Asia Pacific (Mumbai)"
msgstr "Asia Pacífico (Mumbai)"
#: includes/class-plugin.php:1475
#: includes/class-plugin.php:1512
msgid "Asia Pacific (Osaka)"
msgstr "Asia Pacífico (Osaka)"
#: includes/class-plugin.php:1476
#: includes/class-plugin.php:1513
msgid "Asia Pacific (Seoul)"
msgstr "Asia Pacífico (Seúl)"
#: includes/class-plugin.php:1477
#: includes/class-plugin.php:1514
msgid "Asia Pacific (Singapore)"
msgstr "Asia Pacífico (Singapur)"
#: includes/class-plugin.php:1478
#: includes/class-plugin.php:1515
msgid "Asia Pacific (Sydney)"
msgstr "Asia Pacífico (Sídney)"
#: includes/class-plugin.php:1479
#: includes/class-plugin.php:1516
msgid "Asia Pacific (Tokyo)"
msgstr "Asia Pacífico (Tokio)"
#: includes/class-plugin.php:1480
#: includes/class-plugin.php:1517
msgid "Canada (Central)"
msgstr "Canadá (Central)"
#: includes/class-plugin.php:1481
#: includes/class-plugin.php:1518
msgid "Europe (Frankfurt)"
msgstr "Europa (Fráncfort)"
#: includes/class-plugin.php:1482
#: includes/class-plugin.php:1519
msgid "Europe (Ireland)"
msgstr "Europa (Irlanda)"
#: includes/class-plugin.php:1483
#: includes/class-plugin.php:1520
msgid "Europe (London)"
msgstr "Europa (Londres)"
#: includes/class-plugin.php:1484
#: includes/class-plugin.php:1521
msgid "Europe (Milan)"
msgstr "Europa (Milán)"
#: includes/class-plugin.php:1485
#: includes/class-plugin.php:1522
msgid "Europe (Paris)"
msgstr "Europa (París)"
#: includes/class-plugin.php:1486
#: includes/class-plugin.php:1523
msgid "Europe (Stockholm)"
msgstr "Europa (Estocolmo)"
#: includes/class-plugin.php:1487
#: includes/class-plugin.php:1524
msgid "Europe (Zurich)"
msgstr "Europa (Zúrich)"
#: includes/class-plugin.php:1488
#: includes/class-plugin.php:1525
msgid "Israel (Tel Aviv)"
msgstr "Israel (Tel Aviv)"
#: includes/class-plugin.php:1489
#: includes/class-plugin.php:1526
msgid "Middle East (Bahrain)"
msgstr "Oriente Medio (Baréin)"
#: includes/class-plugin.php:1490
#: includes/class-plugin.php:1527
msgid "Middle East (UAE)"
msgstr "Oriente Medio (EAU)"
#: includes/class-plugin.php:1491
#: includes/class-plugin.php:1528
msgid "South America (São Paulo)"
msgstr "Sudamérica (São Paulo)"
#: includes/class-plugin.php:1492
#: includes/class-plugin.php:1529
msgid "AWS GovCloud (US-East)"
msgstr "AWS GovCloud (EE.UU.-Este)"
#: includes/class-plugin.php:1493
#: includes/class-plugin.php:1530
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:1508
#: includes/class-plugin.php:1545
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
#. translators: %s: AWS region code.
#: includes/class-plugin.php:1524
#: includes/class-plugin.php:1561
#, php-format
msgid "Region %s"
msgstr "Región %s"
#. translators: %s: Error message from Amazon SES.
#: includes/class-plugin.php:1565
#: includes/class-plugin.php:1602
#, php-format
msgid "Invalid Amazon SES credentials: %s"
msgstr "Credenciales de Amazon SES inválidas: %s"
#: includes/class-plugin.php:1630 includes/class-plugin.php:1652
#: includes/class-plugin.php:1667 includes/class-plugin.php:1689
msgid "Amazon SES credentials are not configured."
msgstr "Las credenciales de Amazon SES no están configuradas."
#: includes/class-plugin.php:1666
#: includes/class-plugin.php:1703
msgid "Amazon SES did not return quota data."
msgstr "Amazon SES no devolvió datos de cuota."
#: includes/class-plugin.php:1688
#: includes/class-plugin.php:1725
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:1696
#: includes/class-plugin.php:1733
#, php-format
msgid "Amazon SES API error: %s"
msgstr "Error de API de Amazon SES: %s"
#. translators: %s: Error message
#: includes/class-plugin.php:1705
#: includes/class-plugin.php:1742
#, php-format
msgid "Failed to fetch SES quota: %s"
msgstr "Falló al obtener la cuota de SES: %s"
#: includes/class-plugin.php:1796
#: includes/class-plugin.php:1833
msgid "The link you followed has expired."
msgstr "El enlace que has seguido ha caducado."
#: includes/class-plugin.php:1885
#: includes/class-plugin.php:1922
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:1887
#: includes/class-plugin.php:1924
msgid "The Amazon SES Secret Access Key has been cleared."
msgstr "La clave de acceso secreta de Amazon SES se ha eliminado."

View file

@ -2,14 +2,14 @@
# This file is distributed under the GPL-3.0-or-later.
msgid ""
msgstr ""
"Project-Id-Version: SMTP Amazon SES (by ROBOTSTXT) 2.1.8\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-smtp-amazonses\n"
"Project-Id-Version: SMTP Amazon SES (by ROBOTSTXT) 2.1.9\n"
"Report-Msgid-Bugs-To: https://www.robotstxt.software/support/\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"POT-Creation-Date: 2026-08-24T12:46:43+00:00\n"
"POT-Creation-Date: 2026-09-01T06:15:06+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"
@ -68,274 +68,274 @@ msgid "Amazon SES rejected the \"From\" address: %s"
msgstr ""
#. translators: %s: Invalid recipient email address.
#: includes/class-plugin.php:392
#: includes/class-plugin.php:394
#, php-format
msgid "Amazon SES rejected the recipient address: %s"
msgstr ""
#. translators: %s: Invalid CC email address.
#: includes/class-plugin.php:414
#: includes/class-plugin.php:418
#, php-format
msgid "Amazon SES rejected the CC address: %s"
msgstr ""
#. translators: %s: Invalid BCC email address.
#: includes/class-plugin.php:436
#: includes/class-plugin.php:442
#, php-format
msgid "Amazon SES rejected the BCC address: %s"
msgstr ""
#. translators: %s: Invalid reply-to email address.
#: includes/class-plugin.php:458
#: includes/class-plugin.php:466
#, 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:487
#: includes/class-plugin.php:495
#, 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:538
#: includes/class-plugin.php:546
#, php-format
msgid "Amazon SES could not include the attachment: %s"
msgstr ""
#: includes/class-plugin.php:924
#: includes/class-plugin.php:961
msgid "Security check failed."
msgstr ""
#: includes/class-plugin.php:932
#: includes/class-plugin.php:1807
#: includes/class-plugin.php:969
#: includes/class-plugin.php:1844
msgid "You do not have sufficient permissions to access this page."
msgstr ""
#: includes/class-plugin.php:945
#: includes/class-plugin.php:982
msgid "Amazon SES quotas refreshed successfully."
msgstr ""
#: includes/class-plugin.php:952
#: includes/class-plugin.php:989
msgid "Unable to fetch quotas from Amazon SES. Check debug log for details."
msgstr ""
#: includes/class-plugin.php:991
#: includes/class-plugin.php:1028
msgid "Access Key ID"
msgstr ""
#: includes/class-plugin.php:997
#: includes/class-plugin.php:1034
msgid "Secret Access Key"
msgstr ""
#: includes/class-plugin.php:1003
#: includes/class-plugin.php:1040
msgid "Region"
msgstr ""
#: includes/class-plugin.php:1042
#: includes/class-plugin.php:1079
msgid "Leave empty to keep the stored access key."
msgstr ""
#: includes/class-plugin.php:1071
#: includes/class-plugin.php:1108
msgid "Clear access key"
msgstr ""
#: includes/class-plugin.php:1074
#: includes/class-plugin.php:1111
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:1086
#: includes/class-plugin.php:1123
msgid "Leave empty to keep the stored secret access key."
msgstr ""
#: includes/class-plugin.php:1115
#: includes/class-plugin.php:1152
msgid "Clear secret key"
msgstr ""
#: includes/class-plugin.php:1118
#: includes/class-plugin.php:1155
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:1133
#: includes/class-plugin.php:1170
msgid "Select a region"
msgstr ""
#: includes/class-plugin.php:1138
#: includes/class-plugin.php:1175
msgid "Choose the AWS region where your Amazon SES account is hosted."
msgstr ""
#: includes/class-plugin.php:1216
#: includes/class-plugin.php:1253
msgid "The selected Amazon SES region is not available."
msgstr ""
#: includes/class-plugin.php:1232
#: includes/class-plugin.php:1269
msgid "Amazon SES credentials were not saved. Provide an access key, secret key, and region."
msgstr ""
#: includes/class-plugin.php:1256
#: includes/class-plugin.php:1293
msgid "Amazon SES credentials verified successfully."
msgstr ""
#: includes/class-plugin.php:1467
#: includes/class-plugin.php:1504
msgid "US East (Ohio)"
msgstr ""
#: includes/class-plugin.php:1468
#: includes/class-plugin.php:1505
msgid "US East (N. Virginia)"
msgstr ""
#: includes/class-plugin.php:1469
#: includes/class-plugin.php:1506
msgid "US West (N. California)"
msgstr ""
#: includes/class-plugin.php:1470
#: includes/class-plugin.php:1507
msgid "US West (Oregon)"
msgstr ""
#: includes/class-plugin.php:1471
#: includes/class-plugin.php:1508
msgid "Africa (Cape Town)"
msgstr ""
#: includes/class-plugin.php:1472
#: includes/class-plugin.php:1509
msgid "Asia Pacific (Hyderabad)"
msgstr ""
#: includes/class-plugin.php:1473
#: includes/class-plugin.php:1510
msgid "Asia Pacific (Jakarta)"
msgstr ""
#: includes/class-plugin.php:1474
#: includes/class-plugin.php:1511
msgid "Asia Pacific (Mumbai)"
msgstr ""
#: includes/class-plugin.php:1475
#: includes/class-plugin.php:1512
msgid "Asia Pacific (Osaka)"
msgstr ""
#: includes/class-plugin.php:1476
#: includes/class-plugin.php:1513
msgid "Asia Pacific (Seoul)"
msgstr ""
#: includes/class-plugin.php:1477
#: includes/class-plugin.php:1514
msgid "Asia Pacific (Singapore)"
msgstr ""
#: includes/class-plugin.php:1478
#: includes/class-plugin.php:1515
msgid "Asia Pacific (Sydney)"
msgstr ""
#: includes/class-plugin.php:1479
#: includes/class-plugin.php:1516
msgid "Asia Pacific (Tokyo)"
msgstr ""
#: includes/class-plugin.php:1480
#: includes/class-plugin.php:1517
msgid "Canada (Central)"
msgstr ""
#: includes/class-plugin.php:1481
#: includes/class-plugin.php:1518
msgid "Europe (Frankfurt)"
msgstr ""
#: includes/class-plugin.php:1482
#: includes/class-plugin.php:1519
msgid "Europe (Ireland)"
msgstr ""
#: includes/class-plugin.php:1483
#: includes/class-plugin.php:1520
msgid "Europe (London)"
msgstr ""
#: includes/class-plugin.php:1484
#: includes/class-plugin.php:1521
msgid "Europe (Milan)"
msgstr ""
#: includes/class-plugin.php:1485
#: includes/class-plugin.php:1522
msgid "Europe (Paris)"
msgstr ""
#: includes/class-plugin.php:1486
#: includes/class-plugin.php:1523
msgid "Europe (Stockholm)"
msgstr ""
#: includes/class-plugin.php:1487
#: includes/class-plugin.php:1524
msgid "Europe (Zurich)"
msgstr ""
#: includes/class-plugin.php:1488
#: includes/class-plugin.php:1525
msgid "Israel (Tel Aviv)"
msgstr ""
#: includes/class-plugin.php:1489
#: includes/class-plugin.php:1526
msgid "Middle East (Bahrain)"
msgstr ""
#: includes/class-plugin.php:1490
#: includes/class-plugin.php:1527
msgid "Middle East (UAE)"
msgstr ""
#: includes/class-plugin.php:1491
#: includes/class-plugin.php:1528
msgid "South America (São Paulo)"
msgstr ""
#: includes/class-plugin.php:1492
#: includes/class-plugin.php:1529
msgid "AWS GovCloud (US-East)"
msgstr ""
#: includes/class-plugin.php:1493
#: includes/class-plugin.php:1530
msgid "AWS GovCloud (US-West)"
msgstr ""
#. translators: 1: AWS region display name. 2: AWS region code.
#: includes/class-plugin.php:1508
#: includes/class-plugin.php:1545
#, php-format
msgid "%1$s (%2$s)"
msgstr ""
#. translators: %s: AWS region code.
#: includes/class-plugin.php:1524
#: includes/class-plugin.php:1561
#, php-format
msgid "Region %s"
msgstr ""
#. translators: %s: Error message from Amazon SES.
#: includes/class-plugin.php:1565
#: includes/class-plugin.php:1602
#, php-format
msgid "Invalid Amazon SES credentials: %s"
msgstr ""
#: includes/class-plugin.php:1630
#: includes/class-plugin.php:1652
#: includes/class-plugin.php:1667
#: includes/class-plugin.php:1689
msgid "Amazon SES credentials are not configured."
msgstr ""
#: includes/class-plugin.php:1666
#: includes/class-plugin.php:1703
msgid "Amazon SES did not return quota data."
msgstr ""
#: includes/class-plugin.php:1688
#: includes/class-plugin.php:1725
msgid "Cannot fetch SES quotas: IAM user lacks ses:GetAccount permission."
msgstr ""
#. translators: %s: AWS error message
#: includes/class-plugin.php:1696
#: includes/class-plugin.php:1733
#, php-format
msgid "Amazon SES API error: %s"
msgstr ""
#. translators: %s: Error message
#: includes/class-plugin.php:1705
#: includes/class-plugin.php:1742
#, php-format
msgid "Failed to fetch SES quota: %s"
msgstr ""
#: includes/class-plugin.php:1796
#: includes/class-plugin.php:1833
msgid "The link you followed has expired."
msgstr ""
#: includes/class-plugin.php:1885
#: includes/class-plugin.php:1922
msgid "The Amazon SES Access Key ID has been cleared."
msgstr ""
#: includes/class-plugin.php:1887
#: includes/class-plugin.php:1924
msgid "The Amazon SES Secret Access Key has been cleared."
msgstr ""

View file

@ -3,9 +3,9 @@ Contributors: robotstxt, javiercasares
Tags: amazon-ses, smtp, email, mail
Requires at least: 5.7
Tested up to: 7.1
Stable tag: 2.1.8
Stable tag: 2.1.9
Requires PHP: 8.2
Version: 2.1.8
Version: 2.1.9
License: GPL-3.0-or-later
License URI: https://www.gnu.org/licenses/gpl-3.0.html
@ -57,6 +57,26 @@ Updates are delivered through the **Manager (by ROBOTSTXT)** plugin. The main SM
Only the 3 last versions. The full changelog will be at changelog.txt
= 2.1.9 =
_Release date: 2026-09-01_
**Fixed**
* Emails were aborted when a recipient or Reply-To header used the combined "Name <email>" form — for example WooCommerce admin "New order" notifications carrying `Reply-To: Customer Name <customer@email.com>`. The display name and the email address are now split before being passed to PHPMailer, so these emails are delivered instead of failing with "Amazon SES rejected the reply-to address". Applies to To, CC, BCC, and Reply-To headers, including folded (multiline) header values.
**Compatibility**
* WordPress: 5.7 - 7.1
* PHP: 8.2 - 8.5
**Tests**
* PHP_CodeSniffer: 3.13.6
* WordPress Coding Standards: 3.4.1
* PHPCompatibility: 9.3.5
* PHPStan: 2.2.9
= 2.1.8 =
_Release date: 2026-08-24_
@ -101,26 +121,6 @@ _Release date: 2026-08-17_
* PHPCompatibility: 9.3.5
* PHPStan: 2.2.8
= 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
= Previous versions =
If you want to see the full changelog, visit the [changelog](https://www.robotstxt.software/plugins/robotstxt-smtp-amazonses/) page.

View file

@ -4,7 +4,7 @@
* Plugin URI: https://www.robotstxt.software/plugins/robotstxt-smtp-amazonses/
* Description: Adds Amazon SES configuration support to the ROBOTSTXT SMTP plugin.
* Update URI: https://www.robotstxt.software/plugins/robotstxt-smtp-amazonses/
* Version: 2.1.8
* Version: 2.1.9
* Requires at least: 5.7
* Requires PHP: 8.2
* Network: true
@ -25,7 +25,7 @@ if ( ! defined( 'ABSPATH' ) ) {
}
if ( ! defined( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION' ) ) {
define( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION', '2.1.8' );
define( 'ROBOTSTXT_SMTP_AMAZONSES_VERSION', '2.1.9' );
}
if ( ! defined( 'ROBOTSTXT_SMTP_AMAZONSES_FILE' ) ) {

View file

@ -3,7 +3,7 @@
'name' => 'robotstxt/robotstxt-smtp-amazonses',
'pretty_version' => 'dev-main',
'version' => 'dev-main',
'reference' => 'b9acd96e5f784f4f7d6c26807a76adc62b05d0de',
'reference' => '05fa9b5c18995167164bd84ddc0f0054bf324f89',
'type' => 'wordpress-plugin',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@ -112,7 +112,7 @@
'robotstxt/robotstxt-smtp-amazonses' => array(
'pretty_version' => 'dev-main',
'version' => 'dev-main',
'reference' => 'b9acd96e5f784f4f7d6c26807a76adc62b05d0de',
'reference' => '05fa9b5c18995167164bd84ddc0f0054bf324f89',
'type' => 'wordpress-plugin',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),