Changeset 3733698
- Timestamp:
- 10/08/2026 05:26:03 AM (2 weeks ago)
- Location:
- cybexsoft-smtp
- Files:
-
- 30 edited
- 1 copied
-
tags/1.0.7 (copied) (copied from cybexsoft-smtp/trunk )
-
tags/1.0.7/admin/css/admin.css (modified) (2 diffs)
-
tags/1.0.7/admin/views/tab-dashboard.php (modified) (5 diffs)
-
tags/1.0.7/admin/views/tab-log.php (modified) (1 diff)
-
tags/1.0.7/admin/views/tab-settings.php (modified) (1 diff)
-
tags/1.0.7/cybexsoft-smtp.php (modified) (2 diffs)
-
tags/1.0.7/includes/class-cybex-smtp-admin.php (modified) (1 diff)
-
tags/1.0.7/includes/class-cybex-smtp-ajax.php (modified) (1 diff)
-
tags/1.0.7/includes/class-cybex-smtp-logger.php (modified) (11 diffs)
-
tags/1.0.7/includes/class-cybex-smtp-privacy.php (modified) (2 diffs)
-
tags/1.0.7/includes/class-cybex-smtp-send-context.php (modified) (1 diff)
-
tags/1.0.7/includes/mailers/class-mailer-brevo.php (modified) (1 diff)
-
tags/1.0.7/includes/mailers/class-mailer-mailgun.php (modified) (1 diff)
-
tags/1.0.7/includes/mailers/class-mailer-sendgrid.php (modified) (1 diff)
-
tags/1.0.7/languages/cybexsoft-smtp.pot (modified) (41 diffs)
-
tags/1.0.7/readme.txt (modified) (3 diffs)
-
trunk/admin/css/admin.css (modified) (2 diffs)
-
trunk/admin/views/tab-dashboard.php (modified) (5 diffs)
-
trunk/admin/views/tab-log.php (modified) (1 diff)
-
trunk/admin/views/tab-settings.php (modified) (1 diff)
-
trunk/cybexsoft-smtp.php (modified) (2 diffs)
-
trunk/includes/class-cybex-smtp-admin.php (modified) (1 diff)
-
trunk/includes/class-cybex-smtp-ajax.php (modified) (1 diff)
-
trunk/includes/class-cybex-smtp-logger.php (modified) (11 diffs)
-
trunk/includes/class-cybex-smtp-privacy.php (modified) (2 diffs)
-
trunk/includes/class-cybex-smtp-send-context.php (modified) (1 diff)
-
trunk/includes/mailers/class-mailer-brevo.php (modified) (1 diff)
-
trunk/includes/mailers/class-mailer-mailgun.php (modified) (1 diff)
-
trunk/includes/mailers/class-mailer-sendgrid.php (modified) (1 diff)
-
trunk/languages/cybexsoft-smtp.pot (modified) (41 diffs)
-
trunk/readme.txt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
cybexsoft-smtp/tags/1.0.7/admin/css/admin.css
r3732590 r3733698 818 818 background: var(--cybex-red-bg-2); 819 819 } 820 /* Confirmed by the provider: the one status that is more than "it was taken". */ 821 .cybex-status-pill.is-delivered { 822 color: var(--cybex-green-dark); 823 background: var(--cybex-green-bg); 824 box-shadow: inset 0 0 0 1px var(--cybex-green-line); 825 } 826 /* Still the provider's to deliver: not good yet, not a failure either. */ 827 .cybex-status-pill.is-deferred { 828 color: var(--cybex-amber); 829 background: var(--cybex-amber-bg); 830 } 820 831 /* Deliberately not red: nothing went wrong, the site chose not to send. */ 821 832 .cybex-status-pill.is-blocked { … … 4202 4213 height: 17px; 4203 4214 } 4215 4216 /* Pro: the provider's reports about one message, in the log viewer. */ 4217 .cybex-delivery-timeline ol { 4218 margin: 0; 4219 padding: 0; 4220 list-style: none; 4221 } 4222 .cybex-delivery-timeline li { 4223 padding: 4px 0; 4224 } 4225 .cybex-delivery-timeline li + li { 4226 border-top: 1px solid var(--cybex-neutral-bg); 4227 } 4228 .cybex-timeline-time, 4229 .cybex-timeline-detail { 4230 color: var(--cybex-muted-2); 4231 font-size: var(--cybex-fs-sm); 4232 } 4233 .cybex-timeline-detail { 4234 margin-top: 2px; 4235 word-break: break-word; 4236 } 4237 .cybex-delivery-rates { 4238 margin-top: 4px; 4239 } -
cybexsoft-smtp/tags/1.0.7/admin/views/tab-dashboard.php
r3727515 r3733698 241 241 <?php 242 242 printf( 243 /* translators: 1: delivered count, 2: failed count */244 esc_html__( '%1$s delivered· %2$s failed', 'cybexsoft-smtp' ),243 /* translators: 1: count of messages the provider accepted, 2: failed count */ 244 esc_html__( '%1$s sent · %2$s failed', 'cybexsoft-smtp' ), 245 245 esc_html( number_format_i18n( $summary['sent'] ) ), 246 246 esc_html( number_format_i18n( $summary['failed'] ) ) … … 250 250 </div> 251 251 <div class="cybex-card cybex-stat"> 252 <div class="cybex-stat-top"><span><?php esc_html_e( ' Delivered · 30d', 'cybexsoft-smtp' ); ?></span></div>252 <div class="cybex-stat-top"><span><?php esc_html_e( 'Accepted · 30d', 'cybexsoft-smtp' ); ?></span></div> 253 253 <div class="cybex-stat-value"><?php echo $summary['total'] ? esc_html( number_format_i18n( $summary['delivered_pct'], 1 ) . '%' ) : '—'; ?></div> 254 254 <?php if ( ! $summary['has_prior'] ) : ?> … … 257 257 <div class="cybex-stat-delta <?php echo $summary['delivered_delta'] >= 0 ? 'is-good' : 'is-bad'; ?>"><?php echo esc_html( $delta_arrow( $summary['delivered_delta'] ) . ' ' . __( 'pts vs previous 30 days', 'cybexsoft-smtp' ) ); ?></div> 258 258 <?php endif; ?> 259 <?php 260 /** 261 * Below the acceptance rate: room for what happened after acceptance, 262 * which an add-on receiving the provider's reports can say. 263 */ 264 do_action( 'cybex_smtp/dashboard/accepted_stat_after' ); 265 ?> 259 266 </div> 260 267 <div class="cybex-card cybex-stat"> … … 289 296 <div class="cybex-card-title"><?php esc_html_e( 'Email volume · last 14 days', 'cybexsoft-smtp' ); ?></div> 290 297 <div class="cybex-chart-legend"> 291 <span><span class="cybex-swatch is-ok"></span><?php esc_html_e( ' Delivered', 'cybexsoft-smtp' ); ?></span>298 <span><span class="cybex-swatch is-ok"></span><?php esc_html_e( 'Sent', 'cybexsoft-smtp' ); ?></span> 292 299 <span><span class="cybex-swatch is-fail"></span><?php esc_html_e( 'Failed', 'cybexsoft-smtp' ); ?></span> 293 300 </div> … … 299 306 data-ok="<?php echo esc_attr( $d['ok'] ); ?>" 300 307 data-fail="<?php echo esc_attr( $d['fail'] ); ?>" 301 aria-label="<?php echo esc_attr( $d['date'] . ': ' . $d['ok'] . ' delivered, ' . $d['fail'] . ' failed' ); ?>">308 aria-label="<?php echo esc_attr( $d['date'] . ': ' . $d['ok'] . ' sent, ' . $d['fail'] . ' failed' ); ?>"> 302 309 <div class="cybex-bar-fail" style="height:<?php echo esc_attr( round( $d['fail'] * $scale ) ); ?>px"></div> 303 310 <div class="cybex-bar-ok" style="height:<?php echo esc_attr( max( 1, round( $d['ok'] * $scale ) ) ); ?>px"></div> -
cybexsoft-smtp/tags/1.0.7/admin/views/tab-log.php
r3726993 r3733698 31 31 $filters = array( 32 32 'all' => __( 'All', 'cybexsoft-smtp' ), 33 'sent' => __( ' Delivered', 'cybexsoft-smtp' ),33 'sent' => __( 'Sent', 'cybexsoft-smtp' ), 34 34 'failed' => __( 'Failed', 'cybexsoft-smtp' ), 35 35 ); 36 36 37 // Nothing writes this status until an add-on suppresses a message, so the 38 // filter only appears on sites where there is something behind it. 39 if ( $counts['blocked'] > 0 ) { 40 $filters['blocked'] = __( 'Blocked', 'cybexsoft-smtp' ); 37 /* 38 * The rest only appear on sites with something behind them: the delivery 39 * statuses need a provider reporting back, and blocked needs the block list. 40 * Labels come from the logger, so a filter reads the same as the pills. 41 */ 42 foreach ( array( 'delivered', 'deferred', 'bounced', 'complained', 'blocked' ) as $optional_status ) { 43 if ( ! empty( $counts[ $optional_status ] ) ) { 44 $filters[ $optional_status ] = Cybex_SMTP_Logger::status_label( $optional_status ); 45 } 41 46 } 42 47 -
cybexsoft-smtp/tags/1.0.7/admin/views/tab-settings.php
r3696103 r3733698 311 311 <?php esc_html_e( 'Delete failed only', 'cybexsoft-smtp' ); ?> 312 312 </button> 313 <button type="submit" name="scope" value="sent" class="button" onclick="return confirm('<?php echo esc_js( __( 'Delete all deliveredlog entries?', 'cybexsoft-smtp' ) ); ?>');">314 <?php esc_html_e( 'Delete deliveredonly', 'cybexsoft-smtp' ); ?>313 <button type="submit" name="scope" value="sent" class="button" onclick="return confirm('<?php echo esc_js( __( 'Delete all sent log entries?', 'cybexsoft-smtp' ) ); ?>');"> 314 <?php esc_html_e( 'Delete sent only', 'cybexsoft-smtp' ); ?> 315 315 </button> 316 316 </form> -
cybexsoft-smtp/tags/1.0.7/cybexsoft-smtp.php
r3732590 r3733698 4 4 * Plugin URI: https://cybexsoft.com/products/wordpress/plugins/cybexsoft-smtp 5 5 * Description: Reliable transactional email for WordPress. Connect a real mailer, log every message, retry what fails, and diagnose deliverability issues. 6 * Version: 1.0. 66 * Version: 1.0.7 7 7 * Requires at least: 5.5 8 8 * Requires PHP: 7.4 … … 19 19 } 20 20 21 define( 'CYBEX_SMTP_VERSION', '1.0. 6' );21 define( 'CYBEX_SMTP_VERSION', '1.0.7' ); 22 22 /* 23 23 * The shipped schema, versioned separately from the plugin: a release that -
cybexsoft-smtp/tags/1.0.7/includes/class-cybex-smtp-admin.php
r3732590 r3733698 259 259 'invalidDomain' => __( 'That does not look like a domain name. Enter just the domain, e.g. example.com.', 'cybexsoft-smtp' ), 260 260 'genericError' => __( 'Something went wrong. Please try again.', 'cybexsoft-smtp' ), 261 'delivered' => __( ' delivered', 'cybexsoft-smtp' ),261 'delivered' => __( 'sent', 'cybexsoft-smtp' ), 262 262 'failed' => __( 'failed', 'cybexsoft-smtp' ), 263 263 'sendingRequest' => __( 'Sending request…', 'cybexsoft-smtp' ), -
cybexsoft-smtp/tags/1.0.7/includes/class-cybex-smtp-ajax.php
r3696103 r3733698 313 313 } 314 314 315 /** 316 * Extra markup for the metadata panel, after the status and error. 317 * Cybexsoft SMTP Pro uses it for the provider's delivery timeline. 318 * Returned as HTML and printed as-is: escape everything in it. 319 * 320 * @param string $html 321 * @param array $row The log row. 322 */ 323 $html .= (string) apply_filters( 'cybex_smtp/log/email_meta_after', '', $row ); 324 315 325 if ( ! empty( $row['headers'] ) ) { 316 326 $html .= sprintf( -
cybexsoft-smtp/tags/1.0.7/includes/class-cybex-smtp-logger.php
r3727515 r3733698 33 33 public static function statuses() { 34 34 $statuses = array( 35 'sent' => array( 35 /* 36 * "Sent", not "Delivered": all a send can know is that the provider 37 * took the message. Whether it reached the mailbox is what the 38 * delivery statuses below say, once a provider reports back. 39 */ 40 'sent' => array( 41 'label' => __( 'Sent', 'cybexsoft-smtp' ), 42 'class' => 'is-sent', 43 ), 44 'delivered' => array( 36 45 'label' => __( 'Delivered', 'cybexsoft-smtp' ), 37 'class' => 'is-sent', 38 ), 39 'failed' => array( 46 'class' => 'is-delivered', 47 ), 48 'deferred' => array( 49 'label' => __( 'Deferred', 'cybexsoft-smtp' ), 50 'class' => 'is-deferred', 51 ), 52 'bounced' => array( 53 'label' => __( 'Bounced', 'cybexsoft-smtp' ), 54 'class' => 'is-failed', 55 ), 56 'complained' => array( 57 'label' => __( 'Spam complaint', 'cybexsoft-smtp' ), 58 'class' => 'is-failed', 59 ), 60 'failed' => array( 40 61 'label' => __( 'Failed', 'cybexsoft-smtp' ), 41 62 'class' => 'is-failed', 42 63 ), 43 'blocked' => array(64 'blocked' => array( 44 65 'label' => __( 'Blocked', 'cybexsoft-smtp' ), 45 66 'class' => 'is-blocked', … … 56 77 57 78 /** 79 * Statuses of a message the provider took. 80 * 81 * `deferred` is still in the provider's hands and `complained` reached the 82 * mailbox -- the recipient had to read it to complain -- so both count as 83 * accepted. `bounced` is in neither list on its own: it was accepted, then 84 * failed, and each count below says which side it lands on. 85 * 86 * @return string[] 87 */ 88 public static function accepted_statuses() { 89 return array( 'sent', 'delivered', 'deferred', 'complained' ); 90 } 91 92 /** 93 * What a provider's report about a message may change its status to, or 94 * null to leave it alone. 95 * 96 * Reports arrive out of order and more than once, so the status only ever 97 * moves forward: a late "deferred" must not undo "delivered", and nothing 98 * undoes a bounce or a complaint. A message the provider never took -- 99 * failed or blocked -- has nothing to report about and stays as it is. 100 * 101 * @param string $current The stored status. 102 * @param string $incoming delivered|deferred|bounced|complained. 103 * @return string|null 104 */ 105 public static function next_status( $current, $incoming ) { 106 $rank = array( 107 'sent' => 1, 108 'deferred' => 2, 109 'delivered' => 3, 110 'bounced' => 4, 111 'complained' => 5, 112 ); 113 114 if ( ! isset( $rank[ $current ], $rank[ $incoming ] ) || 'sent' === $incoming ) { 115 return null; 116 } 117 118 return $rank[ $incoming ] > $rank[ $current ] ? $incoming : null; 119 } 120 121 /** 122 * The given statuses as a quoted SQL list. Only ever called with the 123 * literal lists above, never with anything a request supplied. 124 * 125 * @param string[] $statuses 126 * @return string 127 */ 128 private static function sql_list( array $statuses ) { 129 return "'" . implode( "','", array_map( 'sanitize_key', $statuses ) ) . "'"; 130 } 131 132 /** 58 133 * Human label for a stored status. Anything unrecognised is reported as a 59 134 * failure, which is what an unknown status meant before this map existed. … … 78 153 * @type string $from 79 154 * @type string $subject 80 * @type string $status 'sent'|'failed' 155 * @type string $status 'sent'|'failed'|'blocked'; the delivery statuses are only ever set later, by apply_delivery_status() 81 156 * @type string $mailer 82 157 * @type string $error … … 232 307 233 308 /** 309 * The log row a provider's report is about, or null. 310 * 311 * The provider id is tried first: it is what every report carries. The 312 * token is the fallback for a report that only quotes our own tag or 313 * Message-ID. Latest row first, should more than one carry it: a failover 314 * can log the same message twice, and the report is about the send that 315 * the provider took. 316 * 317 * @param string $provider_id 318 * @param string $token 319 * @return array|null { id, status } 320 */ 321 public function find_for_event( $provider_id, $token ) { 322 global $wpdb; 323 324 $provider_id = Cybex_SMTP_Send_Context::clean_provider_id( $provider_id ); 325 $token = preg_match( '/^[a-f0-9]{32}$/', (string) $token ) ? (string) $token : ''; 326 $table = Cybex_SMTP_DB::table_name(); 327 328 if ( '' !== $provider_id ) { 329 $row = $wpdb->get_row( 330 $wpdb->prepare( "SELECT id, status FROM {$table} WHERE provider_id = %s ORDER BY id DESC LIMIT 1", $provider_id ), // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared 331 ARRAY_A 332 ); 333 334 if ( $row ) { 335 return $row; 336 } 337 } 338 339 if ( '' !== $token ) { 340 $row = $wpdb->get_row( 341 $wpdb->prepare( "SELECT id, status FROM {$table} WHERE token = %s ORDER BY id DESC LIMIT 1", $token ), // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared 342 ARRAY_A 343 ); 344 345 if ( $row ) { 346 return $row; 347 } 348 } 349 350 return null; 351 } 352 353 /** 354 * Moves a row to what a provider reported about it, if that is a step 355 * forward -- see next_status(). 356 * 357 * @param int $id 358 * @param string $current The row's stored status, as find_for_event() read it. 359 * @param string $status delivered|deferred|bounced|complained. 360 * @param string $detail The provider's reason, kept as the row's error. 361 * @return string|null The status written, or null when nothing changed. 362 */ 363 public function apply_delivery_status( $id, $current, $status, $detail = '' ) { 364 global $wpdb; 365 366 $next = self::next_status( (string) $current, (string) $status ); 367 368 if ( null === $next ) { 369 return null; 370 } 371 372 $values = array( 'status' => $next ); 373 $formats = array( '%s' ); 374 375 // Delivery says nothing went wrong, so it keeps whatever is there. 376 if ( 'delivered' !== $next && '' !== (string) $detail ) { 377 $values['error_message'] = substr( wp_strip_all_tags( (string) $detail ), 0, 1000 ); 378 $formats[] = '%s'; 379 } 380 381 $wpdb->update( Cybex_SMTP_DB::table_name(), $values, array( 'id' => (int) $id ), $formats, array( '%d' ) ); 382 383 return $next; 384 } 385 386 /** 234 387 * Every row matching the current filters, uncapped except for a hard 235 388 * safety ceiling -- used for CSV export. … … 250 403 251 404 $counts = array( 252 'all' => 0, 253 'sent' => 0, 254 'failed' => 0, 255 'blocked' => 0, 256 'pending' => 0, 405 'all' => 0, 406 'sent' => 0, 407 'delivered' => 0, 408 'deferred' => 0, 409 'bounced' => 0, 410 'complained' => 0, 411 'failed' => 0, 412 'blocked' => 0, 413 'pending' => 0, 257 414 ); 258 415 … … 334 491 * memory. 335 492 * 493 * A bounce reported later by the provider is the same kind of failure, the 494 * recipient's, and is left out of both halves for the same reason. 495 * 336 496 * @param int $days 337 497 * @return array[] Keyed by mailer id: accepted, refused, total, rate|null. … … 365 525 $params[] = $since; 366 526 527 $accepted = self::sql_list( self::accepted_statuses() ); 528 367 529 $rows = (array) $wpdb->get_results( 368 530 $wpdb->prepare( … … 370 532 "SELECT 371 533 mailer, 372 SUM(CASE WHEN status = 'sent'THEN 1 ELSE 0 END) AS accepted,534 SUM(CASE WHEN status IN ({$accepted}) THEN 1 ELSE 0 END) AS accepted, 373 535 SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) AS refused, 374 536 SUM(CASE WHEN status = 'failed' AND ( {$fault_sql} ) THEN 1 ELSE 0 END) AS recipient_faults … … 408 570 $start = gmdate( 'Y-m-d H:i:s', strtotime( $end_datetime ) - ( $days * DAY_IN_SECONDS ) ); 409 571 572 $accepted = self::sql_list( self::accepted_statuses() ); 573 410 574 // Blocked messages were never handed to a mailer, so counting them would 411 575 // drag the delivery rate down for mail the site deliberately suppressed. 576 // A bounce was accepted and then failed; the failure is what counts. 412 577 $row = $wpdb->get_row( 413 578 $wpdb->prepare( 414 579 "SELECT 415 580 COUNT(*) as total, 416 SUM(CASE WHEN status = 'sent'THEN 1 ELSE 0 END) as sent,417 SUM(CASE WHEN status = 'failed'THEN 1 ELSE 0 END) as failed581 SUM(CASE WHEN status IN ({$accepted}) THEN 1 ELSE 0 END) as sent, 582 SUM(CASE WHEN status IN ('failed','bounced') THEN 1 ELSE 0 END) as failed 418 583 FROM {$table} WHERE status <> 'blocked' AND time_sent BETWEEN %s AND %s", 419 584 $start, … … 447 612 $since = gmdate( 'Y-m-d', current_time( 'timestamp' ) - ( ( $days - 1 ) * DAY_IN_SECONDS ) ); 448 613 614 $accepted = self::sql_list( self::accepted_statuses() ); 615 449 616 $results = $wpdb->get_results( 450 617 $wpdb->prepare( 451 618 "SELECT DATE(time_sent) as d, 452 SUM(CASE WHEN status = 'sent'THEN 1 ELSE 0 END) as ok,453 SUM(CASE WHEN status = 'failed'THEN 1 ELSE 0 END) as fail619 SUM(CASE WHEN status IN ({$accepted}) THEN 1 ELSE 0 END) as ok, 620 SUM(CASE WHEN status IN ('failed','bounced') THEN 1 ELSE 0 END) as fail 454 621 FROM {$table} 455 622 WHERE time_sent >= %s … … 505 672 506 673 /** 507 * Deletes only the log rows matching the given status ( 'sent' or508 * 'failed'). Returns the number of rows removed, or false on an674 * Deletes only the log rows matching the given status (any of 675 * statuses()). Returns the number of rows removed, or false on an 509 676 * invalid status. 510 677 */ -
cybexsoft-smtp/tags/1.0.7/includes/class-cybex-smtp-privacy.php
r3696103 r3733698 224 224 225 225 /** 226 * Erases Pro's archived messages for the address, and the open/click227 * event rows attached to them.226 * Erases Pro's archived messages for the address, the open/click event 227 * rows attached to them, and the delivery events reported for it. 228 228 * 229 229 * @param string $like Prepared LIKE pattern. … … 250 250 ); 251 251 252 // What providers reported per recipient. Checked for, because the 253 // add-on is updated separately and an older one has no such table. 254 if ( method_exists( 'Cybex_SMTP_Pro_DB', 'delivery_table' ) ) { 255 $delivery = Cybex_SMTP_Pro_DB::delivery_table(); 256 257 $removed += (int) $wpdb->query( 258 $wpdb->prepare( "DELETE FROM {$delivery} WHERE recipient LIKE %s", $like ) // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared 259 ); 260 } 261 252 262 return $removed; 253 263 } -
cybexsoft-smtp/tags/1.0.7/includes/class-cybex-smtp-send-context.php
r3726993 r3733698 34 34 35 35 /** 36 * The name the token goes under in a provider's own tagging field -- 37 * SendGrid's `custom_args`, Mailgun's `v:` variables -- for the API 38 * mailers, which do not send our Message-ID. Some providers copy these 39 * into a header the recipient can read, so it names nothing but itself. 40 */ 41 const PROVIDER_TAG = 'message_token'; 42 43 /** 36 44 * Nesting depth of internal sends. A counter rather than a flag because 37 45 * these do nest: an alert about a failure can itself fail. -
cybexsoft-smtp/tags/1.0.7/includes/mailers/class-mailer-brevo.php
r3726993 r3733698 69 69 70 70 $headers = $this->custom_header_map(); 71 72 // Brevo returns this header's value as `X-Mailin-custom` on every 73 // webhook about the message. 74 $token = Cybex_SMTP_Send_Context::token(); 75 if ( '' !== $token ) { 76 $headers['X-Mailin-custom'] = $token; 77 } 78 71 79 if ( $headers ) { 72 80 $payload['headers'] = $headers; -
cybexsoft-smtp/tags/1.0.7/includes/mailers/class-mailer-mailgun.php
r3726993 r3733698 82 82 } 83 83 84 // Comes back as `user-variables` on every event Mailgun reports. 85 $token = Cybex_SMTP_Send_Context::token(); 86 87 if ( '' !== $token ) { 88 $fields[ 'v:' . Cybex_SMTP_Send_Context::PROVIDER_TAG ] = $token; 89 } 90 84 91 $files = array(); 85 92 foreach ( $this->attachments as $i => $path ) { -
cybexsoft-smtp/tags/1.0.7/includes/mailers/class-mailer-sendgrid.php
r3726993 r3733698 88 88 } 89 89 90 // Comes back on every event SendGrid reports about the message. 91 $token = Cybex_SMTP_Send_Context::token(); 92 93 if ( '' !== $token ) { 94 $payload['custom_args'] = array( Cybex_SMTP_Send_Context::PROVIDER_TAG => $token ); 95 } 96 90 97 if ( ! empty( $this->custom_headers ) ) { 91 98 $headers = array(); -
cybexsoft-smtp/tags/1.0.7/languages/cybexsoft-smtp.pot
r3732590 r3733698 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: Cybexsoft SMTP 1.0. 6\n"5 "Project-Id-Version: Cybexsoft SMTP 1.0.7\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/cybexsoft-smtp\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2026-10-0 7T12:30:54+00:00\n"12 "POT-Creation-Date: 2026-10-08T05:04:44+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "Plural-Forms: nplurals=2; plural=(n != 1);\n" … … 50 50 #: admin/views/partial-lists-manage.php:259 51 51 #: admin/views/partial-mailer-list.php:81 52 #: admin/views/tab-dashboard.php:2 7953 #: admin/views/tab-dashboard.php:3 7754 #: admin/views/tab-dashboard.php: 39555 #: admin/views/tab-dashboard.php: 39652 #: admin/views/tab-dashboard.php:286 53 #: admin/views/tab-dashboard.php:384 54 #: admin/views/tab-dashboard.php:402 55 #: admin/views/tab-dashboard.php:403 56 56 #: admin/views/tab-deliver.php:354 57 #: admin/views/tab-log.php:1 2958 #: admin/views/tab-log.php:13 057 #: admin/views/tab-log.php:134 58 #: admin/views/tab-log.php:135 59 59 #: admin/views/tab-settings.php:76 60 60 #: admin/views/tab-settings.php:164 … … 98 98 99 99 #: admin/views/header.php:50 100 #: admin/views/tab-dashboard.php:43 2100 #: admin/views/tab-dashboard.php:439 101 101 #: includes/class-cybex-smtp-plugins-screen.php:79 102 102 msgid "Get Pro for Free" … … 207 207 208 208 #: admin/views/header.php:173 209 #: pro/includes/class-cybex-smtp-pro-admin.php:1 69209 #: pro/includes/class-cybex-smtp-pro-admin.php:171 210 210 msgid "License activated." 211 211 msgstr "" … … 303 303 #: admin/views/modal-email-content.php:28 304 304 #: includes/class-cybex-smtp-admin.php:267 305 #: pro/includes/class-cybex-smtp-pro-admin.php:3 19305 #: pro/includes/class-cybex-smtp-pro-admin.php:321 306 306 msgid "Loading…" 307 307 msgstr "" 308 308 309 309 #: admin/views/modal-get-pro.php:23 310 #: admin/views/tab-dashboard.php:4 29310 #: admin/views/tab-dashboard.php:436 311 311 msgid "Get Cybexsoft SMTP Pro — free" 312 312 msgstr "" … … 483 483 484 484 #: admin/views/modal-wizard.php:301 485 #: admin/views/tab-dashboard.php:3 37485 #: admin/views/tab-dashboard.php:344 486 486 #: includes/class-cybex-smtp-notices.php:185 487 487 msgid "Send a test email" … … 788 788 789 789 #: admin/views/partial-lists-manage.php:462 790 #: admin/views/tab-log.php:11 2790 #: admin/views/tab-log.php:117 791 791 msgid "Clear selection" 792 792 msgstr "" … … 817 817 818 818 #: admin/views/partial-lists-manage.php:478 819 #: admin/views/tab-log.php:13 2819 #: admin/views/tab-log.php:137 820 820 msgid "Actions" 821 821 msgstr "" … … 841 841 #. translators: %s: email subject 842 842 #: admin/views/partial-lists-manage.php:514 843 #: admin/views/tab-log.php:1 68843 #: admin/views/tab-log.php:173 844 844 msgid "Select %s" 845 845 msgstr "" … … 871 871 872 872 #: admin/views/partial-lists-manage.php:580 873 #: admin/views/tab-log.php:27 0873 #: admin/views/tab-log.php:275 874 874 msgid "Prev" 875 875 msgstr "" 876 876 877 877 #: admin/views/partial-lists-manage.php:586 878 #: admin/views/tab-log.php:28 0878 #: admin/views/tab-log.php:285 879 879 msgid "Next" 880 880 msgstr "" … … 933 933 934 934 #: admin/views/partial-lists-manage.php:664 935 #: admin/views/tab-log.php:9 2935 #: admin/views/tab-log.php:97 936 936 msgid "Export CSV" 937 937 msgstr "" … … 1175 1175 #: admin/views/tab-dashboard.php:39 1176 1176 #: admin/views/tab-deliver.php:88 1177 #: includes/class-cybex-smtp-ajax.php:4 781177 #: includes/class-cybex-smtp-ajax.php:488 1178 1178 msgid "Pass" 1179 1179 msgstr "" 1180 1180 1181 1181 #: admin/views/tab-dashboard.php:40 1182 #: includes/class-cybex-smtp-ajax.php:4 791182 #: includes/class-cybex-smtp-ajax.php:489 1183 1183 msgid "Monitor" 1184 1184 msgstr "" … … 1187 1187 #: admin/views/tab-deliver.php:90 1188 1188 #: admin/views/tab-deliver.php:318 1189 #: includes/class-cybex-smtp-ajax.php:4 801189 #: includes/class-cybex-smtp-ajax.php:490 1190 1190 msgid "Missing" 1191 1191 msgstr "" … … 1193 1193 #: admin/views/tab-dashboard.php:42 1194 1194 #: admin/views/tab-deliver.php:91 1195 #: includes/class-cybex-smtp-ajax.php:4 811195 #: includes/class-cybex-smtp-ajax.php:491 1196 1196 msgid "Not set up" 1197 1197 msgstr "" … … 1244 1244 1245 1245 #: admin/views/tab-dashboard.php:143 1246 #: admin/views/tab-log.php:1 451246 #: admin/views/tab-log.php:150 1247 1247 #: admin/views/tab-tools.php:96 1248 1248 #: includes/class-cybex-smtp-ajax.php:261 … … 1312 1312 msgstr "" 1313 1313 1314 #. translators: 1: delivered count, 2: failed count1314 #. translators: 1: count of messages the provider accepted, 2: failed count 1315 1315 #: admin/views/tab-dashboard.php:244 1316 msgid "%1$s delivered· %2$s failed"1316 msgid "%1$s sent · %2$s failed" 1317 1317 msgstr "" 1318 1318 1319 1319 #: admin/views/tab-dashboard.php:252 1320 msgid " Delivered · 30d"1320 msgid "Accepted · 30d" 1321 1321 msgstr "" 1322 1322 … … 1325 1325 msgstr "" 1326 1326 1327 #: admin/views/tab-dashboard.php:26 11327 #: admin/views/tab-dashboard.php:268 1328 1328 msgid "Failed · 30d" 1329 1329 msgstr "" 1330 1330 1331 #: admin/views/tab-dashboard.php:2 661331 #: admin/views/tab-dashboard.php:273 1332 1332 msgid "vs previous 30 days" 1333 1333 msgstr "" 1334 1334 1335 #: admin/views/tab-dashboard.php:2 791336 #: pro/includes/class-cybex-smtp-pro-reports.php:1 351335 #: admin/views/tab-dashboard.php:286 1336 #: pro/includes/class-cybex-smtp-pro-reports.php:151 1337 1337 msgid "Open rate" 1338 1338 msgstr "" 1339 1339 1340 #: admin/views/tab-dashboard.php:28 11340 #: admin/views/tab-dashboard.php:288 1341 1341 msgid "Install & activate Pro" 1342 1342 msgstr "" 1343 1343 1344 #: admin/views/tab-dashboard.php:2 891344 #: admin/views/tab-dashboard.php:296 1345 1345 msgid "Email volume · last 14 days" 1346 1346 msgstr "" 1347 1347 1348 #: admin/views/tab-dashboard.php:29 11349 #: admin/views/tab-dashboard.php: 3381348 #: admin/views/tab-dashboard.php:298 1349 #: admin/views/tab-dashboard.php:401 1350 1350 #: admin/views/tab-log.php:33 1351 #: includes/class-cybex-smtp-logger.php:36 1352 #: pro/admin/views/view-message.php:52 1353 #: pro/includes/class-cybex-smtp-pro-reports.php:133 1351 #: includes/class-cybex-smtp-logger.php:41 1352 #: pro/admin/views/view-message.php:42 1353 #: pro/includes/class-cybex-smtp-pro-reports.php:134 1354 msgid "Sent" 1355 msgstr "" 1356 1357 #: admin/views/tab-dashboard.php:299 1358 #: admin/views/tab-log.php:34 1359 #: includes/class-cybex-smtp-logger.php:61 1360 #: pro/includes/class-cybex-smtp-pro-reports.php:136 1361 msgid "Failed" 1362 msgstr "" 1363 1364 #: admin/views/tab-dashboard.php:323 1365 msgid "Setup checklist" 1366 msgstr "" 1367 1368 #: admin/views/tab-dashboard.php:328 1369 msgid "Connect a mailer" 1370 msgstr "" 1371 1372 #: admin/views/tab-dashboard.php:329 1373 msgid "configured" 1374 msgstr "" 1375 1376 #: admin/views/tab-dashboard.php:329 1377 msgid "Choose a mailer in Settings" 1378 msgstr "" 1379 1380 #: admin/views/tab-dashboard.php:331 1381 #: admin/views/tab-dashboard.php:339 1382 #: admin/views/tab-dashboard.php:347 1383 #: admin/views/tab-dashboard.php:375 1384 msgid "Done" 1385 msgstr "" 1386 1387 #: admin/views/tab-dashboard.php:336 1388 msgid "Verify sending domain" 1389 msgstr "" 1390 1391 #: admin/views/tab-dashboard.php:337 1392 msgid "SPF record found" 1393 msgstr "" 1394 1395 #: admin/views/tab-dashboard.php:337 1396 msgid "No SPF record found" 1397 msgstr "" 1398 1399 #: admin/views/tab-dashboard.php:345 1400 #: includes/class-cybex-smtp-logger.php:45 1354 1401 msgid "Delivered" 1355 1402 msgstr "" 1356 1403 1357 #: admin/views/tab-dashboard.php:292 1358 #: admin/views/tab-log.php:34 1359 #: includes/class-cybex-smtp-logger.php:40 1360 #: pro/admin/views/view-message.php:52 1361 #: pro/includes/class-cybex-smtp-pro-reports.php:134 1362 msgid "Failed" 1363 msgstr "" 1364 1365 #: admin/views/tab-dashboard.php:316 1366 msgid "Setup checklist" 1367 msgstr "" 1368 1369 #: admin/views/tab-dashboard.php:321 1370 msgid "Connect a mailer" 1371 msgstr "" 1372 1373 #: admin/views/tab-dashboard.php:322 1374 msgid "configured" 1375 msgstr "" 1376 1377 #: admin/views/tab-dashboard.php:322 1378 msgid "Choose a mailer in Settings" 1379 msgstr "" 1380 1381 #: admin/views/tab-dashboard.php:324 1382 #: admin/views/tab-dashboard.php:332 1383 #: admin/views/tab-dashboard.php:340 1384 #: admin/views/tab-dashboard.php:368 1385 msgid "Done" 1386 msgstr "" 1387 1388 #: admin/views/tab-dashboard.php:329 1389 msgid "Verify sending domain" 1390 msgstr "" 1391 1392 #: admin/views/tab-dashboard.php:330 1393 msgid "SPF record found" 1394 msgstr "" 1395 1396 #: admin/views/tab-dashboard.php:330 1397 msgid "No SPF record found" 1398 msgstr "" 1399 1400 #: admin/views/tab-dashboard.php:338 1404 #: admin/views/tab-dashboard.php:345 1401 1405 msgid "Not sent yet" 1402 1406 msgstr "" 1403 1407 1404 #: admin/views/tab-dashboard.php:3 651405 #: admin/views/tab-dashboard.php:3 741408 #: admin/views/tab-dashboard.php:372 1409 #: admin/views/tab-dashboard.php:381 1406 1410 msgid "Enable open & click tracking" 1407 1411 msgstr "" 1408 1412 1409 #: admin/views/tab-dashboard.php:3 661413 #: admin/views/tab-dashboard.php:373 1410 1414 msgid "Tracking active" 1411 1415 msgstr "" 1412 1416 1413 #: admin/views/tab-dashboard.php:3 661417 #: admin/views/tab-dashboard.php:373 1414 1418 msgid "Turn it on in Settings → Email controls" 1415 1419 msgstr "" 1416 1420 1417 #: admin/views/tab-dashboard.php:3 751421 #: admin/views/tab-dashboard.php:382 1418 1422 msgid "Install and activate Cybexsoft SMTP Pro" 1419 1423 msgstr "" 1420 1424 1421 #: admin/views/tab-dashboard.php:3 861425 #: admin/views/tab-dashboard.php:393 1422 1426 msgid "Recent emails" 1423 1427 msgstr "" 1424 1428 1425 #: admin/views/tab-dashboard.php:3 871429 #: admin/views/tab-dashboard.php:394 1426 1430 msgid "View full log →" 1427 1431 msgstr "" 1428 1432 1429 #: admin/views/tab-dashboard.php:39 11430 #: admin/views/tab-log.php:1 251433 #: admin/views/tab-dashboard.php:398 1434 #: admin/views/tab-log.php:130 1431 1435 #: includes/class-cybex-smtp-privacy.php:101 1432 1436 msgid "Subject" 1433 1437 msgstr "" 1434 1438 1435 #: admin/views/tab-dashboard.php:39 21436 #: admin/views/tab-log.php:1 261439 #: admin/views/tab-dashboard.php:399 1440 #: admin/views/tab-log.php:131 1437 1441 #: includes/class-cybex-smtp-privacy.php:105 1438 1442 msgid "Recipient" 1439 1443 msgstr "" 1440 1444 1441 #: admin/views/tab-dashboard.php: 3931442 #: admin/views/tab-log.php:1 271445 #: admin/views/tab-dashboard.php:400 1446 #: admin/views/tab-log.php:132 1443 1447 #: includes/class-cybex-smtp-ajax.php:302 1444 1448 #: includes/class-cybex-smtp-privacy.php:113 … … 1448 1452 msgstr "" 1449 1453 1450 #: admin/views/tab-dashboard.php:394 1451 #: pro/admin/views/view-message.php:42 1452 #: pro/includes/class-cybex-smtp-pro-reports.php:132 1453 msgid "Sent" 1454 msgstr "" 1455 1456 #: admin/views/tab-dashboard.php:395 1457 #: admin/views/tab-log.php:129 1454 #: admin/views/tab-dashboard.php:402 1455 #: admin/views/tab-log.php:134 1458 1456 #: pro/admin/views/view-message.php:96 1459 1457 msgid "Opens" 1460 1458 msgstr "" 1461 1459 1462 #: admin/views/tab-dashboard.php: 3961463 #: admin/views/tab-log.php:13 01460 #: admin/views/tab-dashboard.php:403 1461 #: admin/views/tab-log.php:135 1464 1462 #: pro/admin/views/view-message.php:102 1465 1463 msgid "Clicks" 1466 1464 msgstr "" 1467 1465 1468 #: admin/views/tab-dashboard.php: 3991466 #: admin/views/tab-dashboard.php:406 1469 1467 msgid "No emails sent yet." 1470 1468 msgstr "" 1471 1469 1472 #: admin/views/tab-dashboard.php:4 061470 #: admin/views/tab-dashboard.php:413 1473 1471 #: pro/admin/views/part-bounce-handling.php:146 1474 1472 msgid "ago" 1475 1473 msgstr "" 1476 1474 1477 #: admin/views/tab-dashboard.php:42 01475 #: admin/views/tab-dashboard.php:427 1478 1476 msgid "Cybexsoft SMTP Pro is active" 1479 1477 msgstr "" 1480 1478 1481 #: admin/views/tab-dashboard.php:42 11479 #: admin/views/tab-dashboard.php:428 1482 1480 msgid "Open & click tracking, content archiving, backup failover and weekly reports are all enabled." 1483 1481 msgstr "" 1484 1482 1485 #: admin/views/tab-dashboard.php:4 231483 #: admin/views/tab-dashboard.php:430 1486 1484 msgid "Manage Pro features →" 1487 1485 msgstr "" 1488 1486 1489 #: admin/views/tab-dashboard.php:43 01487 #: admin/views/tab-dashboard.php:437 1490 1488 msgid "Open & click tracking, content archiving, backup failover, weekly reports and four more mailers. Ask us and we will email you a copy." 1491 1489 msgstr "" 1492 1490 1493 1491 #: admin/views/tab-deliver.php:45 1494 #: includes/class-cybex-smtp-ajax.php:4 851492 #: includes/class-cybex-smtp-ajax.php:495 1495 1493 msgid "SPF" 1496 1494 msgstr "" … … 1511 1509 1512 1510 #: admin/views/tab-deliver.php:56 1513 #: includes/class-cybex-smtp-ajax.php:4 861511 #: includes/class-cybex-smtp-ajax.php:496 1514 1512 msgid "DKIM" 1515 1513 msgstr "" … … 1528 1526 1529 1527 #: admin/views/tab-deliver.php:68 1530 #: includes/class-cybex-smtp-ajax.php:4 871528 #: includes/class-cybex-smtp-ajax.php:497 1531 1529 msgid "DMARC" 1532 1530 msgstr "" … … 1708 1706 msgstr "" 1709 1707 1710 #: admin/views/tab-log.php:40 1711 #: includes/class-cybex-smtp-ajax.php:370 1712 #: includes/class-cybex-smtp-logger.php:44 1713 msgid "Blocked" 1714 msgstr "" 1715 1716 #: admin/views/tab-log.php:71 1708 #: admin/views/tab-log.php:76 1717 1709 msgid "Search by subject or recipient…" 1718 1710 msgstr "" 1719 1711 1720 #: admin/views/tab-log.php:1 091712 #: admin/views/tab-log.php:114 1721 1713 msgid "Delete selected" 1722 1714 msgstr "" 1723 1715 1724 #: admin/views/tab-log.php:12 21716 #: admin/views/tab-log.php:127 1725 1717 msgid "Select all emails on this page" 1726 1718 msgstr "" 1727 1719 1728 #: admin/views/tab-log.php:1 281720 #: admin/views/tab-log.php:133 1729 1721 #: includes/class-cybex-smtp-ajax.php:282 1730 1722 #: includes/class-cybex-smtp-privacy.php:97 … … 1732 1724 msgstr "" 1733 1725 1734 #: admin/views/tab-log.php:1 371726 #: admin/views/tab-log.php:142 1735 1727 msgid "No emails found." 1736 1728 msgstr "" 1737 1729 1738 1730 #. translators: %s: the plugin, theme or "WordPress" that sent the email 1739 #: admin/views/tab-log.php:19 41731 #: admin/views/tab-log.php:199 1740 1732 msgid "from %s" 1741 1733 msgstr "" 1742 1734 1743 #: admin/views/tab-log.php:2 271735 #: admin/views/tab-log.php:232 1744 1736 msgid "View email content" 1745 1737 msgstr "" 1746 1738 1747 1739 #. translators: %s: email subject 1748 #: admin/views/tab-log.php:23 31740 #: admin/views/tab-log.php:238 1749 1741 msgid "View content of %s" 1750 1742 msgstr "" 1751 1743 1752 1744 #. translators: 1: first row on this page, 2: last row on this page, 3: total rows 1753 #: admin/views/tab-log.php:26 01745 #: admin/views/tab-log.php:265 1754 1746 msgid "Showing %1$s–%2$s of %3$s emails" 1755 1747 msgstr "" 1756 1748 1757 #: admin/views/tab-log.php: 2991749 #: admin/views/tab-log.php:304 1758 1750 msgid "Open & click tracking is a Pro feature" 1759 1751 msgstr "" 1760 1752 1761 #: admin/views/tab-log.php:30 01753 #: admin/views/tab-log.php:305 1762 1754 msgid "Install and activate Cybexsoft SMTP Pro to see engagement per email and per link, plus full HTML content archiving." 1763 1755 msgstr "" … … 1891 1883 1892 1884 #: admin/views/tab-settings.php:313 1893 msgid "Delete all deliveredlog entries?"1885 msgid "Delete all sent log entries?" 1894 1886 msgstr "" 1895 1887 1896 1888 #: admin/views/tab-settings.php:314 1897 msgid "Delete deliveredonly"1889 msgid "Delete sent only" 1898 1890 msgstr "" 1899 1891 … … 1982 1974 1983 1975 #: admin/views/tab-tools.php:73 1984 #: includes/class-cybex-smtp-ajax.php:3 681976 #: includes/class-cybex-smtp-ajax.php:378 1985 1977 msgid "Connection trace" 1986 1978 msgstr "" … … 2350 2342 #: includes/class-cybex-smtp-admin.php:260 2351 2343 #: includes/class-cybex-smtp-plugins-screen.php:211 2352 #: pro/includes/class-cybex-smtp-pro-admin.php:3 182344 #: pro/includes/class-cybex-smtp-pro-admin.php:320 2353 2345 msgid "Something went wrong. Please try again." 2354 2346 msgstr "" 2355 2347 2356 2348 #: includes/class-cybex-smtp-admin.php:261 2357 msgid " delivered"2349 msgid "sent" 2358 2350 msgstr "" 2359 2351 … … 2533 2525 #: includes/class-cybex-smtp-ajax.php:39 2534 2526 #: includes/class-cybex-smtp-notices.php:536 2535 #: pro/includes/class-cybex-smtp-pro-admin.php: 5472536 #: pro/includes/class-cybex-smtp-pro-admin.php: 5592537 #: pro/includes/class-cybex-smtp-pro-admin.php: 5952527 #: pro/includes/class-cybex-smtp-pro-admin.php:637 2528 #: pro/includes/class-cybex-smtp-pro-admin.php:649 2529 #: pro/includes/class-cybex-smtp-pro-admin.php:685 2538 2530 #: pro/includes/class-cybex-smtp-pro-ajax.php:38 2539 2531 #: pro/includes/class-cybex-smtp-pro-promotion.php:393 … … 2560 2552 2561 2553 #: includes/class-cybex-smtp-ajax.php:68 2562 #: includes/class-cybex-smtp-ajax.php:3 392554 #: includes/class-cybex-smtp-ajax.php:349 2563 2555 msgid "That is not a valid email address to test with." 2564 2556 msgstr "" … … 2639 2631 msgstr "" 2640 2632 2641 #: includes/class-cybex-smtp-ajax.php:3 182633 #: includes/class-cybex-smtp-ajax.php:328 2642 2634 msgid "Headers" 2643 2635 msgstr "" 2644 2636 2645 #: includes/class-cybex-smtp-ajax.php:3 702637 #: includes/class-cybex-smtp-ajax.php:380 2646 2638 msgid "Reachable" 2647 2639 msgstr "" 2648 2640 2641 #: includes/class-cybex-smtp-ajax.php:380 2642 #: includes/class-cybex-smtp-logger.php:65 2643 msgid "Blocked" 2644 msgstr "" 2645 2649 2646 #. translators: %s: total milliseconds 2650 #: includes/class-cybex-smtp-ajax.php:3 752647 #: includes/class-cybex-smtp-ajax.php:385 2651 2648 msgid "%s ms total" 2652 2649 msgstr "" 2653 2650 2654 2651 #. translators: %s: milliseconds 2655 #: includes/class-cybex-smtp-ajax.php:3 872652 #: includes/class-cybex-smtp-ajax.php:397 2656 2653 #: pro/includes/class-cybex-smtp-pro-ajax.php:155 2657 2654 msgid "%s ms" 2658 2655 msgstr "" 2659 2656 2660 #: includes/class-cybex-smtp-ajax.php:4 522657 #: includes/class-cybex-smtp-ajax.php:462 2661 2658 msgid "Please enter a domain to check." 2662 2659 msgstr "" 2663 2660 2664 #: includes/class-cybex-smtp-ajax.php:4 652661 #: includes/class-cybex-smtp-ajax.php:475 2665 2662 msgid "That does not look like a domain name. Enter just the domain you send from, e.g. example.com." 2666 2663 msgstr "" 2667 2664 2668 #: includes/class-cybex-smtp-ajax.php:4 742665 #: includes/class-cybex-smtp-ajax.php:484 2669 2666 msgid "This server does not support DNS lookups (dns_get_record is unavailable)." 2670 2667 msgstr "" … … 2975 2972 msgstr "" 2976 2973 2974 #: includes/class-cybex-smtp-logger.php:49 2975 msgid "Deferred" 2976 msgstr "" 2977 2978 #: includes/class-cybex-smtp-logger.php:53 2979 #: pro/includes/class-cybex-smtp-pro-reports.php:147 2980 msgid "Bounced" 2981 msgstr "" 2982 2983 #: includes/class-cybex-smtp-logger.php:57 2984 #: pro/includes/class-cybex-smtp-pro-failures.php:150 2985 msgid "Spam complaint" 2986 msgstr "" 2987 2977 2988 #: includes/class-cybex-smtp-mailers.php:56 2978 2989 msgid "Default (PHP mail)" … … 3529 3540 3530 3541 #: pro/admin/views/part-alerts-card.php:64 3542 msgid "Also alert when the bounce rate passes (%)" 3543 msgstr "" 3544 3545 #. translators: %d: minimum number of messages 3546 #: pro/admin/views/part-alerts-card.php:70 3547 msgid "Over the last 24 hours, from providers that report bounces back (set up under Delivery events on the mailer). Needs at least %d messages, at most one alert a day. 0 turns it off; 2–5 is a sensible line." 3548 msgstr "" 3549 3550 #: pro/admin/views/part-alerts-card.php:78 3531 3551 msgid "A message that fails on your primary mailer but is rescued by the backup does not raise an alert — only final failures do. Alerts go out through your configured mailer, so if that is the thing that is broken the alert will not arrive: pair alerts with a backup mailer on a different provider." 3532 3552 msgstr "" … … 3680 3700 3681 3701 #: pro/admin/views/part-danger-engagement.php:28 3682 #: pro/includes/class-cybex-smtp-pro-admin.php:32 03702 #: pro/includes/class-cybex-smtp-pro-admin.php:322 3683 3703 msgid "Delete all engagement data and archived content? This cannot be undone." 3704 msgstr "" 3705 3706 #: pro/admin/views/part-delivery-events.php:25 3707 msgid "In Amazon SNS, create a topic and add an HTTPS subscription with the URL below. This site confirms the subscription by itself. Then, in SES, send Bounce, Complaint, Delivery and Delivery delay notifications for your sending identity (or a configuration set) to that topic." 3708 msgstr "" 3709 3710 #: pro/admin/views/part-delivery-events.php:28 3711 msgid "In SendGrid, go to Settings → Mail Settings → Event Webhook, paste the URL below, tick Delivered, Deferred, Bounced, Dropped and Spam Reports, and turn on Signed Event Webhook. Copy the verification key it shows into the field here." 3712 msgstr "" 3713 3714 #: pro/admin/views/part-delivery-events.php:29 3715 msgid "Verification key" 3716 msgstr "" 3717 3718 #: pro/admin/views/part-delivery-events.php:32 3719 msgid "In Mailgun, go to Sending → Webhooks for your domain and add the URL below for Delivered, Permanent failure, Temporary failure and Spam complaints. Copy the HTTP webhook signing key from the same page into the field here." 3720 msgstr "" 3721 3722 #: pro/admin/views/part-delivery-events.php:33 3723 msgid "HTTP webhook signing key" 3724 msgstr "" 3725 3726 #: pro/admin/views/part-delivery-events.php:36 3727 msgid "In Postmark, open your server, choose the message stream, then Webhooks → Add webhook. Paste the URL below and tick Delivery, Bounce and Spam Complaint. Leave Basic auth credentials empty: the key in the URL does that job." 3728 msgstr "" 3729 3730 #: pro/admin/views/part-delivery-events.php:39 3731 msgid "In Brevo, go to Transactional → Settings → Webhook, add a webhook with the URL below, and tick Delivered, Deferred, Soft bounce, Hard bounce, Invalid email, Blocked and Complaint." 3732 msgstr "" 3733 3734 #: pro/admin/views/part-delivery-events.php:42 3735 msgid "In SMTP2GO, go to Settings → Webhooks, add the URL below, and tick Delivered, Bounce, Spam and Reject. Either output type works." 3736 msgstr "" 3737 3738 #: pro/admin/views/part-delivery-events.php:45 3739 msgid "In Resend, go to Webhooks → Add endpoint, paste the URL below and choose email.delivered, email.delivery_delayed, email.bounced, email.complained and email.suppressed. Copy the endpoint’s signing secret (it starts whsec_) into the field here." 3740 msgstr "" 3741 3742 #: pro/admin/views/part-delivery-events.php:46 3743 #: pro/admin/views/part-delivery-events.php:50 3744 msgid "Signing secret" 3745 msgstr "" 3746 3747 #: pro/admin/views/part-delivery-events.php:49 3748 msgid "In MailerSend, go to Domains → your domain → Webhooks → Add webhook, paste the URL below and choose activity.delivered, activity.deferred, activity.soft_bounced, activity.hard_bounced and activity.spam_complaint. Copy its signing secret into the field here." 3749 msgstr "" 3750 3751 #: pro/admin/views/part-delivery-events.php:53 3752 msgid "In Mailjet, go to Account settings → Event notifications (webhooks) and paste the URL below against Sent, Bounce, Blocked and Spam." 3753 msgstr "" 3754 3755 #: pro/admin/views/part-delivery-events.php:56 3756 msgid "In Elastic Email, go to Settings → Notifications (Webhooks), add the URL below and tick Sent, Bounce/Error and Complaints. Elastic Email checks the URL when you save it; this site answers that check." 3757 msgstr "" 3758 3759 #: pro/admin/views/part-delivery-events.php:59 3760 msgid "In ZeptoMail, open the Mail Agent → Webhooks → Add webhook, paste the URL below and choose Hard bounce, Soft bounce and Feedback loop. ZeptoMail does not report deliveries, so messages stay \"Sent\" unless they bounce or draw a complaint." 3761 msgstr "" 3762 3763 #: pro/admin/views/part-delivery-events.php:73 3764 #: pro/admin/views/part-delivery-events.php:127 3765 msgid "Delivery events" 3766 msgstr "" 3767 3768 #: pro/admin/views/part-delivery-events.php:74 3769 msgid "Lets the provider tell this site what happened after it took a message: delivered, delayed, bounced or reported as spam. The email log shows it, and addresses that hard-bounce or complain are blocked automatically." 3770 msgstr "" 3771 3772 #: pro/admin/views/part-delivery-events.php:79 3773 msgid "Webhook URL" 3774 msgstr "" 3775 3776 #: pro/admin/views/part-delivery-events.php:82 3777 msgid "The key at the end is what tells this site the request is genuine. Keep the URL private." 3778 msgstr "" 3779 3780 #: pro/admin/views/part-delivery-events.php:85 3781 msgid "Make new keys when I save (every provider’s URL with a key changes and must be pasted again)" 3782 msgstr "" 3783 3784 #. translators: %s: how long ago, e.g. "3 minutes" 3785 #: pro/admin/views/part-delivery-events.php:107 3786 msgid "Last event received %s ago." 3787 msgstr "" 3788 3789 #: pro/admin/views/part-delivery-events.php:111 3790 msgid "Nothing received yet." 3791 msgstr "" 3792 3793 #: pro/admin/views/part-delivery-events.php:128 3794 msgid "Not available for this mailer. Gmail and Outlook do not report deliveries, bounces or complaints to the apps that send through them; a bounce arrives as an email in the sending mailbox instead. Messages sent this way stay \"Sent\" in the log." 3684 3795 msgstr "" 3685 3796 … … 4231 4342 msgstr "" 4232 4343 4233 #: pro/includes/class-cybex-smtp-pro-admin.php:17 04344 #: pro/includes/class-cybex-smtp-pro-admin.php:172 4234 4345 msgid "The license could not be activated." 4235 4346 msgstr "" 4236 4347 4237 #: pro/includes/class-cybex-smtp-pro-admin.php:17 14348 #: pro/includes/class-cybex-smtp-pro-admin.php:173 4238 4349 msgid "Message re-sent." 4239 4350 msgstr "" 4240 4351 4241 #: pro/includes/class-cybex-smtp-pro-admin.php:17 24352 #: pro/includes/class-cybex-smtp-pro-admin.php:174 4242 4353 msgid "The message could not be re-sent. Check the debug log in Tools." 4243 4354 msgstr "" 4244 4355 4245 #: pro/includes/class-cybex-smtp-pro-admin.php:17 34356 #: pro/includes/class-cybex-smtp-pro-admin.php:175 4246 4357 msgid "That message has no archived content to re-send." 4247 4358 msgstr "" 4248 4359 4249 #: pro/includes/class-cybex-smtp-pro-admin.php:17 44360 #: pro/includes/class-cybex-smtp-pro-admin.php:176 4250 4361 msgid "Engagement data and archived content deleted." 4251 4362 msgstr "" 4252 4363 4253 #: pro/includes/class-cybex-smtp-pro-admin.php:17 54364 #: pro/includes/class-cybex-smtp-pro-admin.php:177 4254 4365 msgid "Your backup mailer is now the primary. The one it replaced is standing by." 4255 4366 msgstr "" 4256 4367 4257 #: pro/includes/class-cybex-smtp-pro-admin.php:17 64368 #: pro/includes/class-cybex-smtp-pro-admin.php:178 4258 4369 msgid "The mailers were not swapped. The reasons are listed on the notice that offered it." 4259 4370 msgstr "" 4260 4371 4261 #: pro/includes/class-cybex-smtp-pro-admin.php:1 784372 #: pro/includes/class-cybex-smtp-pro-admin.php:180 4262 4373 msgid "Blocklists checked." 4263 4374 msgstr "" 4264 4375 4265 #: pro/includes/class-cybex-smtp-pro-admin.php:1 794376 #: pro/includes/class-cybex-smtp-pro-admin.php:181 4266 4377 msgid "There is no sending IP to check with your current mailer. See the card below." 4267 4378 msgstr "" 4268 4379 4269 #: pro/includes/class-cybex-smtp-pro-admin.php:18 14380 #: pro/includes/class-cybex-smtp-pro-admin.php:183 4270 4381 msgid "Weekly report sent." 4271 4382 msgstr "" 4272 4383 4273 #: pro/includes/class-cybex-smtp-pro-admin.php:18 24384 #: pro/includes/class-cybex-smtp-pro-admin.php:184 4274 4385 msgid "The weekly report could not be sent. Check the debug log below." 4275 4386 msgstr "" 4276 4387 4277 #: pro/includes/class-cybex-smtp-pro-admin.php:18 34388 #: pro/includes/class-cybex-smtp-pro-admin.php:185 4278 4389 msgid "Account connected." 4279 4390 msgstr "" 4280 4391 4281 #: pro/includes/class-cybex-smtp-pro-admin.php:18 44392 #: pro/includes/class-cybex-smtp-pro-admin.php:186 4282 4393 msgid "The account could not be connected." 4283 4394 msgstr "" 4284 4395 4285 #: pro/includes/class-cybex-smtp-pro-admin.php:18 54396 #: pro/includes/class-cybex-smtp-pro-admin.php:187 4286 4397 msgid "Account disconnected." 4287 4398 msgstr "" 4288 4399 4289 #: pro/includes/class-cybex-smtp-pro-admin.php:20 64400 #: pro/includes/class-cybex-smtp-pro-admin.php:208 4290 4401 msgid "Pro settings" 4291 4402 msgstr "" 4292 4403 4293 #: pro/includes/class-cybex-smtp-pro-admin.php:32 14404 #: pro/includes/class-cybex-smtp-pro-admin.php:323 4294 4405 msgid "This sends a real message through your backup mailer, to your From address. Continue?" 4295 4406 msgstr "" 4296 4407 4297 #: pro/includes/class-cybex-smtp-pro-admin.php:37 54408 #: pro/includes/class-cybex-smtp-pro-admin.php:377 4298 4409 msgid "The watchlist (bounce history only)" 4299 4410 msgstr "" 4300 4411 4301 #: pro/includes/class-cybex-smtp-pro-admin.php:512 4412 #. translators: 1: number of messages, 2: provider names 4413 #: pro/includes/class-cybex-smtp-pro-admin.php:520 4414 msgid "Delivery reports: %1$s message so far, from %2$s" 4415 msgid_plural "Delivery reports: %1$s messages so far, from %2$s" 4416 msgstr[0] "" 4417 msgstr[1] "" 4418 4419 #. translators: 1: delivered rate, 2: bounce rate, 3: complaint rate, 4: provider names 4420 #: pro/includes/class-cybex-smtp-pro-admin.php:527 4421 msgid "%1$s%% delivered · %2$s%% bounced · %3$s%% complaints (%4$s)" 4422 msgstr "" 4423 4424 #: pro/includes/class-cybex-smtp-pro-admin.php:558 4425 msgid "hard" 4426 msgstr "" 4427 4428 #: pro/includes/class-cybex-smtp-pro-admin.php:558 4429 msgid "soft" 4430 msgstr "" 4431 4432 #: pro/includes/class-cybex-smtp-pro-admin.php:573 4433 msgid "Provider reports" 4434 msgstr "" 4435 4436 #: pro/includes/class-cybex-smtp-pro-admin.php:602 4302 4437 msgid "Not tracked — plain-text message, or this kind of tracking was off when it was sent." 4303 4438 msgstr "" … … 4432 4567 msgstr "" 4433 4568 4569 #. translators: 1: bounce rate as a percentage, 2: site name 4570 #: pro/includes/class-cybex-smtp-pro-alerts.php:109 4571 msgid "[Bounce rate %1$s%%] %2$s" 4572 msgstr "" 4573 4574 #: pro/includes/class-cybex-smtp-pro-alerts.php:115 4575 msgid "Too much of your mail is bouncing" 4576 msgstr "" 4577 4578 #. translators: 1: number bounced, 2: number sent, 3: bounce rate, 4: the alert threshold 4579 #: pro/includes/class-cybex-smtp-pro-alerts.php:120 4580 msgid "%1$s of %2$s messages sent in the last 24 hours bounced (%3$s%%). The alert is set at %4$s%%." 4581 msgstr "" 4582 4583 #: pro/includes/class-cybex-smtp-pro-alerts.php:127 4584 msgid "Mailbox providers start filtering or refusing a sender whose bounce rate stays high. Usual causes: an old or bought address list, a sign-up form without confirmation, or a typo-prone checkout field." 4585 msgstr "" 4586 4587 #: pro/includes/class-cybex-smtp-pro-alerts.php:128 4588 msgid "See the bounced messages" 4589 msgstr "" 4590 4434 4591 #. translators: 1: number of failures, 2: site name 4435 #: pro/includes/class-cybex-smtp-pro-alerts.php:1 074592 #: pro/includes/class-cybex-smtp-pro-alerts.php:199 4436 4593 msgid "[%1$d email failed] %2$s" 4437 4594 msgid_plural "[%1$d emails failed] %2$s" … … 4439 4596 msgstr[1] "" 4440 4597 4441 #: pro/includes/class-cybex-smtp-pro-alerts.php: 1754598 #: pro/includes/class-cybex-smtp-pro-alerts.php:267 4442 4599 msgid "Email delivery is failing" 4443 4600 msgstr "" 4444 4601 4445 4602 #. translators: 1: number of failures, 2: window in minutes 4446 #: pro/includes/class-cybex-smtp-pro-alerts.php: 1814603 #: pro/includes/class-cybex-smtp-pro-alerts.php:273 4447 4604 msgid "%1$d message failed to send in the last %2$d minutes." 4448 4605 msgid_plural "%1$d messages failed to send in the last %2$d minutes." … … 4450 4607 msgstr[1] "" 4451 4608 4452 #: pro/includes/class-cybex-smtp-pro-alerts.php: 1874609 #: pro/includes/class-cybex-smtp-pro-alerts.php:279 4453 4610 msgid "Latest error" 4454 4611 msgstr "" 4455 4612 4456 #: pro/includes/class-cybex-smtp-pro-alerts.php: 1914613 #: pro/includes/class-cybex-smtp-pro-alerts.php:283 4457 4614 msgid "Recent failures" 4458 4615 msgstr "" 4459 4616 4460 #: pro/includes/class-cybex-smtp-pro-alerts.php: 1954617 #: pro/includes/class-cybex-smtp-pro-alerts.php:287 4461 4618 msgid "Open the email log" 4462 4619 msgstr "" … … 4464 4621 #: pro/includes/class-cybex-smtp-pro-cron.php:63 4465 4622 msgid "Every six hours (Cybexsoft SMTP blocklist check)" 4623 msgstr "" 4624 4625 #. translators: %s: mailer name, e.g. sendgrid 4626 #: pro/includes/class-cybex-smtp-pro-events.php:744 4627 msgid "Delivery event refused (%s)" 4466 4628 msgstr "" 4467 4629 … … 4578 4740 msgstr "" 4579 4741 4742 #: pro/includes/class-cybex-smtp-pro-failures.php:123 4743 msgid "Hard bounce reported by the provider" 4744 msgstr "" 4745 4746 #: pro/includes/class-cybex-smtp-pro-failures.php:147 4747 msgid "spam complaint" 4748 msgstr "" 4749 4750 #: pro/includes/class-cybex-smtp-pro-failures.php:149 4751 msgid "Blocked automatically after a spam complaint." 4752 msgstr "" 4753 4580 4754 #. translators: 1: number of failures, 2: the last error reported 4581 #: pro/includes/class-cybex-smtp-pro-failures.php: 1694755 #: pro/includes/class-cybex-smtp-pro-failures.php:249 4582 4756 msgid "Blocked automatically after %1$d failed deliveries. Last error: %2$s" 4583 4757 msgstr "" 4584 4758 4585 4759 #. translators: %d: number of failed deliveries 4586 #: pro/includes/class-cybex-smtp-pro-failures.php: 1824760 #: pro/includes/class-cybex-smtp-pro-failures.php:262 4587 4761 msgid "Auto-blocked after %d bounces" 4588 4762 msgstr "" … … 4624 4798 msgstr "" 4625 4799 4626 #: pro/includes/class-cybex-smtp-pro-modules.php:3 334800 #: pro/includes/class-cybex-smtp-pro-modules.php:343 4627 4801 msgid "Postmark gives you the DKIM record under Sender Signatures once you add the domain." 4628 4802 msgstr "" 4629 4803 4630 #: pro/includes/class-cybex-smtp-pro-modules.php:3 374804 #: pro/includes/class-cybex-smtp-pro-modules.php:347 4631 4805 msgid "Resend shows the DKIM and SPF records to publish when you add the domain under Domains." 4632 4806 msgstr "" 4633 4807 4634 #: pro/includes/class-cybex-smtp-pro-modules.php:3 414808 #: pro/includes/class-cybex-smtp-pro-modules.php:351 4635 4809 msgid "MailerSend lists the DKIM record on the domain's page under Domains once it is added." 4636 4810 msgstr "" 4637 4811 4638 #: pro/includes/class-cybex-smtp-pro-modules.php:3 454812 #: pro/includes/class-cybex-smtp-pro-modules.php:355 4639 4813 msgid "Mailjet publishes the DKIM record under Account settings → Sender domains & addresses." 4640 4814 msgstr "" 4641 4815 4642 #: pro/includes/class-cybex-smtp-pro-modules.php:3 494816 #: pro/includes/class-cybex-smtp-pro-modules.php:359 4643 4817 msgid "Elastic Email gives you the DKIM record under Settings → Domains after you add the domain." 4644 4818 msgstr "" 4645 4819 4646 #: pro/includes/class-cybex-smtp-pro-modules.php:3 534820 #: pro/includes/class-cybex-smtp-pro-modules.php:363 4647 4821 msgid "ZeptoMail issues the DKIM selector under Domains when you verify the domain. The record differs by data centre." 4648 4822 msgstr "" 4649 4823 4650 #: pro/includes/class-cybex-smtp-pro-modules.php:3 574824 #: pro/includes/class-cybex-smtp-pro-modules.php:367 4651 4825 msgid "Google Workspace generates the DKIM key under Apps → Google Workspace → Gmail → Authenticate email." 4652 4826 msgstr "" 4653 4827 4654 #: pro/includes/class-cybex-smtp-pro-modules.php:3 614828 #: pro/includes/class-cybex-smtp-pro-modules.php:371 4655 4829 msgid "Microsoft 365 publishes two DKIM CNAMEs; enable them in the Defender portal under Email authentication settings." 4656 4830 msgstr "" 4657 4831 4658 #: pro/includes/class-cybex-smtp-pro-modules.php:3 734832 #: pro/includes/class-cybex-smtp-pro-modules.php:383 4659 4833 msgid "Outlook / Microsoft 365" 4660 4834 msgstr "" … … 4862 5036 msgstr "" 4863 5037 4864 #: pro/includes/class-cybex-smtp-pro-reports.php:1 285038 #: pro/includes/class-cybex-smtp-pro-reports.php:130 4865 5039 msgid "not tracked" 4866 5040 msgstr "" 4867 5041 4868 #: pro/includes/class-cybex-smtp-pro-reports.php:136 5042 #: pro/includes/class-cybex-smtp-pro-reports.php:135 5043 msgid "Accepted by your provider" 5044 msgstr "" 5045 5046 #: pro/includes/class-cybex-smtp-pro-reports.php:146 5047 msgid "Delivered (confirmed by the provider)" 5048 msgstr "" 5049 5050 #: pro/includes/class-cybex-smtp-pro-reports.php:148 5051 msgid "Spam complaints" 5052 msgstr "" 5053 5054 #: pro/includes/class-cybex-smtp-pro-reports.php:152 4869 5055 msgid "Click rate" 4870 5056 msgstr "" 4871 5057 4872 #: pro/includes/class-cybex-smtp-pro-reports.php:1 405058 #: pro/includes/class-cybex-smtp-pro-reports.php:155 4873 5059 msgid "Your week in email" 4874 5060 msgstr "" 4875 5061 4876 5062 #. translators: 1: site name, 2: start date, 3: end date 4877 #: pro/includes/class-cybex-smtp-pro-reports.php:1 445063 #: pro/includes/class-cybex-smtp-pro-reports.php:159 4878 5064 msgid "%1$s · %2$s to %3$s" 4879 5065 msgstr "" 4880 5066 4881 #: pro/includes/class-cybex-smtp-pro-reports.php:1 625067 #: pro/includes/class-cybex-smtp-pro-reports.php:177 4882 5068 msgid "Most clicked links" 4883 5069 msgstr "" 4884 5070 4885 5071 #. translators: %s: number of clicks 4886 #: pro/includes/class-cybex-smtp-pro-reports.php:1 715072 #: pro/includes/class-cybex-smtp-pro-reports.php:186 4887 5073 msgid "%s click" 4888 5074 msgid_plural "%s clicks" … … 4890 5076 msgstr[1] "" 4891 5077 4892 #: pro/includes/class-cybex-smtp-pro-reports.php:1 815078 #: pro/includes/class-cybex-smtp-pro-reports.php:196 4893 5079 msgid "Most common errors" 4894 5080 msgstr "" 4895 5081 4896 #: pro/includes/class-cybex-smtp-pro-reports.php: 1945082 #: pro/includes/class-cybex-smtp-pro-reports.php:209 4897 5083 msgid "Addresses blocked automatically" 4898 5084 msgstr "" 4899 5085 4900 #: pro/includes/class-cybex-smtp-pro-reports.php: 1955086 #: pro/includes/class-cybex-smtp-pro-reports.php:210 4901 5087 msgid "These kept bouncing, so this site has stopped emailing them. Remove any that should not be there under Cybexsoft SMTP → Pro → Recipients." 4902 5088 msgstr "" 4903 5089 4904 #: pro/includes/class-cybex-smtp-pro-reports.php:2 075090 #: pro/includes/class-cybex-smtp-pro-reports.php:222 4905 5091 msgid "Open the dashboard" 4906 5092 msgstr "" 4907 5093 4908 #: pro/includes/class-cybex-smtp-pro-reports.php:2 085094 #: pro/includes/class-cybex-smtp-pro-reports.php:223 4909 5095 msgid "Sent by Cybexsoft SMTP Pro. Change the schedule or turn this off under Cybexsoft SMTP → Pro." 4910 5096 msgstr "" -
cybexsoft-smtp/tags/1.0.7/readme.txt
r3732590 r3733698 5 5 Tested up to: 7.1 6 6 Requires PHP: 7.4 7 Stable tag: 1.0. 67 Stable tag: 1.0.7 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 200 200 == Changelog == 201 201 202 = 1.0.7 = 203 * New: the email log has delivery statuses — Delivered, Deferred, Bounced and Spam complaint — for messages your provider reports on after accepting them. Reports are received by Cybexsoft SMTP Pro's delivery events, from Amazon SES, SendGrid, Mailgun, Brevo, SMTP2GO, Postmark, Resend, MailerSend, Mailjet, Elastic Email and ZeptoMail; the log filters for these statuses appear once there is mail to show. 204 * Change: a message your provider accepted is now labelled "Sent" instead of "Delivered". Acceptance is all a send can confirm; "Delivered" is kept for mail the provider says reached the mailbox. The dashboard's 30-day rate card now reads "Accepted". 205 * Change: messages sent through SendGrid, Mailgun and Brevo carry their log token in the provider's own tag field, so the provider's reports can be matched to the right log entry. 206 * Developers: two new hooks, `cybex_smtp/dashboard/accepted_stat_after` and the `cybex_smtp/log/email_meta_after` filter, for add-ons to show delivery information on the dashboard and in the message viewer. 207 202 208 = 1.0.6 = 203 209 * New: a "Rate ★★★★★" link under the plugin's description on the Plugins screen, and one line at the foot of the plugin's own pages linking to the WordPress.org review form. No pop-ups or admin notices. … … 240 246 == Upgrade Notice == 241 247 248 = 1.0.7 = 249 Mail your provider accepted is now labelled "Sent"; "Delivered", "Bounced" and "Spam complaint" appear when your provider reports back. 250 242 251 = 1.0.6 = 243 252 Adds a link to rate the plugin on WordPress.org. No other changes. -
cybexsoft-smtp/trunk/admin/css/admin.css
r3732590 r3733698 818 818 background: var(--cybex-red-bg-2); 819 819 } 820 /* Confirmed by the provider: the one status that is more than "it was taken". */ 821 .cybex-status-pill.is-delivered { 822 color: var(--cybex-green-dark); 823 background: var(--cybex-green-bg); 824 box-shadow: inset 0 0 0 1px var(--cybex-green-line); 825 } 826 /* Still the provider's to deliver: not good yet, not a failure either. */ 827 .cybex-status-pill.is-deferred { 828 color: var(--cybex-amber); 829 background: var(--cybex-amber-bg); 830 } 820 831 /* Deliberately not red: nothing went wrong, the site chose not to send. */ 821 832 .cybex-status-pill.is-blocked { … … 4202 4213 height: 17px; 4203 4214 } 4215 4216 /* Pro: the provider's reports about one message, in the log viewer. */ 4217 .cybex-delivery-timeline ol { 4218 margin: 0; 4219 padding: 0; 4220 list-style: none; 4221 } 4222 .cybex-delivery-timeline li { 4223 padding: 4px 0; 4224 } 4225 .cybex-delivery-timeline li + li { 4226 border-top: 1px solid var(--cybex-neutral-bg); 4227 } 4228 .cybex-timeline-time, 4229 .cybex-timeline-detail { 4230 color: var(--cybex-muted-2); 4231 font-size: var(--cybex-fs-sm); 4232 } 4233 .cybex-timeline-detail { 4234 margin-top: 2px; 4235 word-break: break-word; 4236 } 4237 .cybex-delivery-rates { 4238 margin-top: 4px; 4239 } -
cybexsoft-smtp/trunk/admin/views/tab-dashboard.php
r3727515 r3733698 241 241 <?php 242 242 printf( 243 /* translators: 1: delivered count, 2: failed count */244 esc_html__( '%1$s delivered· %2$s failed', 'cybexsoft-smtp' ),243 /* translators: 1: count of messages the provider accepted, 2: failed count */ 244 esc_html__( '%1$s sent · %2$s failed', 'cybexsoft-smtp' ), 245 245 esc_html( number_format_i18n( $summary['sent'] ) ), 246 246 esc_html( number_format_i18n( $summary['failed'] ) ) … … 250 250 </div> 251 251 <div class="cybex-card cybex-stat"> 252 <div class="cybex-stat-top"><span><?php esc_html_e( ' Delivered · 30d', 'cybexsoft-smtp' ); ?></span></div>252 <div class="cybex-stat-top"><span><?php esc_html_e( 'Accepted · 30d', 'cybexsoft-smtp' ); ?></span></div> 253 253 <div class="cybex-stat-value"><?php echo $summary['total'] ? esc_html( number_format_i18n( $summary['delivered_pct'], 1 ) . '%' ) : '—'; ?></div> 254 254 <?php if ( ! $summary['has_prior'] ) : ?> … … 257 257 <div class="cybex-stat-delta <?php echo $summary['delivered_delta'] >= 0 ? 'is-good' : 'is-bad'; ?>"><?php echo esc_html( $delta_arrow( $summary['delivered_delta'] ) . ' ' . __( 'pts vs previous 30 days', 'cybexsoft-smtp' ) ); ?></div> 258 258 <?php endif; ?> 259 <?php 260 /** 261 * Below the acceptance rate: room for what happened after acceptance, 262 * which an add-on receiving the provider's reports can say. 263 */ 264 do_action( 'cybex_smtp/dashboard/accepted_stat_after' ); 265 ?> 259 266 </div> 260 267 <div class="cybex-card cybex-stat"> … … 289 296 <div class="cybex-card-title"><?php esc_html_e( 'Email volume · last 14 days', 'cybexsoft-smtp' ); ?></div> 290 297 <div class="cybex-chart-legend"> 291 <span><span class="cybex-swatch is-ok"></span><?php esc_html_e( ' Delivered', 'cybexsoft-smtp' ); ?></span>298 <span><span class="cybex-swatch is-ok"></span><?php esc_html_e( 'Sent', 'cybexsoft-smtp' ); ?></span> 292 299 <span><span class="cybex-swatch is-fail"></span><?php esc_html_e( 'Failed', 'cybexsoft-smtp' ); ?></span> 293 300 </div> … … 299 306 data-ok="<?php echo esc_attr( $d['ok'] ); ?>" 300 307 data-fail="<?php echo esc_attr( $d['fail'] ); ?>" 301 aria-label="<?php echo esc_attr( $d['date'] . ': ' . $d['ok'] . ' delivered, ' . $d['fail'] . ' failed' ); ?>">308 aria-label="<?php echo esc_attr( $d['date'] . ': ' . $d['ok'] . ' sent, ' . $d['fail'] . ' failed' ); ?>"> 302 309 <div class="cybex-bar-fail" style="height:<?php echo esc_attr( round( $d['fail'] * $scale ) ); ?>px"></div> 303 310 <div class="cybex-bar-ok" style="height:<?php echo esc_attr( max( 1, round( $d['ok'] * $scale ) ) ); ?>px"></div> -
cybexsoft-smtp/trunk/admin/views/tab-log.php
r3726993 r3733698 31 31 $filters = array( 32 32 'all' => __( 'All', 'cybexsoft-smtp' ), 33 'sent' => __( ' Delivered', 'cybexsoft-smtp' ),33 'sent' => __( 'Sent', 'cybexsoft-smtp' ), 34 34 'failed' => __( 'Failed', 'cybexsoft-smtp' ), 35 35 ); 36 36 37 // Nothing writes this status until an add-on suppresses a message, so the 38 // filter only appears on sites where there is something behind it. 39 if ( $counts['blocked'] > 0 ) { 40 $filters['blocked'] = __( 'Blocked', 'cybexsoft-smtp' ); 37 /* 38 * The rest only appear on sites with something behind them: the delivery 39 * statuses need a provider reporting back, and blocked needs the block list. 40 * Labels come from the logger, so a filter reads the same as the pills. 41 */ 42 foreach ( array( 'delivered', 'deferred', 'bounced', 'complained', 'blocked' ) as $optional_status ) { 43 if ( ! empty( $counts[ $optional_status ] ) ) { 44 $filters[ $optional_status ] = Cybex_SMTP_Logger::status_label( $optional_status ); 45 } 41 46 } 42 47 -
cybexsoft-smtp/trunk/admin/views/tab-settings.php
r3696103 r3733698 311 311 <?php esc_html_e( 'Delete failed only', 'cybexsoft-smtp' ); ?> 312 312 </button> 313 <button type="submit" name="scope" value="sent" class="button" onclick="return confirm('<?php echo esc_js( __( 'Delete all deliveredlog entries?', 'cybexsoft-smtp' ) ); ?>');">314 <?php esc_html_e( 'Delete deliveredonly', 'cybexsoft-smtp' ); ?>313 <button type="submit" name="scope" value="sent" class="button" onclick="return confirm('<?php echo esc_js( __( 'Delete all sent log entries?', 'cybexsoft-smtp' ) ); ?>');"> 314 <?php esc_html_e( 'Delete sent only', 'cybexsoft-smtp' ); ?> 315 315 </button> 316 316 </form> -
cybexsoft-smtp/trunk/cybexsoft-smtp.php
r3732590 r3733698 4 4 * Plugin URI: https://cybexsoft.com/products/wordpress/plugins/cybexsoft-smtp 5 5 * Description: Reliable transactional email for WordPress. Connect a real mailer, log every message, retry what fails, and diagnose deliverability issues. 6 * Version: 1.0. 66 * Version: 1.0.7 7 7 * Requires at least: 5.5 8 8 * Requires PHP: 7.4 … … 19 19 } 20 20 21 define( 'CYBEX_SMTP_VERSION', '1.0. 6' );21 define( 'CYBEX_SMTP_VERSION', '1.0.7' ); 22 22 /* 23 23 * The shipped schema, versioned separately from the plugin: a release that -
cybexsoft-smtp/trunk/includes/class-cybex-smtp-admin.php
r3732590 r3733698 259 259 'invalidDomain' => __( 'That does not look like a domain name. Enter just the domain, e.g. example.com.', 'cybexsoft-smtp' ), 260 260 'genericError' => __( 'Something went wrong. Please try again.', 'cybexsoft-smtp' ), 261 'delivered' => __( ' delivered', 'cybexsoft-smtp' ),261 'delivered' => __( 'sent', 'cybexsoft-smtp' ), 262 262 'failed' => __( 'failed', 'cybexsoft-smtp' ), 263 263 'sendingRequest' => __( 'Sending request…', 'cybexsoft-smtp' ), -
cybexsoft-smtp/trunk/includes/class-cybex-smtp-ajax.php
r3696103 r3733698 313 313 } 314 314 315 /** 316 * Extra markup for the metadata panel, after the status and error. 317 * Cybexsoft SMTP Pro uses it for the provider's delivery timeline. 318 * Returned as HTML and printed as-is: escape everything in it. 319 * 320 * @param string $html 321 * @param array $row The log row. 322 */ 323 $html .= (string) apply_filters( 'cybex_smtp/log/email_meta_after', '', $row ); 324 315 325 if ( ! empty( $row['headers'] ) ) { 316 326 $html .= sprintf( -
cybexsoft-smtp/trunk/includes/class-cybex-smtp-logger.php
r3727515 r3733698 33 33 public static function statuses() { 34 34 $statuses = array( 35 'sent' => array( 35 /* 36 * "Sent", not "Delivered": all a send can know is that the provider 37 * took the message. Whether it reached the mailbox is what the 38 * delivery statuses below say, once a provider reports back. 39 */ 40 'sent' => array( 41 'label' => __( 'Sent', 'cybexsoft-smtp' ), 42 'class' => 'is-sent', 43 ), 44 'delivered' => array( 36 45 'label' => __( 'Delivered', 'cybexsoft-smtp' ), 37 'class' => 'is-sent', 38 ), 39 'failed' => array( 46 'class' => 'is-delivered', 47 ), 48 'deferred' => array( 49 'label' => __( 'Deferred', 'cybexsoft-smtp' ), 50 'class' => 'is-deferred', 51 ), 52 'bounced' => array( 53 'label' => __( 'Bounced', 'cybexsoft-smtp' ), 54 'class' => 'is-failed', 55 ), 56 'complained' => array( 57 'label' => __( 'Spam complaint', 'cybexsoft-smtp' ), 58 'class' => 'is-failed', 59 ), 60 'failed' => array( 40 61 'label' => __( 'Failed', 'cybexsoft-smtp' ), 41 62 'class' => 'is-failed', 42 63 ), 43 'blocked' => array(64 'blocked' => array( 44 65 'label' => __( 'Blocked', 'cybexsoft-smtp' ), 45 66 'class' => 'is-blocked', … … 56 77 57 78 /** 79 * Statuses of a message the provider took. 80 * 81 * `deferred` is still in the provider's hands and `complained` reached the 82 * mailbox -- the recipient had to read it to complain -- so both count as 83 * accepted. `bounced` is in neither list on its own: it was accepted, then 84 * failed, and each count below says which side it lands on. 85 * 86 * @return string[] 87 */ 88 public static function accepted_statuses() { 89 return array( 'sent', 'delivered', 'deferred', 'complained' ); 90 } 91 92 /** 93 * What a provider's report about a message may change its status to, or 94 * null to leave it alone. 95 * 96 * Reports arrive out of order and more than once, so the status only ever 97 * moves forward: a late "deferred" must not undo "delivered", and nothing 98 * undoes a bounce or a complaint. A message the provider never took -- 99 * failed or blocked -- has nothing to report about and stays as it is. 100 * 101 * @param string $current The stored status. 102 * @param string $incoming delivered|deferred|bounced|complained. 103 * @return string|null 104 */ 105 public static function next_status( $current, $incoming ) { 106 $rank = array( 107 'sent' => 1, 108 'deferred' => 2, 109 'delivered' => 3, 110 'bounced' => 4, 111 'complained' => 5, 112 ); 113 114 if ( ! isset( $rank[ $current ], $rank[ $incoming ] ) || 'sent' === $incoming ) { 115 return null; 116 } 117 118 return $rank[ $incoming ] > $rank[ $current ] ? $incoming : null; 119 } 120 121 /** 122 * The given statuses as a quoted SQL list. Only ever called with the 123 * literal lists above, never with anything a request supplied. 124 * 125 * @param string[] $statuses 126 * @return string 127 */ 128 private static function sql_list( array $statuses ) { 129 return "'" . implode( "','", array_map( 'sanitize_key', $statuses ) ) . "'"; 130 } 131 132 /** 58 133 * Human label for a stored status. Anything unrecognised is reported as a 59 134 * failure, which is what an unknown status meant before this map existed. … … 78 153 * @type string $from 79 154 * @type string $subject 80 * @type string $status 'sent'|'failed' 155 * @type string $status 'sent'|'failed'|'blocked'; the delivery statuses are only ever set later, by apply_delivery_status() 81 156 * @type string $mailer 82 157 * @type string $error … … 232 307 233 308 /** 309 * The log row a provider's report is about, or null. 310 * 311 * The provider id is tried first: it is what every report carries. The 312 * token is the fallback for a report that only quotes our own tag or 313 * Message-ID. Latest row first, should more than one carry it: a failover 314 * can log the same message twice, and the report is about the send that 315 * the provider took. 316 * 317 * @param string $provider_id 318 * @param string $token 319 * @return array|null { id, status } 320 */ 321 public function find_for_event( $provider_id, $token ) { 322 global $wpdb; 323 324 $provider_id = Cybex_SMTP_Send_Context::clean_provider_id( $provider_id ); 325 $token = preg_match( '/^[a-f0-9]{32}$/', (string) $token ) ? (string) $token : ''; 326 $table = Cybex_SMTP_DB::table_name(); 327 328 if ( '' !== $provider_id ) { 329 $row = $wpdb->get_row( 330 $wpdb->prepare( "SELECT id, status FROM {$table} WHERE provider_id = %s ORDER BY id DESC LIMIT 1", $provider_id ), // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared 331 ARRAY_A 332 ); 333 334 if ( $row ) { 335 return $row; 336 } 337 } 338 339 if ( '' !== $token ) { 340 $row = $wpdb->get_row( 341 $wpdb->prepare( "SELECT id, status FROM {$table} WHERE token = %s ORDER BY id DESC LIMIT 1", $token ), // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared 342 ARRAY_A 343 ); 344 345 if ( $row ) { 346 return $row; 347 } 348 } 349 350 return null; 351 } 352 353 /** 354 * Moves a row to what a provider reported about it, if that is a step 355 * forward -- see next_status(). 356 * 357 * @param int $id 358 * @param string $current The row's stored status, as find_for_event() read it. 359 * @param string $status delivered|deferred|bounced|complained. 360 * @param string $detail The provider's reason, kept as the row's error. 361 * @return string|null The status written, or null when nothing changed. 362 */ 363 public function apply_delivery_status( $id, $current, $status, $detail = '' ) { 364 global $wpdb; 365 366 $next = self::next_status( (string) $current, (string) $status ); 367 368 if ( null === $next ) { 369 return null; 370 } 371 372 $values = array( 'status' => $next ); 373 $formats = array( '%s' ); 374 375 // Delivery says nothing went wrong, so it keeps whatever is there. 376 if ( 'delivered' !== $next && '' !== (string) $detail ) { 377 $values['error_message'] = substr( wp_strip_all_tags( (string) $detail ), 0, 1000 ); 378 $formats[] = '%s'; 379 } 380 381 $wpdb->update( Cybex_SMTP_DB::table_name(), $values, array( 'id' => (int) $id ), $formats, array( '%d' ) ); 382 383 return $next; 384 } 385 386 /** 234 387 * Every row matching the current filters, uncapped except for a hard 235 388 * safety ceiling -- used for CSV export. … … 250 403 251 404 $counts = array( 252 'all' => 0, 253 'sent' => 0, 254 'failed' => 0, 255 'blocked' => 0, 256 'pending' => 0, 405 'all' => 0, 406 'sent' => 0, 407 'delivered' => 0, 408 'deferred' => 0, 409 'bounced' => 0, 410 'complained' => 0, 411 'failed' => 0, 412 'blocked' => 0, 413 'pending' => 0, 257 414 ); 258 415 … … 334 491 * memory. 335 492 * 493 * A bounce reported later by the provider is the same kind of failure, the 494 * recipient's, and is left out of both halves for the same reason. 495 * 336 496 * @param int $days 337 497 * @return array[] Keyed by mailer id: accepted, refused, total, rate|null. … … 365 525 $params[] = $since; 366 526 527 $accepted = self::sql_list( self::accepted_statuses() ); 528 367 529 $rows = (array) $wpdb->get_results( 368 530 $wpdb->prepare( … … 370 532 "SELECT 371 533 mailer, 372 SUM(CASE WHEN status = 'sent'THEN 1 ELSE 0 END) AS accepted,534 SUM(CASE WHEN status IN ({$accepted}) THEN 1 ELSE 0 END) AS accepted, 373 535 SUM(CASE WHEN status = 'failed' THEN 1 ELSE 0 END) AS refused, 374 536 SUM(CASE WHEN status = 'failed' AND ( {$fault_sql} ) THEN 1 ELSE 0 END) AS recipient_faults … … 408 570 $start = gmdate( 'Y-m-d H:i:s', strtotime( $end_datetime ) - ( $days * DAY_IN_SECONDS ) ); 409 571 572 $accepted = self::sql_list( self::accepted_statuses() ); 573 410 574 // Blocked messages were never handed to a mailer, so counting them would 411 575 // drag the delivery rate down for mail the site deliberately suppressed. 576 // A bounce was accepted and then failed; the failure is what counts. 412 577 $row = $wpdb->get_row( 413 578 $wpdb->prepare( 414 579 "SELECT 415 580 COUNT(*) as total, 416 SUM(CASE WHEN status = 'sent'THEN 1 ELSE 0 END) as sent,417 SUM(CASE WHEN status = 'failed'THEN 1 ELSE 0 END) as failed581 SUM(CASE WHEN status IN ({$accepted}) THEN 1 ELSE 0 END) as sent, 582 SUM(CASE WHEN status IN ('failed','bounced') THEN 1 ELSE 0 END) as failed 418 583 FROM {$table} WHERE status <> 'blocked' AND time_sent BETWEEN %s AND %s", 419 584 $start, … … 447 612 $since = gmdate( 'Y-m-d', current_time( 'timestamp' ) - ( ( $days - 1 ) * DAY_IN_SECONDS ) ); 448 613 614 $accepted = self::sql_list( self::accepted_statuses() ); 615 449 616 $results = $wpdb->get_results( 450 617 $wpdb->prepare( 451 618 "SELECT DATE(time_sent) as d, 452 SUM(CASE WHEN status = 'sent'THEN 1 ELSE 0 END) as ok,453 SUM(CASE WHEN status = 'failed'THEN 1 ELSE 0 END) as fail619 SUM(CASE WHEN status IN ({$accepted}) THEN 1 ELSE 0 END) as ok, 620 SUM(CASE WHEN status IN ('failed','bounced') THEN 1 ELSE 0 END) as fail 454 621 FROM {$table} 455 622 WHERE time_sent >= %s … … 505 672 506 673 /** 507 * Deletes only the log rows matching the given status ( 'sent' or508 * 'failed'). Returns the number of rows removed, or false on an674 * Deletes only the log rows matching the given status (any of 675 * statuses()). Returns the number of rows removed, or false on an 509 676 * invalid status. 510 677 */ -
cybexsoft-smtp/trunk/includes/class-cybex-smtp-privacy.php
r3696103 r3733698 224 224 225 225 /** 226 * Erases Pro's archived messages for the address, and the open/click227 * event rows attached to them.226 * Erases Pro's archived messages for the address, the open/click event 227 * rows attached to them, and the delivery events reported for it. 228 228 * 229 229 * @param string $like Prepared LIKE pattern. … … 250 250 ); 251 251 252 // What providers reported per recipient. Checked for, because the 253 // add-on is updated separately and an older one has no such table. 254 if ( method_exists( 'Cybex_SMTP_Pro_DB', 'delivery_table' ) ) { 255 $delivery = Cybex_SMTP_Pro_DB::delivery_table(); 256 257 $removed += (int) $wpdb->query( 258 $wpdb->prepare( "DELETE FROM {$delivery} WHERE recipient LIKE %s", $like ) // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared 259 ); 260 } 261 252 262 return $removed; 253 263 } -
cybexsoft-smtp/trunk/includes/class-cybex-smtp-send-context.php
r3726993 r3733698 34 34 35 35 /** 36 * The name the token goes under in a provider's own tagging field -- 37 * SendGrid's `custom_args`, Mailgun's `v:` variables -- for the API 38 * mailers, which do not send our Message-ID. Some providers copy these 39 * into a header the recipient can read, so it names nothing but itself. 40 */ 41 const PROVIDER_TAG = 'message_token'; 42 43 /** 36 44 * Nesting depth of internal sends. A counter rather than a flag because 37 45 * these do nest: an alert about a failure can itself fail. -
cybexsoft-smtp/trunk/includes/mailers/class-mailer-brevo.php
r3726993 r3733698 69 69 70 70 $headers = $this->custom_header_map(); 71 72 // Brevo returns this header's value as `X-Mailin-custom` on every 73 // webhook about the message. 74 $token = Cybex_SMTP_Send_Context::token(); 75 if ( '' !== $token ) { 76 $headers['X-Mailin-custom'] = $token; 77 } 78 71 79 if ( $headers ) { 72 80 $payload['headers'] = $headers; -
cybexsoft-smtp/trunk/includes/mailers/class-mailer-mailgun.php
r3726993 r3733698 82 82 } 83 83 84 // Comes back as `user-variables` on every event Mailgun reports. 85 $token = Cybex_SMTP_Send_Context::token(); 86 87 if ( '' !== $token ) { 88 $fields[ 'v:' . Cybex_SMTP_Send_Context::PROVIDER_TAG ] = $token; 89 } 90 84 91 $files = array(); 85 92 foreach ( $this->attachments as $i => $path ) { -
cybexsoft-smtp/trunk/includes/mailers/class-mailer-sendgrid.php
r3726993 r3733698 88 88 } 89 89 90 // Comes back on every event SendGrid reports about the message. 91 $token = Cybex_SMTP_Send_Context::token(); 92 93 if ( '' !== $token ) { 94 $payload['custom_args'] = array( Cybex_SMTP_Send_Context::PROVIDER_TAG => $token ); 95 } 96 90 97 if ( ! empty( $this->custom_headers ) ) { 91 98 $headers = array(); -
cybexsoft-smtp/trunk/languages/cybexsoft-smtp.pot
r3732590 r3733698 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: Cybexsoft SMTP 1.0. 6\n"5 "Project-Id-Version: Cybexsoft SMTP 1.0.7\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/cybexsoft-smtp\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2026-10-0 7T12:30:54+00:00\n"12 "POT-Creation-Date: 2026-10-08T05:04:44+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "Plural-Forms: nplurals=2; plural=(n != 1);\n" … … 50 50 #: admin/views/partial-lists-manage.php:259 51 51 #: admin/views/partial-mailer-list.php:81 52 #: admin/views/tab-dashboard.php:2 7953 #: admin/views/tab-dashboard.php:3 7754 #: admin/views/tab-dashboard.php: 39555 #: admin/views/tab-dashboard.php: 39652 #: admin/views/tab-dashboard.php:286 53 #: admin/views/tab-dashboard.php:384 54 #: admin/views/tab-dashboard.php:402 55 #: admin/views/tab-dashboard.php:403 56 56 #: admin/views/tab-deliver.php:354 57 #: admin/views/tab-log.php:1 2958 #: admin/views/tab-log.php:13 057 #: admin/views/tab-log.php:134 58 #: admin/views/tab-log.php:135 59 59 #: admin/views/tab-settings.php:76 60 60 #: admin/views/tab-settings.php:164 … … 98 98 99 99 #: admin/views/header.php:50 100 #: admin/views/tab-dashboard.php:43 2100 #: admin/views/tab-dashboard.php:439 101 101 #: includes/class-cybex-smtp-plugins-screen.php:79 102 102 msgid "Get Pro for Free" … … 207 207 208 208 #: admin/views/header.php:173 209 #: pro/includes/class-cybex-smtp-pro-admin.php:1 69209 #: pro/includes/class-cybex-smtp-pro-admin.php:171 210 210 msgid "License activated." 211 211 msgstr "" … … 303 303 #: admin/views/modal-email-content.php:28 304 304 #: includes/class-cybex-smtp-admin.php:267 305 #: pro/includes/class-cybex-smtp-pro-admin.php:3 19305 #: pro/includes/class-cybex-smtp-pro-admin.php:321 306 306 msgid "Loading…" 307 307 msgstr "" 308 308 309 309 #: admin/views/modal-get-pro.php:23 310 #: admin/views/tab-dashboard.php:4 29310 #: admin/views/tab-dashboard.php:436 311 311 msgid "Get Cybexsoft SMTP Pro — free" 312 312 msgstr "" … … 483 483 484 484 #: admin/views/modal-wizard.php:301 485 #: admin/views/tab-dashboard.php:3 37485 #: admin/views/tab-dashboard.php:344 486 486 #: includes/class-cybex-smtp-notices.php:185 487 487 msgid "Send a test email" … … 788 788 789 789 #: admin/views/partial-lists-manage.php:462 790 #: admin/views/tab-log.php:11 2790 #: admin/views/tab-log.php:117 791 791 msgid "Clear selection" 792 792 msgstr "" … … 817 817 818 818 #: admin/views/partial-lists-manage.php:478 819 #: admin/views/tab-log.php:13 2819 #: admin/views/tab-log.php:137 820 820 msgid "Actions" 821 821 msgstr "" … … 841 841 #. translators: %s: email subject 842 842 #: admin/views/partial-lists-manage.php:514 843 #: admin/views/tab-log.php:1 68843 #: admin/views/tab-log.php:173 844 844 msgid "Select %s" 845 845 msgstr "" … … 871 871 872 872 #: admin/views/partial-lists-manage.php:580 873 #: admin/views/tab-log.php:27 0873 #: admin/views/tab-log.php:275 874 874 msgid "Prev" 875 875 msgstr "" 876 876 877 877 #: admin/views/partial-lists-manage.php:586 878 #: admin/views/tab-log.php:28 0878 #: admin/views/tab-log.php:285 879 879 msgid "Next" 880 880 msgstr "" … … 933 933 934 934 #: admin/views/partial-lists-manage.php:664 935 #: admin/views/tab-log.php:9 2935 #: admin/views/tab-log.php:97 936 936 msgid "Export CSV" 937 937 msgstr "" … … 1175 1175 #: admin/views/tab-dashboard.php:39 1176 1176 #: admin/views/tab-deliver.php:88 1177 #: includes/class-cybex-smtp-ajax.php:4 781177 #: includes/class-cybex-smtp-ajax.php:488 1178 1178 msgid "Pass" 1179 1179 msgstr "" 1180 1180 1181 1181 #: admin/views/tab-dashboard.php:40 1182 #: includes/class-cybex-smtp-ajax.php:4 791182 #: includes/class-cybex-smtp-ajax.php:489 1183 1183 msgid "Monitor" 1184 1184 msgstr "" … … 1187 1187 #: admin/views/tab-deliver.php:90 1188 1188 #: admin/views/tab-deliver.php:318 1189 #: includes/class-cybex-smtp-ajax.php:4 801189 #: includes/class-cybex-smtp-ajax.php:490 1190 1190 msgid "Missing" 1191 1191 msgstr "" … … 1193 1193 #: admin/views/tab-dashboard.php:42 1194 1194 #: admin/views/tab-deliver.php:91 1195 #: includes/class-cybex-smtp-ajax.php:4 811195 #: includes/class-cybex-smtp-ajax.php:491 1196 1196 msgid "Not set up" 1197 1197 msgstr "" … … 1244 1244 1245 1245 #: admin/views/tab-dashboard.php:143 1246 #: admin/views/tab-log.php:1 451246 #: admin/views/tab-log.php:150 1247 1247 #: admin/views/tab-tools.php:96 1248 1248 #: includes/class-cybex-smtp-ajax.php:261 … … 1312 1312 msgstr "" 1313 1313 1314 #. translators: 1: delivered count, 2: failed count1314 #. translators: 1: count of messages the provider accepted, 2: failed count 1315 1315 #: admin/views/tab-dashboard.php:244 1316 msgid "%1$s delivered· %2$s failed"1316 msgid "%1$s sent · %2$s failed" 1317 1317 msgstr "" 1318 1318 1319 1319 #: admin/views/tab-dashboard.php:252 1320 msgid " Delivered · 30d"1320 msgid "Accepted · 30d" 1321 1321 msgstr "" 1322 1322 … … 1325 1325 msgstr "" 1326 1326 1327 #: admin/views/tab-dashboard.php:26 11327 #: admin/views/tab-dashboard.php:268 1328 1328 msgid "Failed · 30d" 1329 1329 msgstr "" 1330 1330 1331 #: admin/views/tab-dashboard.php:2 661331 #: admin/views/tab-dashboard.php:273 1332 1332 msgid "vs previous 30 days" 1333 1333 msgstr "" 1334 1334 1335 #: admin/views/tab-dashboard.php:2 791336 #: pro/includes/class-cybex-smtp-pro-reports.php:1 351335 #: admin/views/tab-dashboard.php:286 1336 #: pro/includes/class-cybex-smtp-pro-reports.php:151 1337 1337 msgid "Open rate" 1338 1338 msgstr "" 1339 1339 1340 #: admin/views/tab-dashboard.php:28 11340 #: admin/views/tab-dashboard.php:288 1341 1341 msgid "Install & activate Pro" 1342 1342 msgstr "" 1343 1343 1344 #: admin/views/tab-dashboard.php:2 891344 #: admin/views/tab-dashboard.php:296 1345 1345 msgid "Email volume · last 14 days" 1346 1346 msgstr "" 1347 1347 1348 #: admin/views/tab-dashboard.php:29 11349 #: admin/views/tab-dashboard.php: 3381348 #: admin/views/tab-dashboard.php:298 1349 #: admin/views/tab-dashboard.php:401 1350 1350 #: admin/views/tab-log.php:33 1351 #: includes/class-cybex-smtp-logger.php:36 1352 #: pro/admin/views/view-message.php:52 1353 #: pro/includes/class-cybex-smtp-pro-reports.php:133 1351 #: includes/class-cybex-smtp-logger.php:41 1352 #: pro/admin/views/view-message.php:42 1353 #: pro/includes/class-cybex-smtp-pro-reports.php:134 1354 msgid "Sent" 1355 msgstr "" 1356 1357 #: admin/views/tab-dashboard.php:299 1358 #: admin/views/tab-log.php:34 1359 #: includes/class-cybex-smtp-logger.php:61 1360 #: pro/includes/class-cybex-smtp-pro-reports.php:136 1361 msgid "Failed" 1362 msgstr "" 1363 1364 #: admin/views/tab-dashboard.php:323 1365 msgid "Setup checklist" 1366 msgstr "" 1367 1368 #: admin/views/tab-dashboard.php:328 1369 msgid "Connect a mailer" 1370 msgstr "" 1371 1372 #: admin/views/tab-dashboard.php:329 1373 msgid "configured" 1374 msgstr "" 1375 1376 #: admin/views/tab-dashboard.php:329 1377 msgid "Choose a mailer in Settings" 1378 msgstr "" 1379 1380 #: admin/views/tab-dashboard.php:331 1381 #: admin/views/tab-dashboard.php:339 1382 #: admin/views/tab-dashboard.php:347 1383 #: admin/views/tab-dashboard.php:375 1384 msgid "Done" 1385 msgstr "" 1386 1387 #: admin/views/tab-dashboard.php:336 1388 msgid "Verify sending domain" 1389 msgstr "" 1390 1391 #: admin/views/tab-dashboard.php:337 1392 msgid "SPF record found" 1393 msgstr "" 1394 1395 #: admin/views/tab-dashboard.php:337 1396 msgid "No SPF record found" 1397 msgstr "" 1398 1399 #: admin/views/tab-dashboard.php:345 1400 #: includes/class-cybex-smtp-logger.php:45 1354 1401 msgid "Delivered" 1355 1402 msgstr "" 1356 1403 1357 #: admin/views/tab-dashboard.php:292 1358 #: admin/views/tab-log.php:34 1359 #: includes/class-cybex-smtp-logger.php:40 1360 #: pro/admin/views/view-message.php:52 1361 #: pro/includes/class-cybex-smtp-pro-reports.php:134 1362 msgid "Failed" 1363 msgstr "" 1364 1365 #: admin/views/tab-dashboard.php:316 1366 msgid "Setup checklist" 1367 msgstr "" 1368 1369 #: admin/views/tab-dashboard.php:321 1370 msgid "Connect a mailer" 1371 msgstr "" 1372 1373 #: admin/views/tab-dashboard.php:322 1374 msgid "configured" 1375 msgstr "" 1376 1377 #: admin/views/tab-dashboard.php:322 1378 msgid "Choose a mailer in Settings" 1379 msgstr "" 1380 1381 #: admin/views/tab-dashboard.php:324 1382 #: admin/views/tab-dashboard.php:332 1383 #: admin/views/tab-dashboard.php:340 1384 #: admin/views/tab-dashboard.php:368 1385 msgid "Done" 1386 msgstr "" 1387 1388 #: admin/views/tab-dashboard.php:329 1389 msgid "Verify sending domain" 1390 msgstr "" 1391 1392 #: admin/views/tab-dashboard.php:330 1393 msgid "SPF record found" 1394 msgstr "" 1395 1396 #: admin/views/tab-dashboard.php:330 1397 msgid "No SPF record found" 1398 msgstr "" 1399 1400 #: admin/views/tab-dashboard.php:338 1404 #: admin/views/tab-dashboard.php:345 1401 1405 msgid "Not sent yet" 1402 1406 msgstr "" 1403 1407 1404 #: admin/views/tab-dashboard.php:3 651405 #: admin/views/tab-dashboard.php:3 741408 #: admin/views/tab-dashboard.php:372 1409 #: admin/views/tab-dashboard.php:381 1406 1410 msgid "Enable open & click tracking" 1407 1411 msgstr "" 1408 1412 1409 #: admin/views/tab-dashboard.php:3 661413 #: admin/views/tab-dashboard.php:373 1410 1414 msgid "Tracking active" 1411 1415 msgstr "" 1412 1416 1413 #: admin/views/tab-dashboard.php:3 661417 #: admin/views/tab-dashboard.php:373 1414 1418 msgid "Turn it on in Settings → Email controls" 1415 1419 msgstr "" 1416 1420 1417 #: admin/views/tab-dashboard.php:3 751421 #: admin/views/tab-dashboard.php:382 1418 1422 msgid "Install and activate Cybexsoft SMTP Pro" 1419 1423 msgstr "" 1420 1424 1421 #: admin/views/tab-dashboard.php:3 861425 #: admin/views/tab-dashboard.php:393 1422 1426 msgid "Recent emails" 1423 1427 msgstr "" 1424 1428 1425 #: admin/views/tab-dashboard.php:3 871429 #: admin/views/tab-dashboard.php:394 1426 1430 msgid "View full log →" 1427 1431 msgstr "" 1428 1432 1429 #: admin/views/tab-dashboard.php:39 11430 #: admin/views/tab-log.php:1 251433 #: admin/views/tab-dashboard.php:398 1434 #: admin/views/tab-log.php:130 1431 1435 #: includes/class-cybex-smtp-privacy.php:101 1432 1436 msgid "Subject" 1433 1437 msgstr "" 1434 1438 1435 #: admin/views/tab-dashboard.php:39 21436 #: admin/views/tab-log.php:1 261439 #: admin/views/tab-dashboard.php:399 1440 #: admin/views/tab-log.php:131 1437 1441 #: includes/class-cybex-smtp-privacy.php:105 1438 1442 msgid "Recipient" 1439 1443 msgstr "" 1440 1444 1441 #: admin/views/tab-dashboard.php: 3931442 #: admin/views/tab-log.php:1 271445 #: admin/views/tab-dashboard.php:400 1446 #: admin/views/tab-log.php:132 1443 1447 #: includes/class-cybex-smtp-ajax.php:302 1444 1448 #: includes/class-cybex-smtp-privacy.php:113 … … 1448 1452 msgstr "" 1449 1453 1450 #: admin/views/tab-dashboard.php:394 1451 #: pro/admin/views/view-message.php:42 1452 #: pro/includes/class-cybex-smtp-pro-reports.php:132 1453 msgid "Sent" 1454 msgstr "" 1455 1456 #: admin/views/tab-dashboard.php:395 1457 #: admin/views/tab-log.php:129 1454 #: admin/views/tab-dashboard.php:402 1455 #: admin/views/tab-log.php:134 1458 1456 #: pro/admin/views/view-message.php:96 1459 1457 msgid "Opens" 1460 1458 msgstr "" 1461 1459 1462 #: admin/views/tab-dashboard.php: 3961463 #: admin/views/tab-log.php:13 01460 #: admin/views/tab-dashboard.php:403 1461 #: admin/views/tab-log.php:135 1464 1462 #: pro/admin/views/view-message.php:102 1465 1463 msgid "Clicks" 1466 1464 msgstr "" 1467 1465 1468 #: admin/views/tab-dashboard.php: 3991466 #: admin/views/tab-dashboard.php:406 1469 1467 msgid "No emails sent yet." 1470 1468 msgstr "" 1471 1469 1472 #: admin/views/tab-dashboard.php:4 061470 #: admin/views/tab-dashboard.php:413 1473 1471 #: pro/admin/views/part-bounce-handling.php:146 1474 1472 msgid "ago" 1475 1473 msgstr "" 1476 1474 1477 #: admin/views/tab-dashboard.php:42 01475 #: admin/views/tab-dashboard.php:427 1478 1476 msgid "Cybexsoft SMTP Pro is active" 1479 1477 msgstr "" 1480 1478 1481 #: admin/views/tab-dashboard.php:42 11479 #: admin/views/tab-dashboard.php:428 1482 1480 msgid "Open & click tracking, content archiving, backup failover and weekly reports are all enabled." 1483 1481 msgstr "" 1484 1482 1485 #: admin/views/tab-dashboard.php:4 231483 #: admin/views/tab-dashboard.php:430 1486 1484 msgid "Manage Pro features →" 1487 1485 msgstr "" 1488 1486 1489 #: admin/views/tab-dashboard.php:43 01487 #: admin/views/tab-dashboard.php:437 1490 1488 msgid "Open & click tracking, content archiving, backup failover, weekly reports and four more mailers. Ask us and we will email you a copy." 1491 1489 msgstr "" 1492 1490 1493 1491 #: admin/views/tab-deliver.php:45 1494 #: includes/class-cybex-smtp-ajax.php:4 851492 #: includes/class-cybex-smtp-ajax.php:495 1495 1493 msgid "SPF" 1496 1494 msgstr "" … … 1511 1509 1512 1510 #: admin/views/tab-deliver.php:56 1513 #: includes/class-cybex-smtp-ajax.php:4 861511 #: includes/class-cybex-smtp-ajax.php:496 1514 1512 msgid "DKIM" 1515 1513 msgstr "" … … 1528 1526 1529 1527 #: admin/views/tab-deliver.php:68 1530 #: includes/class-cybex-smtp-ajax.php:4 871528 #: includes/class-cybex-smtp-ajax.php:497 1531 1529 msgid "DMARC" 1532 1530 msgstr "" … … 1708 1706 msgstr "" 1709 1707 1710 #: admin/views/tab-log.php:40 1711 #: includes/class-cybex-smtp-ajax.php:370 1712 #: includes/class-cybex-smtp-logger.php:44 1713 msgid "Blocked" 1714 msgstr "" 1715 1716 #: admin/views/tab-log.php:71 1708 #: admin/views/tab-log.php:76 1717 1709 msgid "Search by subject or recipient…" 1718 1710 msgstr "" 1719 1711 1720 #: admin/views/tab-log.php:1 091712 #: admin/views/tab-log.php:114 1721 1713 msgid "Delete selected" 1722 1714 msgstr "" 1723 1715 1724 #: admin/views/tab-log.php:12 21716 #: admin/views/tab-log.php:127 1725 1717 msgid "Select all emails on this page" 1726 1718 msgstr "" 1727 1719 1728 #: admin/views/tab-log.php:1 281720 #: admin/views/tab-log.php:133 1729 1721 #: includes/class-cybex-smtp-ajax.php:282 1730 1722 #: includes/class-cybex-smtp-privacy.php:97 … … 1732 1724 msgstr "" 1733 1725 1734 #: admin/views/tab-log.php:1 371726 #: admin/views/tab-log.php:142 1735 1727 msgid "No emails found." 1736 1728 msgstr "" 1737 1729 1738 1730 #. translators: %s: the plugin, theme or "WordPress" that sent the email 1739 #: admin/views/tab-log.php:19 41731 #: admin/views/tab-log.php:199 1740 1732 msgid "from %s" 1741 1733 msgstr "" 1742 1734 1743 #: admin/views/tab-log.php:2 271735 #: admin/views/tab-log.php:232 1744 1736 msgid "View email content" 1745 1737 msgstr "" 1746 1738 1747 1739 #. translators: %s: email subject 1748 #: admin/views/tab-log.php:23 31740 #: admin/views/tab-log.php:238 1749 1741 msgid "View content of %s" 1750 1742 msgstr "" 1751 1743 1752 1744 #. translators: 1: first row on this page, 2: last row on this page, 3: total rows 1753 #: admin/views/tab-log.php:26 01745 #: admin/views/tab-log.php:265 1754 1746 msgid "Showing %1$s–%2$s of %3$s emails" 1755 1747 msgstr "" 1756 1748 1757 #: admin/views/tab-log.php: 2991749 #: admin/views/tab-log.php:304 1758 1750 msgid "Open & click tracking is a Pro feature" 1759 1751 msgstr "" 1760 1752 1761 #: admin/views/tab-log.php:30 01753 #: admin/views/tab-log.php:305 1762 1754 msgid "Install and activate Cybexsoft SMTP Pro to see engagement per email and per link, plus full HTML content archiving." 1763 1755 msgstr "" … … 1891 1883 1892 1884 #: admin/views/tab-settings.php:313 1893 msgid "Delete all deliveredlog entries?"1885 msgid "Delete all sent log entries?" 1894 1886 msgstr "" 1895 1887 1896 1888 #: admin/views/tab-settings.php:314 1897 msgid "Delete deliveredonly"1889 msgid "Delete sent only" 1898 1890 msgstr "" 1899 1891 … … 1982 1974 1983 1975 #: admin/views/tab-tools.php:73 1984 #: includes/class-cybex-smtp-ajax.php:3 681976 #: includes/class-cybex-smtp-ajax.php:378 1985 1977 msgid "Connection trace" 1986 1978 msgstr "" … … 2350 2342 #: includes/class-cybex-smtp-admin.php:260 2351 2343 #: includes/class-cybex-smtp-plugins-screen.php:211 2352 #: pro/includes/class-cybex-smtp-pro-admin.php:3 182344 #: pro/includes/class-cybex-smtp-pro-admin.php:320 2353 2345 msgid "Something went wrong. Please try again." 2354 2346 msgstr "" 2355 2347 2356 2348 #: includes/class-cybex-smtp-admin.php:261 2357 msgid " delivered"2349 msgid "sent" 2358 2350 msgstr "" 2359 2351 … … 2533 2525 #: includes/class-cybex-smtp-ajax.php:39 2534 2526 #: includes/class-cybex-smtp-notices.php:536 2535 #: pro/includes/class-cybex-smtp-pro-admin.php: 5472536 #: pro/includes/class-cybex-smtp-pro-admin.php: 5592537 #: pro/includes/class-cybex-smtp-pro-admin.php: 5952527 #: pro/includes/class-cybex-smtp-pro-admin.php:637 2528 #: pro/includes/class-cybex-smtp-pro-admin.php:649 2529 #: pro/includes/class-cybex-smtp-pro-admin.php:685 2538 2530 #: pro/includes/class-cybex-smtp-pro-ajax.php:38 2539 2531 #: pro/includes/class-cybex-smtp-pro-promotion.php:393 … … 2560 2552 2561 2553 #: includes/class-cybex-smtp-ajax.php:68 2562 #: includes/class-cybex-smtp-ajax.php:3 392554 #: includes/class-cybex-smtp-ajax.php:349 2563 2555 msgid "That is not a valid email address to test with." 2564 2556 msgstr "" … … 2639 2631 msgstr "" 2640 2632 2641 #: includes/class-cybex-smtp-ajax.php:3 182633 #: includes/class-cybex-smtp-ajax.php:328 2642 2634 msgid "Headers" 2643 2635 msgstr "" 2644 2636 2645 #: includes/class-cybex-smtp-ajax.php:3 702637 #: includes/class-cybex-smtp-ajax.php:380 2646 2638 msgid "Reachable" 2647 2639 msgstr "" 2648 2640 2641 #: includes/class-cybex-smtp-ajax.php:380 2642 #: includes/class-cybex-smtp-logger.php:65 2643 msgid "Blocked" 2644 msgstr "" 2645 2649 2646 #. translators: %s: total milliseconds 2650 #: includes/class-cybex-smtp-ajax.php:3 752647 #: includes/class-cybex-smtp-ajax.php:385 2651 2648 msgid "%s ms total" 2652 2649 msgstr "" 2653 2650 2654 2651 #. translators: %s: milliseconds 2655 #: includes/class-cybex-smtp-ajax.php:3 872652 #: includes/class-cybex-smtp-ajax.php:397 2656 2653 #: pro/includes/class-cybex-smtp-pro-ajax.php:155 2657 2654 msgid "%s ms" 2658 2655 msgstr "" 2659 2656 2660 #: includes/class-cybex-smtp-ajax.php:4 522657 #: includes/class-cybex-smtp-ajax.php:462 2661 2658 msgid "Please enter a domain to check." 2662 2659 msgstr "" 2663 2660 2664 #: includes/class-cybex-smtp-ajax.php:4 652661 #: includes/class-cybex-smtp-ajax.php:475 2665 2662 msgid "That does not look like a domain name. Enter just the domain you send from, e.g. example.com." 2666 2663 msgstr "" 2667 2664 2668 #: includes/class-cybex-smtp-ajax.php:4 742665 #: includes/class-cybex-smtp-ajax.php:484 2669 2666 msgid "This server does not support DNS lookups (dns_get_record is unavailable)." 2670 2667 msgstr "" … … 2975 2972 msgstr "" 2976 2973 2974 #: includes/class-cybex-smtp-logger.php:49 2975 msgid "Deferred" 2976 msgstr "" 2977 2978 #: includes/class-cybex-smtp-logger.php:53 2979 #: pro/includes/class-cybex-smtp-pro-reports.php:147 2980 msgid "Bounced" 2981 msgstr "" 2982 2983 #: includes/class-cybex-smtp-logger.php:57 2984 #: pro/includes/class-cybex-smtp-pro-failures.php:150 2985 msgid "Spam complaint" 2986 msgstr "" 2987 2977 2988 #: includes/class-cybex-smtp-mailers.php:56 2978 2989 msgid "Default (PHP mail)" … … 3529 3540 3530 3541 #: pro/admin/views/part-alerts-card.php:64 3542 msgid "Also alert when the bounce rate passes (%)" 3543 msgstr "" 3544 3545 #. translators: %d: minimum number of messages 3546 #: pro/admin/views/part-alerts-card.php:70 3547 msgid "Over the last 24 hours, from providers that report bounces back (set up under Delivery events on the mailer). Needs at least %d messages, at most one alert a day. 0 turns it off; 2–5 is a sensible line." 3548 msgstr "" 3549 3550 #: pro/admin/views/part-alerts-card.php:78 3531 3551 msgid "A message that fails on your primary mailer but is rescued by the backup does not raise an alert — only final failures do. Alerts go out through your configured mailer, so if that is the thing that is broken the alert will not arrive: pair alerts with a backup mailer on a different provider." 3532 3552 msgstr "" … … 3680 3700 3681 3701 #: pro/admin/views/part-danger-engagement.php:28 3682 #: pro/includes/class-cybex-smtp-pro-admin.php:32 03702 #: pro/includes/class-cybex-smtp-pro-admin.php:322 3683 3703 msgid "Delete all engagement data and archived content? This cannot be undone." 3704 msgstr "" 3705 3706 #: pro/admin/views/part-delivery-events.php:25 3707 msgid "In Amazon SNS, create a topic and add an HTTPS subscription with the URL below. This site confirms the subscription by itself. Then, in SES, send Bounce, Complaint, Delivery and Delivery delay notifications for your sending identity (or a configuration set) to that topic." 3708 msgstr "" 3709 3710 #: pro/admin/views/part-delivery-events.php:28 3711 msgid "In SendGrid, go to Settings → Mail Settings → Event Webhook, paste the URL below, tick Delivered, Deferred, Bounced, Dropped and Spam Reports, and turn on Signed Event Webhook. Copy the verification key it shows into the field here." 3712 msgstr "" 3713 3714 #: pro/admin/views/part-delivery-events.php:29 3715 msgid "Verification key" 3716 msgstr "" 3717 3718 #: pro/admin/views/part-delivery-events.php:32 3719 msgid "In Mailgun, go to Sending → Webhooks for your domain and add the URL below for Delivered, Permanent failure, Temporary failure and Spam complaints. Copy the HTTP webhook signing key from the same page into the field here." 3720 msgstr "" 3721 3722 #: pro/admin/views/part-delivery-events.php:33 3723 msgid "HTTP webhook signing key" 3724 msgstr "" 3725 3726 #: pro/admin/views/part-delivery-events.php:36 3727 msgid "In Postmark, open your server, choose the message stream, then Webhooks → Add webhook. Paste the URL below and tick Delivery, Bounce and Spam Complaint. Leave Basic auth credentials empty: the key in the URL does that job." 3728 msgstr "" 3729 3730 #: pro/admin/views/part-delivery-events.php:39 3731 msgid "In Brevo, go to Transactional → Settings → Webhook, add a webhook with the URL below, and tick Delivered, Deferred, Soft bounce, Hard bounce, Invalid email, Blocked and Complaint." 3732 msgstr "" 3733 3734 #: pro/admin/views/part-delivery-events.php:42 3735 msgid "In SMTP2GO, go to Settings → Webhooks, add the URL below, and tick Delivered, Bounce, Spam and Reject. Either output type works." 3736 msgstr "" 3737 3738 #: pro/admin/views/part-delivery-events.php:45 3739 msgid "In Resend, go to Webhooks → Add endpoint, paste the URL below and choose email.delivered, email.delivery_delayed, email.bounced, email.complained and email.suppressed. Copy the endpoint’s signing secret (it starts whsec_) into the field here." 3740 msgstr "" 3741 3742 #: pro/admin/views/part-delivery-events.php:46 3743 #: pro/admin/views/part-delivery-events.php:50 3744 msgid "Signing secret" 3745 msgstr "" 3746 3747 #: pro/admin/views/part-delivery-events.php:49 3748 msgid "In MailerSend, go to Domains → your domain → Webhooks → Add webhook, paste the URL below and choose activity.delivered, activity.deferred, activity.soft_bounced, activity.hard_bounced and activity.spam_complaint. Copy its signing secret into the field here." 3749 msgstr "" 3750 3751 #: pro/admin/views/part-delivery-events.php:53 3752 msgid "In Mailjet, go to Account settings → Event notifications (webhooks) and paste the URL below against Sent, Bounce, Blocked and Spam." 3753 msgstr "" 3754 3755 #: pro/admin/views/part-delivery-events.php:56 3756 msgid "In Elastic Email, go to Settings → Notifications (Webhooks), add the URL below and tick Sent, Bounce/Error and Complaints. Elastic Email checks the URL when you save it; this site answers that check." 3757 msgstr "" 3758 3759 #: pro/admin/views/part-delivery-events.php:59 3760 msgid "In ZeptoMail, open the Mail Agent → Webhooks → Add webhook, paste the URL below and choose Hard bounce, Soft bounce and Feedback loop. ZeptoMail does not report deliveries, so messages stay \"Sent\" unless they bounce or draw a complaint." 3761 msgstr "" 3762 3763 #: pro/admin/views/part-delivery-events.php:73 3764 #: pro/admin/views/part-delivery-events.php:127 3765 msgid "Delivery events" 3766 msgstr "" 3767 3768 #: pro/admin/views/part-delivery-events.php:74 3769 msgid "Lets the provider tell this site what happened after it took a message: delivered, delayed, bounced or reported as spam. The email log shows it, and addresses that hard-bounce or complain are blocked automatically." 3770 msgstr "" 3771 3772 #: pro/admin/views/part-delivery-events.php:79 3773 msgid "Webhook URL" 3774 msgstr "" 3775 3776 #: pro/admin/views/part-delivery-events.php:82 3777 msgid "The key at the end is what tells this site the request is genuine. Keep the URL private." 3778 msgstr "" 3779 3780 #: pro/admin/views/part-delivery-events.php:85 3781 msgid "Make new keys when I save (every provider’s URL with a key changes and must be pasted again)" 3782 msgstr "" 3783 3784 #. translators: %s: how long ago, e.g. "3 minutes" 3785 #: pro/admin/views/part-delivery-events.php:107 3786 msgid "Last event received %s ago." 3787 msgstr "" 3788 3789 #: pro/admin/views/part-delivery-events.php:111 3790 msgid "Nothing received yet." 3791 msgstr "" 3792 3793 #: pro/admin/views/part-delivery-events.php:128 3794 msgid "Not available for this mailer. Gmail and Outlook do not report deliveries, bounces or complaints to the apps that send through them; a bounce arrives as an email in the sending mailbox instead. Messages sent this way stay \"Sent\" in the log." 3684 3795 msgstr "" 3685 3796 … … 4231 4342 msgstr "" 4232 4343 4233 #: pro/includes/class-cybex-smtp-pro-admin.php:17 04344 #: pro/includes/class-cybex-smtp-pro-admin.php:172 4234 4345 msgid "The license could not be activated." 4235 4346 msgstr "" 4236 4347 4237 #: pro/includes/class-cybex-smtp-pro-admin.php:17 14348 #: pro/includes/class-cybex-smtp-pro-admin.php:173 4238 4349 msgid "Message re-sent." 4239 4350 msgstr "" 4240 4351 4241 #: pro/includes/class-cybex-smtp-pro-admin.php:17 24352 #: pro/includes/class-cybex-smtp-pro-admin.php:174 4242 4353 msgid "The message could not be re-sent. Check the debug log in Tools." 4243 4354 msgstr "" 4244 4355 4245 #: pro/includes/class-cybex-smtp-pro-admin.php:17 34356 #: pro/includes/class-cybex-smtp-pro-admin.php:175 4246 4357 msgid "That message has no archived content to re-send." 4247 4358 msgstr "" 4248 4359 4249 #: pro/includes/class-cybex-smtp-pro-admin.php:17 44360 #: pro/includes/class-cybex-smtp-pro-admin.php:176 4250 4361 msgid "Engagement data and archived content deleted." 4251 4362 msgstr "" 4252 4363 4253 #: pro/includes/class-cybex-smtp-pro-admin.php:17 54364 #: pro/includes/class-cybex-smtp-pro-admin.php:177 4254 4365 msgid "Your backup mailer is now the primary. The one it replaced is standing by." 4255 4366 msgstr "" 4256 4367 4257 #: pro/includes/class-cybex-smtp-pro-admin.php:17 64368 #: pro/includes/class-cybex-smtp-pro-admin.php:178 4258 4369 msgid "The mailers were not swapped. The reasons are listed on the notice that offered it." 4259 4370 msgstr "" 4260 4371 4261 #: pro/includes/class-cybex-smtp-pro-admin.php:1 784372 #: pro/includes/class-cybex-smtp-pro-admin.php:180 4262 4373 msgid "Blocklists checked." 4263 4374 msgstr "" 4264 4375 4265 #: pro/includes/class-cybex-smtp-pro-admin.php:1 794376 #: pro/includes/class-cybex-smtp-pro-admin.php:181 4266 4377 msgid "There is no sending IP to check with your current mailer. See the card below." 4267 4378 msgstr "" 4268 4379 4269 #: pro/includes/class-cybex-smtp-pro-admin.php:18 14380 #: pro/includes/class-cybex-smtp-pro-admin.php:183 4270 4381 msgid "Weekly report sent." 4271 4382 msgstr "" 4272 4383 4273 #: pro/includes/class-cybex-smtp-pro-admin.php:18 24384 #: pro/includes/class-cybex-smtp-pro-admin.php:184 4274 4385 msgid "The weekly report could not be sent. Check the debug log below." 4275 4386 msgstr "" 4276 4387 4277 #: pro/includes/class-cybex-smtp-pro-admin.php:18 34388 #: pro/includes/class-cybex-smtp-pro-admin.php:185 4278 4389 msgid "Account connected." 4279 4390 msgstr "" 4280 4391 4281 #: pro/includes/class-cybex-smtp-pro-admin.php:18 44392 #: pro/includes/class-cybex-smtp-pro-admin.php:186 4282 4393 msgid "The account could not be connected." 4283 4394 msgstr "" 4284 4395 4285 #: pro/includes/class-cybex-smtp-pro-admin.php:18 54396 #: pro/includes/class-cybex-smtp-pro-admin.php:187 4286 4397 msgid "Account disconnected." 4287 4398 msgstr "" 4288 4399 4289 #: pro/includes/class-cybex-smtp-pro-admin.php:20 64400 #: pro/includes/class-cybex-smtp-pro-admin.php:208 4290 4401 msgid "Pro settings" 4291 4402 msgstr "" 4292 4403 4293 #: pro/includes/class-cybex-smtp-pro-admin.php:32 14404 #: pro/includes/class-cybex-smtp-pro-admin.php:323 4294 4405 msgid "This sends a real message through your backup mailer, to your From address. Continue?" 4295 4406 msgstr "" 4296 4407 4297 #: pro/includes/class-cybex-smtp-pro-admin.php:37 54408 #: pro/includes/class-cybex-smtp-pro-admin.php:377 4298 4409 msgid "The watchlist (bounce history only)" 4299 4410 msgstr "" 4300 4411 4301 #: pro/includes/class-cybex-smtp-pro-admin.php:512 4412 #. translators: 1: number of messages, 2: provider names 4413 #: pro/includes/class-cybex-smtp-pro-admin.php:520 4414 msgid "Delivery reports: %1$s message so far, from %2$s" 4415 msgid_plural "Delivery reports: %1$s messages so far, from %2$s" 4416 msgstr[0] "" 4417 msgstr[1] "" 4418 4419 #. translators: 1: delivered rate, 2: bounce rate, 3: complaint rate, 4: provider names 4420 #: pro/includes/class-cybex-smtp-pro-admin.php:527 4421 msgid "%1$s%% delivered · %2$s%% bounced · %3$s%% complaints (%4$s)" 4422 msgstr "" 4423 4424 #: pro/includes/class-cybex-smtp-pro-admin.php:558 4425 msgid "hard" 4426 msgstr "" 4427 4428 #: pro/includes/class-cybex-smtp-pro-admin.php:558 4429 msgid "soft" 4430 msgstr "" 4431 4432 #: pro/includes/class-cybex-smtp-pro-admin.php:573 4433 msgid "Provider reports" 4434 msgstr "" 4435 4436 #: pro/includes/class-cybex-smtp-pro-admin.php:602 4302 4437 msgid "Not tracked — plain-text message, or this kind of tracking was off when it was sent." 4303 4438 msgstr "" … … 4432 4567 msgstr "" 4433 4568 4569 #. translators: 1: bounce rate as a percentage, 2: site name 4570 #: pro/includes/class-cybex-smtp-pro-alerts.php:109 4571 msgid "[Bounce rate %1$s%%] %2$s" 4572 msgstr "" 4573 4574 #: pro/includes/class-cybex-smtp-pro-alerts.php:115 4575 msgid "Too much of your mail is bouncing" 4576 msgstr "" 4577 4578 #. translators: 1: number bounced, 2: number sent, 3: bounce rate, 4: the alert threshold 4579 #: pro/includes/class-cybex-smtp-pro-alerts.php:120 4580 msgid "%1$s of %2$s messages sent in the last 24 hours bounced (%3$s%%). The alert is set at %4$s%%." 4581 msgstr "" 4582 4583 #: pro/includes/class-cybex-smtp-pro-alerts.php:127 4584 msgid "Mailbox providers start filtering or refusing a sender whose bounce rate stays high. Usual causes: an old or bought address list, a sign-up form without confirmation, or a typo-prone checkout field." 4585 msgstr "" 4586 4587 #: pro/includes/class-cybex-smtp-pro-alerts.php:128 4588 msgid "See the bounced messages" 4589 msgstr "" 4590 4434 4591 #. translators: 1: number of failures, 2: site name 4435 #: pro/includes/class-cybex-smtp-pro-alerts.php:1 074592 #: pro/includes/class-cybex-smtp-pro-alerts.php:199 4436 4593 msgid "[%1$d email failed] %2$s" 4437 4594 msgid_plural "[%1$d emails failed] %2$s" … … 4439 4596 msgstr[1] "" 4440 4597 4441 #: pro/includes/class-cybex-smtp-pro-alerts.php: 1754598 #: pro/includes/class-cybex-smtp-pro-alerts.php:267 4442 4599 msgid "Email delivery is failing" 4443 4600 msgstr "" 4444 4601 4445 4602 #. translators: 1: number of failures, 2: window in minutes 4446 #: pro/includes/class-cybex-smtp-pro-alerts.php: 1814603 #: pro/includes/class-cybex-smtp-pro-alerts.php:273 4447 4604 msgid "%1$d message failed to send in the last %2$d minutes." 4448 4605 msgid_plural "%1$d messages failed to send in the last %2$d minutes." … … 4450 4607 msgstr[1] "" 4451 4608 4452 #: pro/includes/class-cybex-smtp-pro-alerts.php: 1874609 #: pro/includes/class-cybex-smtp-pro-alerts.php:279 4453 4610 msgid "Latest error" 4454 4611 msgstr "" 4455 4612 4456 #: pro/includes/class-cybex-smtp-pro-alerts.php: 1914613 #: pro/includes/class-cybex-smtp-pro-alerts.php:283 4457 4614 msgid "Recent failures" 4458 4615 msgstr "" 4459 4616 4460 #: pro/includes/class-cybex-smtp-pro-alerts.php: 1954617 #: pro/includes/class-cybex-smtp-pro-alerts.php:287 4461 4618 msgid "Open the email log" 4462 4619 msgstr "" … … 4464 4621 #: pro/includes/class-cybex-smtp-pro-cron.php:63 4465 4622 msgid "Every six hours (Cybexsoft SMTP blocklist check)" 4623 msgstr "" 4624 4625 #. translators: %s: mailer name, e.g. sendgrid 4626 #: pro/includes/class-cybex-smtp-pro-events.php:744 4627 msgid "Delivery event refused (%s)" 4466 4628 msgstr "" 4467 4629 … … 4578 4740 msgstr "" 4579 4741 4742 #: pro/includes/class-cybex-smtp-pro-failures.php:123 4743 msgid "Hard bounce reported by the provider" 4744 msgstr "" 4745 4746 #: pro/includes/class-cybex-smtp-pro-failures.php:147 4747 msgid "spam complaint" 4748 msgstr "" 4749 4750 #: pro/includes/class-cybex-smtp-pro-failures.php:149 4751 msgid "Blocked automatically after a spam complaint." 4752 msgstr "" 4753 4580 4754 #. translators: 1: number of failures, 2: the last error reported 4581 #: pro/includes/class-cybex-smtp-pro-failures.php: 1694755 #: pro/includes/class-cybex-smtp-pro-failures.php:249 4582 4756 msgid "Blocked automatically after %1$d failed deliveries. Last error: %2$s" 4583 4757 msgstr "" 4584 4758 4585 4759 #. translators: %d: number of failed deliveries 4586 #: pro/includes/class-cybex-smtp-pro-failures.php: 1824760 #: pro/includes/class-cybex-smtp-pro-failures.php:262 4587 4761 msgid "Auto-blocked after %d bounces" 4588 4762 msgstr "" … … 4624 4798 msgstr "" 4625 4799 4626 #: pro/includes/class-cybex-smtp-pro-modules.php:3 334800 #: pro/includes/class-cybex-smtp-pro-modules.php:343 4627 4801 msgid "Postmark gives you the DKIM record under Sender Signatures once you add the domain." 4628 4802 msgstr "" 4629 4803 4630 #: pro/includes/class-cybex-smtp-pro-modules.php:3 374804 #: pro/includes/class-cybex-smtp-pro-modules.php:347 4631 4805 msgid "Resend shows the DKIM and SPF records to publish when you add the domain under Domains." 4632 4806 msgstr "" 4633 4807 4634 #: pro/includes/class-cybex-smtp-pro-modules.php:3 414808 #: pro/includes/class-cybex-smtp-pro-modules.php:351 4635 4809 msgid "MailerSend lists the DKIM record on the domain's page under Domains once it is added." 4636 4810 msgstr "" 4637 4811 4638 #: pro/includes/class-cybex-smtp-pro-modules.php:3 454812 #: pro/includes/class-cybex-smtp-pro-modules.php:355 4639 4813 msgid "Mailjet publishes the DKIM record under Account settings → Sender domains & addresses." 4640 4814 msgstr "" 4641 4815 4642 #: pro/includes/class-cybex-smtp-pro-modules.php:3 494816 #: pro/includes/class-cybex-smtp-pro-modules.php:359 4643 4817 msgid "Elastic Email gives you the DKIM record under Settings → Domains after you add the domain." 4644 4818 msgstr "" 4645 4819 4646 #: pro/includes/class-cybex-smtp-pro-modules.php:3 534820 #: pro/includes/class-cybex-smtp-pro-modules.php:363 4647 4821 msgid "ZeptoMail issues the DKIM selector under Domains when you verify the domain. The record differs by data centre." 4648 4822 msgstr "" 4649 4823 4650 #: pro/includes/class-cybex-smtp-pro-modules.php:3 574824 #: pro/includes/class-cybex-smtp-pro-modules.php:367 4651 4825 msgid "Google Workspace generates the DKIM key under Apps → Google Workspace → Gmail → Authenticate email." 4652 4826 msgstr "" 4653 4827 4654 #: pro/includes/class-cybex-smtp-pro-modules.php:3 614828 #: pro/includes/class-cybex-smtp-pro-modules.php:371 4655 4829 msgid "Microsoft 365 publishes two DKIM CNAMEs; enable them in the Defender portal under Email authentication settings." 4656 4830 msgstr "" 4657 4831 4658 #: pro/includes/class-cybex-smtp-pro-modules.php:3 734832 #: pro/includes/class-cybex-smtp-pro-modules.php:383 4659 4833 msgid "Outlook / Microsoft 365" 4660 4834 msgstr "" … … 4862 5036 msgstr "" 4863 5037 4864 #: pro/includes/class-cybex-smtp-pro-reports.php:1 285038 #: pro/includes/class-cybex-smtp-pro-reports.php:130 4865 5039 msgid "not tracked" 4866 5040 msgstr "" 4867 5041 4868 #: pro/includes/class-cybex-smtp-pro-reports.php:136 5042 #: pro/includes/class-cybex-smtp-pro-reports.php:135 5043 msgid "Accepted by your provider" 5044 msgstr "" 5045 5046 #: pro/includes/class-cybex-smtp-pro-reports.php:146 5047 msgid "Delivered (confirmed by the provider)" 5048 msgstr "" 5049 5050 #: pro/includes/class-cybex-smtp-pro-reports.php:148 5051 msgid "Spam complaints" 5052 msgstr "" 5053 5054 #: pro/includes/class-cybex-smtp-pro-reports.php:152 4869 5055 msgid "Click rate" 4870 5056 msgstr "" 4871 5057 4872 #: pro/includes/class-cybex-smtp-pro-reports.php:1 405058 #: pro/includes/class-cybex-smtp-pro-reports.php:155 4873 5059 msgid "Your week in email" 4874 5060 msgstr "" 4875 5061 4876 5062 #. translators: 1: site name, 2: start date, 3: end date 4877 #: pro/includes/class-cybex-smtp-pro-reports.php:1 445063 #: pro/includes/class-cybex-smtp-pro-reports.php:159 4878 5064 msgid "%1$s · %2$s to %3$s" 4879 5065 msgstr "" 4880 5066 4881 #: pro/includes/class-cybex-smtp-pro-reports.php:1 625067 #: pro/includes/class-cybex-smtp-pro-reports.php:177 4882 5068 msgid "Most clicked links" 4883 5069 msgstr "" 4884 5070 4885 5071 #. translators: %s: number of clicks 4886 #: pro/includes/class-cybex-smtp-pro-reports.php:1 715072 #: pro/includes/class-cybex-smtp-pro-reports.php:186 4887 5073 msgid "%s click" 4888 5074 msgid_plural "%s clicks" … … 4890 5076 msgstr[1] "" 4891 5077 4892 #: pro/includes/class-cybex-smtp-pro-reports.php:1 815078 #: pro/includes/class-cybex-smtp-pro-reports.php:196 4893 5079 msgid "Most common errors" 4894 5080 msgstr "" 4895 5081 4896 #: pro/includes/class-cybex-smtp-pro-reports.php: 1945082 #: pro/includes/class-cybex-smtp-pro-reports.php:209 4897 5083 msgid "Addresses blocked automatically" 4898 5084 msgstr "" 4899 5085 4900 #: pro/includes/class-cybex-smtp-pro-reports.php: 1955086 #: pro/includes/class-cybex-smtp-pro-reports.php:210 4901 5087 msgid "These kept bouncing, so this site has stopped emailing them. Remove any that should not be there under Cybexsoft SMTP → Pro → Recipients." 4902 5088 msgstr "" 4903 5089 4904 #: pro/includes/class-cybex-smtp-pro-reports.php:2 075090 #: pro/includes/class-cybex-smtp-pro-reports.php:222 4905 5091 msgid "Open the dashboard" 4906 5092 msgstr "" 4907 5093 4908 #: pro/includes/class-cybex-smtp-pro-reports.php:2 085094 #: pro/includes/class-cybex-smtp-pro-reports.php:223 4909 5095 msgid "Sent by Cybexsoft SMTP Pro. Change the schedule or turn this off under Cybexsoft SMTP → Pro." 4910 5096 msgstr "" -
cybexsoft-smtp/trunk/readme.txt
r3732590 r3733698 5 5 Tested up to: 7.1 6 6 Requires PHP: 7.4 7 Stable tag: 1.0. 67 Stable tag: 1.0.7 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 200 200 == Changelog == 201 201 202 = 1.0.7 = 203 * New: the email log has delivery statuses — Delivered, Deferred, Bounced and Spam complaint — for messages your provider reports on after accepting them. Reports are received by Cybexsoft SMTP Pro's delivery events, from Amazon SES, SendGrid, Mailgun, Brevo, SMTP2GO, Postmark, Resend, MailerSend, Mailjet, Elastic Email and ZeptoMail; the log filters for these statuses appear once there is mail to show. 204 * Change: a message your provider accepted is now labelled "Sent" instead of "Delivered". Acceptance is all a send can confirm; "Delivered" is kept for mail the provider says reached the mailbox. The dashboard's 30-day rate card now reads "Accepted". 205 * Change: messages sent through SendGrid, Mailgun and Brevo carry their log token in the provider's own tag field, so the provider's reports can be matched to the right log entry. 206 * Developers: two new hooks, `cybex_smtp/dashboard/accepted_stat_after` and the `cybex_smtp/log/email_meta_after` filter, for add-ons to show delivery information on the dashboard and in the message viewer. 207 202 208 = 1.0.6 = 203 209 * New: a "Rate ★★★★★" link under the plugin's description on the Plugins screen, and one line at the foot of the plugin's own pages linking to the WordPress.org review form. No pop-ups or admin notices. … … 240 246 == Upgrade Notice == 241 247 248 = 1.0.7 = 249 Mail your provider accepted is now labelled "Sent"; "Delivered", "Bounced" and "Spam complaint" appear when your provider reports back. 250 242 251 = 1.0.6 = 243 252 Adds a link to rate the plugin on WordPress.org. No other changes.
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)