Changeset 3446569
- Timestamp:
- 01/25/2026 02:47:56 PM (4 weeks ago)
- Location:
- blaminhor-essentials
- Files:
-
- 77 added
- 14 edited
-
tags/1.1.1 (added)
-
tags/1.1.1/assets (added)
-
tags/1.1.1/assets/css (added)
-
tags/1.1.1/assets/css/admin.css (added)
-
tags/1.1.1/assets/css/admin.min.css (added)
-
tags/1.1.1/assets/css/index.php (added)
-
tags/1.1.1/assets/css/modules.css (added)
-
tags/1.1.1/assets/images (added)
-
tags/1.1.1/assets/index.php (added)
-
tags/1.1.1/assets/js (added)
-
tags/1.1.1/assets/js/admin.js (added)
-
tags/1.1.1/assets/js/admin.min.js (added)
-
tags/1.1.1/assets/js/index.php (added)
-
tags/1.1.1/assets/js/modules.js (added)
-
tags/1.1.1/blaminhor-essentials.php (added)
-
tags/1.1.1/includes (added)
-
tags/1.1.1/includes/class-blaminhor-essentials-admin.php (added)
-
tags/1.1.1/includes/class-blaminhor-essentials-module.php (added)
-
tags/1.1.1/includes/functions.php (added)
-
tags/1.1.1/includes/index.php (added)
-
tags/1.1.1/index.php (added)
-
tags/1.1.1/languages (added)
-
tags/1.1.1/languages/blaminhor-essentials-de_DE.mo (added)
-
tags/1.1.1/languages/blaminhor-essentials-de_DE.po (added)
-
tags/1.1.1/languages/blaminhor-essentials-fr_FR.mo (added)
-
tags/1.1.1/languages/blaminhor-essentials-fr_FR.po (added)
-
tags/1.1.1/languages/blaminhor-essentials.pot (added)
-
tags/1.1.1/languages/index.php (added)
-
tags/1.1.1/modules (added)
-
tags/1.1.1/modules/backup (added)
-
tags/1.1.1/modules/backup/class-module-backup.php (added)
-
tags/1.1.1/modules/backup/index.php (added)
-
tags/1.1.1/modules/broken-links (added)
-
tags/1.1.1/modules/broken-links/class-module-broken-links.php (added)
-
tags/1.1.1/modules/broken-links/index.php (added)
-
tags/1.1.1/modules/classic-editor (added)
-
tags/1.1.1/modules/classic-editor/class-module-classic-editor.php (added)
-
tags/1.1.1/modules/db-optimizer (added)
-
tags/1.1.1/modules/db-optimizer/class-module-db-optimizer.php (added)
-
tags/1.1.1/modules/db-optimizer/index.php (added)
-
tags/1.1.1/modules/domain-changer (added)
-
tags/1.1.1/modules/domain-changer/class-module-domain-changer.php (added)
-
tags/1.1.1/modules/domain-changer/index.php (added)
-
tags/1.1.1/modules/duplicator (added)
-
tags/1.1.1/modules/duplicator/class-module-duplicator.php (added)
-
tags/1.1.1/modules/duplicator/index.php (added)
-
tags/1.1.1/modules/duplicator/views (added)
-
tags/1.1.1/modules/fatal-error-recovery (added)
-
tags/1.1.1/modules/fatal-error-recovery/class-module-fatal-error-recovery.php (added)
-
tags/1.1.1/modules/favicon (added)
-
tags/1.1.1/modules/favicon/class-module-favicon.php (added)
-
tags/1.1.1/modules/favicon/index.php (added)
-
tags/1.1.1/modules/https-redirect (added)
-
tags/1.1.1/modules/https-redirect/class-module-https-redirect.php (added)
-
tags/1.1.1/modules/https-redirect/index.php (added)
-
tags/1.1.1/modules/image-sizes (added)
-
tags/1.1.1/modules/image-sizes/class-module-image-sizes.php (added)
-
tags/1.1.1/modules/image-sizes/index.php (added)
-
tags/1.1.1/modules/index.php (added)
-
tags/1.1.1/modules/maintenance (added)
-
tags/1.1.1/modules/maintenance/class-module-maintenance.php (added)
-
tags/1.1.1/modules/maintenance/index.php (added)
-
tags/1.1.1/modules/mute-core-emails (added)
-
tags/1.1.1/modules/mute-core-emails/class-module-mute-core-emails.php (added)
-
tags/1.1.1/modules/mute-core-emails/index.php (added)
-
tags/1.1.1/modules/redirections (added)
-
tags/1.1.1/modules/redirections/class-module-redirections.php (added)
-
tags/1.1.1/modules/redirections/index.php (added)
-
tags/1.1.1/modules/seo-manager (added)
-
tags/1.1.1/modules/seo-manager/class-module-seo-manager.php (added)
-
tags/1.1.1/modules/seo-manager/index.php (added)
-
tags/1.1.1/modules/smtp (added)
-
tags/1.1.1/modules/smtp/class-module-smtp.php (added)
-
tags/1.1.1/modules/smtp/index.php (added)
-
tags/1.1.1/modules/smtp/views (added)
-
tags/1.1.1/readme.txt (added)
-
tags/1.1.1/uninstall.php (added)
-
trunk/assets/css/admin.css (modified) (1 diff)
-
trunk/assets/css/admin.min.css (modified) (1 diff)
-
trunk/assets/js/modules.js (modified) (1 diff)
-
trunk/blaminhor-essentials.php (modified) (3 diffs)
-
trunk/includes/class-blaminhor-essentials-admin.php (modified) (1 diff)
-
trunk/languages/blaminhor-essentials-de_DE.mo (modified) (previous)
-
trunk/languages/blaminhor-essentials-de_DE.po (modified) (2 diffs)
-
trunk/languages/blaminhor-essentials-fr_FR.mo (modified) (previous)
-
trunk/languages/blaminhor-essentials-fr_FR.po (modified) (2 diffs)
-
trunk/modules/fatal-error-recovery/class-module-fatal-error-recovery.php (modified) (5 diffs)
-
trunk/modules/favicon/class-module-favicon.php (modified) (2 diffs)
-
trunk/modules/image-sizes/class-module-image-sizes.php (modified) (1 diff)
-
trunk/modules/smtp/class-module-smtp.php (modified) (1 diff)
-
trunk/readme.txt (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
blaminhor-essentials/trunk/assets/css/admin.css
r3445838 r3446569 550 550 } 551 551 552 /* Card wrapper (for modules without tabs) */ 553 .blaminhor-essentials-card { 554 background: #fff; 555 border: 1px solid #c3c4c7; 556 border-radius: var(--ap-border-radius); 557 box-shadow: var(--ap-shadow); 558 padding: 20px; 559 } 560 552 561 /* Tabs */ 553 562 .blaminhor-essentials-tabs-wrapper { -
blaminhor-essentials/trunk/assets/css/admin.min.css
r3445838 r3446569 550 550 } 551 551 552 /* Card wrapper (for modules without tabs) */ 553 .blaminhor-essentials-card { 554 background: #fff; 555 border: 1px solid #c3c4c7; 556 border-radius: var(--ap-border-radius); 557 box-shadow: var(--ap-shadow); 558 padding: 20px; 559 } 560 552 561 /* Tabs */ 553 562 .blaminhor-essentials-tabs-wrapper { -
blaminhor-essentials/trunk/assets/js/modules.js
r3445615 r3446569 2219 2219 if (response.success) { 2220 2220 $result.html('<div class="blaminhor-essentials-notice success">' + response.data.message + '</div>'); 2221 // If logging is enabled, switch to log tab after delay 2222 if (response.data.logging_enabled) { 2223 setTimeout(function() { 2224 var $logTab = $('[data-tab="log"]'); 2225 if ($logTab.length) { 2226 $logTab.trigger('click'); 2227 } 2228 }, 1500); 2229 } 2221 2230 } else { 2222 2231 $result.html('<div class="blaminhor-essentials-notice error">' + response.data.message + '</div>'); -
blaminhor-essentials/trunk/blaminhor-essentials.php
r3445838 r3446569 4 4 * Plugin URI: https://wp.blaminhor.com/ 5 5 * Description: A modular toolkit for WordPress with activatable features. Lightweight, secure, and reliable. 6 * Version: 1.1. 06 * Version: 1.1.1 7 7 * Requires at least: 6.2 8 8 * Requires PHP: 7.4 … … 23 23 24 24 // Plugin constants 25 define('BLAMINHOR_ESSENTIALS_VERSION', '1.1. 0');25 define('BLAMINHOR_ESSENTIALS_VERSION', '1.1.1'); 26 26 define('BLAMINHOR_ESSENTIALS_PLUGIN_FILE', __FILE__); 27 27 define('BLAMINHOR_ESSENTIALS_PLUGIN_DIR', plugin_dir_path(__FILE__)); … … 826 826 // Flush rewrite rules 827 827 flush_rewrite_rules(); 828 829 // Set transient for redirect to dashboard (single site only) 830 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Not processing form data, just checking activation context. 831 if ( ! is_network_admin() && ! isset( $_GET['activate-multi'] ) ) { 832 set_transient( 'blaminhor_essentials_activation_redirect', true, 30 ); 833 } 828 834 }); 829 835 -
blaminhor-essentials/trunk/includes/class-blaminhor-essentials-admin.php
r3445838 r3446569 33 33 $this->plugin = $plugin; 34 34 $this->register_ajax_handlers(); 35 36 // Add plugin action links (Settings link in plugins list) 37 add_filter( 'plugin_action_links_' . BLAMINHOR_ESSENTIALS_PLUGIN_BASENAME, array( $this, 'add_plugin_action_links' ) ); 38 39 // Check for activation redirect 40 add_action( 'admin_init', array( $this, 'maybe_redirect_after_activation' ) ); 41 } 42 43 /** 44 * Redirect to plugin dashboard after activation 45 */ 46 public function maybe_redirect_after_activation() { 47 if ( get_transient( 'blaminhor_essentials_activation_redirect' ) ) { 48 delete_transient( 'blaminhor_essentials_activation_redirect' ); 49 // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Not processing form data, just checking activation context. 50 if ( ! isset( $_GET['activate-multi'] ) ) { 51 wp_safe_redirect( admin_url( 'admin.php?page=blaminhor-essentials' ) ); 52 exit; 53 } 54 } 55 } 56 57 /** 58 * Add Settings link to plugin action links 59 * 60 * @param array $links Existing plugin action links. 61 * @return array 62 */ 63 public function add_plugin_action_links( $links ) { 64 $settings_link = sprintf( 65 '<a href="%s">%s</a>', 66 esc_url( admin_url( 'admin.php?page=blaminhor-essentials' ) ), 67 esc_html__( 'Settings', 'blaminhor-essentials' ) 68 ); 69 // Insert after 'deactivate' link if it exists, otherwise at end 70 if ( isset( $links['deactivate'] ) ) { 71 $new_links = array(); 72 foreach ( $links as $key => $link ) { 73 $new_links[ $key ] = $link; 74 if ( 'deactivate' === $key ) { 75 $new_links['settings'] = $settings_link; 76 } 77 } 78 return $new_links; 79 } 80 $links['settings'] = $settings_link; 81 return $links; 35 82 } 36 83 -
blaminhor-essentials/trunk/languages/blaminhor-essentials-de_DE.po
r3445838 r3446569 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: Blaminhor Essentials 1.1. 0\n"3 "Project-Id-Version: Blaminhor Essentials 1.1.1\n" 4 4 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/blaminhor-essentials\n" 5 5 "Last-Translator: \n" … … 1852 1852 msgid "If using cPanel, check <strong>Email Accounts</strong> → <strong>Connect Devices</strong>" 1853 1853 msgstr "Wenn Sie cPanel verwenden, prüfen Sie <strong>E-Mail-Konten</strong> → <strong>Geräte verbinden</strong>" 1854 1855 # ===================================================== 1856 # Version 1.1.1 - New translations 1857 # ===================================================== 1858 1859 msgid "Leave empty to use the post title" 1860 msgstr "Leer lassen, um den Beitragstitel zu verwenden" 1861 1862 msgid "Email Notification" 1863 msgstr "E-Mail-Benachrichtigung" 1864 1865 msgid "Send email notification when fatal error is detected" 1866 msgstr "E-Mail-Benachrichtigung bei fatalem Fehler senden" 1867 1868 msgid "When enabled, an email with the recovery URL will be sent to the admin email when a fatal error caused by a plugin is detected." 1869 msgstr "Wenn aktiviert, wird bei einem durch ein Plugin verursachten fatalen Fehler eine E-Mail mit der Wiederherstellungs-URL an die Admin-E-Mail gesendet." 1870 1871 msgid "[%s] Fatal Error Detected - Recovery Link" 1872 msgstr "[%s] Fataler Fehler erkannt - Wiederherstellungslink" 1873 1874 msgid "Unknown" 1875 msgstr "Unbekannt" -
blaminhor-essentials/trunk/languages/blaminhor-essentials-fr_FR.po
r3445838 r3446569 1 1 msgid "" 2 2 msgstr "" 3 "Project-Id-Version: Blaminhor Essentials 1.1. 0\n"3 "Project-Id-Version: Blaminhor Essentials 1.1.1\n" 4 4 "Report-Msgid-Bugs-To: https://wp.blaminhor.com\n" 5 5 "POT-Creation-Date: 2026-01-20 10:00+0000\n" … … 3024 3024 msgid "If using cPanel, check <strong>Email Accounts</strong> → <strong>Connect Devices</strong>" 3025 3025 msgstr "Si vous utilisez cPanel, vérifiez <strong>Comptes de messagerie</strong> → <strong>Connecter des appareils</strong>" 3026 3027 # ===================================================== 3028 # Version 1.1.1 - New translations 3029 # ===================================================== 3030 3031 msgid "Leave empty to use the post title" 3032 msgstr "Laisser vide pour utiliser le titre de l'article" 3033 3034 msgid "Email Notification" 3035 msgstr "Notification par email" 3036 3037 msgid "Send email notification when fatal error is detected" 3038 msgstr "Envoyer une notification par email en cas d'erreur fatale" 3039 3040 msgid "When enabled, an email with the recovery URL will be sent to the admin email when a fatal error caused by a plugin is detected." 3041 msgstr "Si activé, un email avec l'URL de récupération sera envoyé à l'email de l'administrateur lorsqu'une erreur fatale causée par un plugin est détectée." 3042 3043 msgid "[%s] Fatal Error Detected - Recovery Link" 3044 msgstr "[%s] Erreur fatale détectée - Lien de récupération" 3045 3046 msgid "Unknown" 3047 msgstr "Inconnu" -
blaminhor-essentials/trunk/modules/fatal-error-recovery/class-module-fatal-error-recovery.php
r3445838 r3446569 58 58 protected function get_default_settings() { 59 59 return array( 60 'recovery_key' => '', 61 'show_admin_bar' => true, 62 'email_notification' => true, 60 'recovery_key' => '', 61 'show_admin_bar' => true, 62 'email_notification' => true, 63 'last_error_email_hash' => '', 63 64 ); 64 65 } … … 79 80 // Admin hooks. 80 81 add_action( 'admin_init', array( $this, 'handle_settings_submission' ) ); 82 add_action( 'admin_init', array( $this, 'maybe_send_pending_error_email' ) ); 81 83 82 84 // Admin bar indicator. … … 246 248 private function log_fatal_error( $error ) { 247 249 $error_data = array( 248 'type' => $error['type'], 249 'message' => $error['message'], 250 'file' => $error['file'], 251 'line' => $error['line'], 252 'time' => time(), 253 'plugin' => $this->detect_plugin_from_error( $error ), 254 'url' => isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '', 250 'type' => $error['type'], 251 'message' => $error['message'], 252 'file' => $error['file'], 253 'line' => $error['line'], 254 'time' => time(), 255 'plugin' => $this->detect_plugin_from_error( $error ), 256 'url' => isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '', 257 'email_pending' => true, 255 258 ); 256 259 … … 287 290 288 291 return null; 292 } 293 294 /** 295 * Check for pending error emails and send them 296 */ 297 public function maybe_send_pending_error_email() { 298 $error_data = $this->get_last_error(); 299 300 if ( $error_data && ! empty( $error_data['email_pending'] ) && ! empty( $error_data['plugin'] ) ) { 301 $this->send_recovery_email( $error_data ); 302 } 303 } 304 305 /** 306 * Send recovery email notification 307 * 308 * @param array $error_data Error details. 309 */ 310 private function send_recovery_email( $error_data ) { 311 if ( ! $this->get_setting( 'email_notification', true ) ) { 312 return; 313 } 314 315 // Create hash of this error to avoid duplicate emails. 316 $error_hash = md5( $error_data['file'] . $error_data['line'] . $error_data['message'] ); 317 318 // Check if we already sent an email for this exact error. 319 if ( $this->get_setting( 'last_error_email_hash', '' ) === $error_hash ) { 320 return; 321 } 322 323 $recovery_key = $this->get_setting( 'recovery_key', '' ); 324 if ( empty( $recovery_key ) ) { 325 $recovery_key = $this->get_recovery_key_from_file(); 326 } 327 328 $recovery_url = add_query_arg( 'ap_recovery', $recovery_key, home_url( '/' ) ); 329 $admin_email = get_option( 'admin_email' ); 330 $site_name = get_bloginfo( 'name' ); 331 332 $subject = sprintf( 333 /* translators: %s: site name */ 334 __( '[%s] Fatal Error Detected - Recovery Link', 'blaminhor-essentials' ), 335 $site_name 336 ); 337 338 $message = sprintf( 339 /* translators: 1: site name, 2: error message, 3: file path, 4: line number, 5: plugin name, 6: recovery URL */ 340 __( "A fatal error was detected on %1\$s.\n\nError: %2\$s\n\nFile: %3\$s (line %4\$d)\n\nSuspected Plugin: %5\$s\n\nRecovery URL:\n%6\$s\n\nUse this link to disable problematic plugins and recover access to your site.\n\nIMPORTANT: Keep this URL secret! Anyone with this link can disable plugins.\n\n--\nBlaminhor Essentials - Fatal Error Recovery", 'blaminhor-essentials' ), 341 $site_name, 342 $error_data['message'], 343 $error_data['file'], 344 $error_data['line'], 345 $error_data['plugin'] ? $error_data['plugin'] : __( 'Unknown', 'blaminhor-essentials' ), 346 $recovery_url 347 ); 348 349 $sent = wp_mail( $admin_email, $subject, $message ); 350 351 if ( $sent ) { 352 // Save the hash to prevent duplicate emails. 353 $settings = $this->settings; 354 $settings['last_error_email_hash'] = $error_hash; 355 $this->save_settings( $settings ); 356 357 // Clear the pending flag in error data. 358 $error_data['email_pending'] = false; 359 update_option( 'ap_fer_last_error', $error_data, false ); 360 361 // Also update file. 362 $upload_dir = wp_upload_dir(); 363 $error_file = $upload_dir['basedir'] . '/blaminhor-essentials/.last-error.json'; 364 if ( file_exists( $error_file ) ) { 365 file_put_contents( $error_file, wp_json_encode( $error_data ) ); 366 } 367 } 289 368 } 290 369 … … 1038 1117 </td> 1039 1118 </tr> 1119 <tr> 1120 <th scope="row"><?php esc_html_e( 'Email Notification', 'blaminhor-essentials' ); ?></th> 1121 <td> 1122 <label> 1123 <input type="checkbox" name="email_notification" <?php checked( $this->get_setting( 'email_notification', true ) ); ?>> 1124 <?php esc_html_e( 'Send email notification when fatal error is detected', 'blaminhor-essentials' ); ?> 1125 </label> 1126 <p class="description"><?php esc_html_e( 'When enabled, an email with the recovery URL will be sent to the admin email when a fatal error caused by a plugin is detected.', 'blaminhor-essentials' ); ?></p> 1127 </td> 1128 </tr> 1040 1129 </table> 1041 1130 -
blaminhor-essentials/trunk/modules/favicon/class-module-favicon.php
r3445838 r3446569 399 399 $theme_color = $this->get_setting( 'theme_color', '#ffffff' ); 400 400 ?> 401 <!-- Alfred Proteus Favicon -->401 <!-- Blaminhor Essentials Favicon --> 402 402 <link rel="icon" type="image/png" sizes="48x48" href="<?php echo esc_url( $favicon_url . 'favicon-48x48.png' ); ?>"> 403 403 <link rel="icon" type="image/png" sizes="32x32" href="<?php echo esc_url( $favicon_url . 'favicon-32x32.png' ); ?>"> … … 409 409 <meta name="msapplication-config" content="<?php echo esc_url( home_url( '/browserconfig.xml' ) ); ?>"> 410 410 <meta name="theme-color" content="<?php echo esc_attr( $theme_color ); ?>"> 411 <!-- End Alfred Proteus Favicon -->411 <!-- End Blaminhor Essentials Favicon --> 412 412 <?php 413 413 } -
blaminhor-essentials/trunk/modules/image-sizes/class-module-image-sizes.php
r3445838 r3446569 777 777 </div> 778 778 <div class="ap-notice-actions"> 779 <button type="button" class="button button-primary" onclick="jQuery('[data-tab=regenerate]').click(); ">779 <button type="button" class="button button-primary" onclick="jQuery('[data-tab=regenerate]').click(); setTimeout(function(){ document.querySelector('.ap-cleanup-options').scrollIntoView({behavior: 'smooth', block: 'start'}); }, 150);"> 780 780 <?php esc_html_e( 'Clean Up', 'blaminhor-essentials' ); ?> 781 781 </button> -
blaminhor-essentials/trunk/modules/smtp/class-module-smtp.php
r3445615 r3446569 768 768 if ( $result ) { 769 769 wp_send_json_success( array( 770 'message' => __( 'Test email sent successfully! Check your inbox.', 'blaminhor-essentials' ), 770 'message' => __( 'Test email sent successfully! Check your inbox.', 'blaminhor-essentials' ), 771 'logging_enabled' => (bool) $this->get_setting( 'enable_logging', false ), 771 772 ) ); 772 773 } else { -
blaminhor-essentials/trunk/readme.txt
r3445838 r3446569 5 5 Tested up to: 6.9 6 6 Requires PHP: 7.4 7 Stable tag: 1.1. 07 Stable tag: 1.1.1 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 192 192 193 193 == Changelog == 194 195 = 1.1.1 = 196 * Added: Redirect to plugin dashboard after activation. 197 * Added: "Settings" link in the plugins list page. 198 * Added: Email log auto-refresh after successful test email in SMTP module. 199 * Added: Recovery email notification option in Fatal Error Recovery module. 200 * Fixed: Missing translation for SEO placeholder text. 201 * Fixed: "Alfred Proteus" references in Favicon module HTML comments. 202 * Fixed: Image Sizes cleanup button now scrolls to cleanup section. 203 * Fixed: Mute Core Emails design consistency (missing card styles). 194 204 195 205 = 1.1.0 = … … 211 221 == Upgrade Notice == 212 222 223 = 1.1.1 = 224 UX improvements: Dashboard redirect on activation, settings link in plugins list, SMTP log auto-refresh, recovery email notifications, and design fixes. 225 213 226 = 1.1.0 = 214 227 Major update: 13 new modules, complete SMTP translations, improved Fatal Error Recovery, and new Advanced Settings. … … 225 238 This plugin allows you to optionally configure connections to external SMTP services for email delivery. **No data is sent to any external service unless you explicitly configure an SMTP relay.** 226 239 227 When you configure the SMTP Mailer module, your emails will be sent through the service you choose. The following services have preset configurations available: 228 229 = Gmail = 230 * Service URL: smtp.gmail.com 231 * Privacy Policy: [https://policies.google.com/privacy](https://policies.google.com/privacy) 232 233 = Microsoft Outlook/Office 365 = 234 * Service URL: smtp.office365.com 235 * Privacy Policy: [https://privacy.microsoft.com/privacystatement](https://privacy.microsoft.com/privacystatement) 236 237 = Brevo (formerly Sendinblue) = 238 * Service URL: smtp-relay.brevo.com 239 * Privacy Policy: [https://www.brevo.com/legal/privacypolicy/](https://www.brevo.com/legal/privacypolicy/) 240 241 = SendGrid = 242 * Service URL: smtp.sendgrid.net 243 * Privacy Policy: [https://www.twilio.com/legal/privacy](https://www.twilio.com/legal/privacy) 244 245 = Mailgun = 246 * Service URL: smtp.mailgun.org 247 * Privacy Policy: [https://www.mailgun.com/legal/privacy-policy/](https://www.mailgun.com/legal/privacy-policy/) 248 249 = Amazon SES = 250 * Service URL: email-smtp.[region].amazonaws.com 251 * Privacy Policy: [https://aws.amazon.com/privacy/](https://aws.amazon.com/privacy/) 252 253 = Postmark = 254 * Service URL: smtp.postmarkapp.com 255 * Privacy Policy: [https://postmarkapp.com/privacy-policy](https://postmarkapp.com/privacy-policy) 256 257 = Elastic Email = 258 * Service URL: smtp.elasticemail.com 259 * Privacy Policy: [https://elasticemail.com/privacy-policy](https://elasticemail.com/privacy-policy) 260 261 = SparkPost = 262 * Service URL: smtp.sparkpostmail.com 263 * Privacy Policy: [https://www.sparkpost.com/policies/privacy/](https://www.sparkpost.com/policies/privacy/) 264 265 = Mailjet = 266 * Service URL: in-v3.mailjet.com 267 * Privacy Policy: [https://www.mailjet.com/legal/privacy-policy/](https://www.mailjet.com/legal/privacy-policy/) 268 269 = SMTP2GO = 270 * Service URL: mail.smtp2go.com 271 * Privacy Policy: [https://www.smtp2go.com/privacy/](https://www.smtp2go.com/privacy/) 272 273 = Zoho Mail = 274 * Service URL: smtp.zoho.com 275 * Privacy Policy: [https://www.zoho.com/privacy.html](https://www.zoho.com/privacy.html) 240 When you configure the SMTP Mailer module, your emails will be sent through the service you choose. The following services have preset configurations available: Gmail, Microsoft Outlook/Office 365, Brevo (formerly Sendinblue), SendGrid, Mailgun, Amazon SES, Postmark, Elastic Email, SparkPost, Mailjet, SMTP2GO, Zoho Mail. 276 241 277 242 You can also configure any other SMTP server using the "Other" option. Please review the privacy policy of any third-party service you choose to use.
Note: See TracChangeset
for help on using the changeset viewer.