diff --git a/wp-content/plugins/wp-mail-smtp/assets/css/smtp-admin.min.css b/wp-content/plugins/wp-mail-smtp/assets/css/smtp-admin.min.css
index 4d1ce1f..ceda3ed 100644
--- a/wp-content/plugins/wp-mail-smtp/assets/css/smtp-admin.min.css
+++ b/wp-content/plugins/wp-mail-smtp/assets/css/smtp-admin.min.css
@@ -1,3 +1,3 @@
-#wpcontent{padding-left:0 !important;position:relative}@media (max-width: 600px){#wpcontent{padding-top:46px}}@media (max-width: 600px){#wpbody{padding-top:0}}body.toplevel_page_wp-mail-smtp div.jconfirm *,body.toplevel_page_wp-mail-smtp div.jconfirm *::before,body.toplevel_page_wp-mail-smtp div.jconfirm *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box-container div.jconfirm-box{border-radius:0;box-shadow:0 2px 6px rgba(0,0,0,0.2)}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon{color:rgba(0,0,0,0.4);top:8px;right:8px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon:hover{color:rgba(0,0,0,0.8)}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-title-c{margin:0 0 26px 0 !important;padding:0 !important}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-title-c .jconfirm-icon-c{margin:0 !important;color:#c4c4c4 !important;-webkit-transition:none !important;transition:none !important;-webkit-transform:none !important;-ms-transform:none !important;transform:none !important;font-size:45px !important}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-title-c .jconfirm-icon-c i:empty{display:none}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-title-c .jconfirm-icon-c svg{height:35px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-title-c .jconfirm-title{display:block;color:#333}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-title-c .jconfirm-icon-c+span.jconfirm-title{margin-top:20px !important}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content-pane{margin-bottom:0;display:block}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content-pane .jconfirm-content{overflow:inherit}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content{font-size:16px;color:#555;line-height:1.4}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content.lite-upgrade p{font-size:18px;padding:0 20px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content p{margin:0 0 16px;font-size:18px;line-height:1.5}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content p:last-of-type{margin:0}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content p.large{font-size:18px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content p.small{font-size:14px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased{font-size:12px;color:#ccc;text-decoration:none}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased:hover{text-decoration:underline}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased{display:block;font-size:12px;color:#aaa;text-decoration:none;padding-top:20px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased:hover{color:#999;text-decoration:underline}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .discount-note{text-align:center;margin:30px 0 0}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .discount-note p{background-color:#faffac;margin:0 -30px;padding:24px 60px 20px;font-size:15px;color:#4d4d4d;position:relative}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .discount-note p:after{content:'\f058';display:inline-block;font:normal normal normal 14px/1 FontAwesome;background-color:#fff;font-size:26px;border-radius:50%;padding:5px 6px;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:-20px;right:50%;margin-right:-18px;color:#3abc01}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .discount-note span{font-weight:700;color:#3abc01}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .discount-note a{color:#aaa;display:block;margin-top:12px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box input[type=text]{display:block;width:99%;border:1px solid #d6d6d6;padding:10px;box-shadow:none;margin:20px auto 0 auto}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box button.btn-confirm{background-color:#FF982D;color:#fff;outline:none}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box button.btn-confirm:hover{background-color:#f97f00;border-color:#f97f00}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box button,body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box button.btn-default{color:#666}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box button.btn-block{display:block;text-align:center;width:100%;margin:0 0 10px 0 !important}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box button.btn-normal-case{text-transform:none !important}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .error{display:none;color:red}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .wpforms-error{border:1px solid #ebccd1 !important}#screen-meta-links,#screen-meta{display:none}#wp-mail-smtp-header-temp{position:absolute;margin:0;top:-1px;left:20px;right:20px;z-index:99}#wp-mail-smtp-header{border-top:3px solid #FF982D;padding:20px}#wp-mail-smtp-header img{display:block;margin:0;max-width:242px}@media (max-width: 782px){#wp-mail-smtp-header img{max-width:200px}}#wp-mail-smtp{margin:0}#wp-mail-smtp .wp-mail-smtp-hide{display:none}#wp-mail-smtp .wp-mail-smtp-page-title{background-color:#fff;font-size:14px;margin:0 0 20px 0;padding:0 20px}#wp-mail-smtp .wp-mail-smtp-page-title a.tab{border-bottom:2px solid #fff;box-shadow:none;color:#666;display:inline-block;margin-right:30px;padding:20px 0 18px 0;text-decoration:none}#wp-mail-smtp .wp-mail-smtp-page-title a.tab.active{border-bottom:2px solid #FF982D}#wp-mail-smtp .wp-mail-smtp-page-title a.tab:hover{border-color:#999}#wp-mail-smtp .wp-mail-smtp-page-title a.action{padding:5px;border:0;min-height:auto;color:#fff;margin:-10px 0 0 20px}#wp-mail-smtp .wp-mail-smtp-page-title .page-title{background-color:#fff;display:inline-block;font-size:23px;margin:0;padding:15px 20px 15px 0}#wp-mail-smtp .wp-mail-smtp-page-content{padding:0 20px}#wp-mail-smtp .wp-mail-smtp-page-content *,#wp-mail-smtp .wp-mail-smtp-page-content *::before,#wp-mail-smtp .wp-mail-smtp-page-content *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-clear:before{content:" ";display:table}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-clear:after{clear:both;content:" ";display:table}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row{border-bottom:1px solid #e4e4e4;padding:30px 0;font-size:14px;line-height:1.3}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row:first-of-type{padding-top:10px !important}@media (max-width: 781px){#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row{padding:20px 0}}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.inactive{display:none}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row .wp-mail-smtp-setting-mid-row-sep{background:#e4e4e4;height:1px;border:0;margin:15px 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.section-heading{padding:20px 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.section-heading.no-desc h2,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.section-heading.no-desc h4{margin:0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.section-heading .wp-mail-smtp-setting-field{margin:0;max-width:1005px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox input[type=checkbox]{float:left;margin:1px 0 0 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox input[type=checkbox]+label{margin:0 0 0 8px;vertical-align:baseline}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox .desc{margin:0 0 0 30px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox input[type=checkbox]+label+.desc{margin:8px 0 0 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-text .wp-mail-smtp-setting-label,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-password .wp-mail-smtp-setting-label,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-number .wp-mail-smtp-setting-label,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-email .wp-mail-smtp-setting-label{padding-top:8px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-select .wp-mail-smtp-setting-label{padding-top:8px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-radio .wp-mail-smtp-setting-field input[type=radio]{margin:-3px 10px 0 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-radio .wp-mail-smtp-setting-field label{margin-right:30px;display:inline-block}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field label{vertical-align:middle;display:inline-block}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field label:hover .wp-mail-smtp-setting-toggle-switch{background-color:#999}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]{display:none}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:checked+.wp-mail-smtp-setting-toggle-switch{background-color:#46B450}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:checked+.wp-mail-smtp-setting-toggle-switch:before{-webkit-transform:translateX(19px);-ms-transform:translateX(19px);transform:translateX(19px)}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:disabled+.wp-mail-smtp-setting-toggle-switch{background-color:#a0daa5;cursor:default}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:checked+.wp-mail-smtp-setting-toggle-switch+.wp-mail-smtp-setting-toggle-checked-label{display:inline-block}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:checked+.wp-mail-smtp-setting-toggle-switch+.wp-mail-smtp-setting-toggle-checked-label+.wp-mail-smtp-setting-toggle-unchecked-label{display:none}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:disabled+.wp-mail-smtp-setting-toggle-switch+.wp-mail-smtp-setting-toggle-checked-label,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:disabled+.wp-mail-smtp-setting-toggle-switch+.wp-mail-smtp-setting-toggle-unchecked-label{color:#aaa}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field .wp-mail-smtp-setting-toggle-unchecked-label,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field .wp-mail-smtp-setting-toggle-checked-label{text-transform:uppercase;font-weight:400;color:#777;font-size:13px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field .wp-mail-smtp-setting-toggle-checked-label{display:none}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field .wp-mail-smtp-setting-toggle-switch{position:relative;cursor:pointer;background-color:#ccc;border-radius:15px;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;vertical-align:middle;position:relative;display:inline-block;margin:0 5px 0 0;width:40px;height:20px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field .wp-mail-smtp-setting-toggle-switch:before{position:absolute;content:"";height:14px;width:14px;left:3px;top:3px;background-color:#fff;border-radius:50%;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer{padding-bottom:20px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer{display:inline-block;width:140px;margin-right:12px;margin-bottom:12px;position:relative}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer .wp-mail-smtp-mailer-image{background:#fff;text-align:center;border:2px solid #E5E5E5;border-radius:4px;cursor:pointer;height:76px;position:relative;margin-bottom:10px;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer .wp-mail-smtp-mailer-image.is-recommended{background-image:url(../images/recommended.svg);background-repeat:no-repeat;background-size:60%;background-position:top right -2px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer .wp-mail-smtp-mailer-image img{max-width:90%;max-height:40px;display:block;position:relative;top:50%;left:50%;transform:translate(-50%, -50%);opacity:0.6;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer.wp-mail-smtp-mailer-smtp .wp-mail-smtp-mailer-image img{max-height:30px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer.active .wp-mail-smtp-mailer-image{border-color:#FF982D}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer.active .wp-mail-smtp-mailer-image img{opacity:1}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer:hover .wp-mail-smtp-mailer-image{border-color:#ccc}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer:hover .wp-mail-smtp-mailer-image img{opacity:1}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row h2,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row h4{color:#444;font-size:20px;font-weight:700;margin:0 0 6px 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row h2{margin-bottom:15px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row h3{color:#444;font-size:24px;font-weight:600;margin:0 0 20px 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p{margin:12px 0 0;font-size:14px;line-height:1.5em}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p:first-of-type{margin:8px 0 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.desc{font-style:italic;color:#777}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.buttonned{margin-top:30px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.inline-notice{margin:5px 0 15px;box-sizing:border-box;background:#fff;border-left:4px solid transparent;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1)}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.inline-notice.inline-error{border-color:#dc3232;margin-bottom:5px;padding:10px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.inline-notice.inline-edu-notice{border-color:#809EB0;line-height:1.5em;padding:10px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.inline-notice a.wp-mail-smtp-mailer-notice-dismiss{float:right;color:#999DA1;margin:0 0 10px 10px;text-decoration:none}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.inline-notice a.wp-mail-smtp-mailer-notice-dismiss:hover{color:#666a6e}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row ul{margin:8px 0 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row ul.list li{margin-left:20px;list-style-type:disc}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list th{padding:5px 5px 5px 0;text-align:left}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.email{padding-right:2em}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.status{width:100px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.actions a{border-bottom:1px solid;display:inline-block;margin-right:5px;text-decoration:none}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.actions a[class*=delete]{color:#a00}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.actions a[class*=delete]:hover,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.actions a[class*=delete]:active,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.actions a[class*=delete]:focus{color:#400}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=text],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=email],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=number],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=password]{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px;line-height:1.3}@media (max-width: 959px){#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=text],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=email],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=number],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=password]{width:300px}}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=text][readonly],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=email][readonly],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=number][readonly],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=password][readonly]{background-color:#f9f9f9}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=text].small-text,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=email].small-text,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=number].small-text,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=password].small-text{width:75px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=text]:focus,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=email]:focus,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=number]:focus,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=password]:focus{border-color:#bbb}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=text]:disabled,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=email]:disabled,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=number]:disabled,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=password]:disabled{opacity:0.6}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-label{display:block;float:left;width:205px;padding:0 20px 0 0}@media (max-width: 781px){#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-label{float:none;width:100%;padding-bottom:15px}}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-label label{display:block;font-weight:600}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-field{display:block;margin:0 0 0 205px;max-width:800px}@media (max-width: 781px){#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-field{margin:0}}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-submit{margin:0;padding:25px 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-submit .help-text{margin-left:10px;vertical-align:middle}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-mailer-options .wp-mail-smtp-mailer-option .wp-mail-smtp-setting-row.section-heading{padding:20px 0 !important}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-mailer-options .wp-mail-smtp-mailer-option blockquote{background:#E5E5E5;border-radius:4px;color:#666;font-size:14px;margin:20px 0;padding:15px;width:1005px}#wp-mail-smtp .wp-mail-smtp-page-content.wp-mail-smtp-page-general p{margin:0}#wp-mail-smtp .wp-mail-smtp-page-content .notice-inline{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);margin:5px 0 15px;padding:1px 12px}#wp-mail-smtp .wp-mail-smtp-page-content .notice-inline.notice-success{border-left-color:#46b450}#wp-mail-smtp .wp-mail-smtp-page-content .notice-inline.notice-warning{border-left-color:#ffb900}#wp-mail-smtp .wp-mail-smtp-page-content .notice-inline.notice-error{border-left-color:#dc3232}#wp-mail-smtp .wp-mail-smtp-page-content .notice-inline.notice-info{border-left-color:#00a0d2}#wp-mail-smtp .wp-mail-smtp-page-content .notice p,#wp-mail-smtp .wp-mail-smtp-page-content .notice-inline p{margin:0.5em 0;padding:2px}#wp-mail-smtp .wp-mail-smtp-page-content pre{white-space:pre-line}#wp-mail-smtp .wp-mail-smtp-page-content.active{display:block}#wp-mail-smtp .wp-mail-smtp-page-content .connected-as{margin-left:30px}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug{background-color:#fff;padding:25px 20px 1px 25px}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug h2{color:#444;margin:1.4em 0 0.8em;font-size:16px;font-weight:700}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug p{font-size:14px;color:#555;margin-bottom:1.1em}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ul,#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ol{font-size:14px;color:#555;margin:0 0 1.1em 1.8em}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ul li,#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ol li{margin:0 0 8px 0;line-height:1.5}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ul li:last-of-type,#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ol li:last-of-type{margin:0}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ul li ul,#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ol li ul{list-style-type:disc}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug a{color:#FF982D}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug a:hover{color:#f97f00}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .dashicons-star-filled{color:#FF982D;width:16px;height:16px;font-size:16px;vertical-align:text-top}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .price-off{color:green;font-weight:bold}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .error-log-toggle{text-decoration:none;color:#444}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .error-log-toggle:hover{color:#FF982D}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .error-log-toggle .dashicons{font-size:15px;height:15px;width:15px;padding-top:3px;border:0;outline:0}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .error-log{border-left:3px solid #ffb900;padding:0 0 0 20px;margin:0 0 10px 0;font-size:12px;display:none}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .error-log pre{margin:0}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .error-log-note{display:none}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner{background-color:#fff;padding:25px 20px;border:1px solid #dadada;margin:10px 0 0 0;position:relative}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .wp-mail-smtp-pro-banner-dismiss{position:absolute;right:10px;top:10px}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .wp-mail-smtp-pro-banner-dismiss button{background:none;border:none;color:#a9a9a9;cursor:pointer;margin:0;padding:0}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner h2{color:#444;margin-top:0;font-size:16px;font-weight:700}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner p{font-size:14px;color:#555;margin-bottom:1.1em}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner p:last-of-type{margin:0}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .benefits{margin:0 0 16px 0;overflow:auto;max-width:1000px}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .benefits ul{margin:0;padding:0;width:50%;float:left}@media (max-width: 600px){#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .benefits ul{width:100%;float:none}}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .benefits ul li{margin:0;padding:0 0 2px 16px;color:#555;font-size:14px;position:relative}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .benefits ul li:before{content:'+';position:absolute;top:-1px;left:0}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .benefits ul li.arrow-right:before{content:'→'}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner a{color:#FF982D}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner a:hover,#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner a:active,#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner a:focus{color:#f97f00}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .stars{text-decoration:none}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .stars .dashicons{width:16px;height:16px;font-size:16px;vertical-align:text-top}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .price-off{color:green;font-weight:bold}#wp-mail-smtp .wp-mail-smtp-admin-columns>div[class*="-column-"]{float:left}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-20{width:20%}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-33{width:33.33333%}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-40{width:40%}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-50{width:50%}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-60{width:60%}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-80{width:80%}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-last{float:right !important}#wp-mail-smtp .wp-mail-smtp-admin-columns:after{content:"";display:table;clear:both}#wp-mail-smtp .wp-mail-smtp-page-upsell{display:flex;align-items:center;justify-content:center;height:auto;flex-direction:column}#wp-mail-smtp .wp-mail-smtp-page-upsell>*{width:800px}#wp-mail-smtp .wp-mail-smtp-page-upsell *,#wp-mail-smtp .wp-mail-smtp-page-upsell *::before,#wp-mail-smtp .wp-mail-smtp-page-upsell *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wp-mail-smtp .wp-mail-smtp-page-upsell h2{font-size:24px;color:#444444;text-align:center}#wp-mail-smtp .wp-mail-smtp-page-upsell h3{font-size:16px;font-weight:normal;color:#72777C;line-height:1.5em;margin-top:0;margin-bottom:25px;text-align:center}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features{margin-bottom:40px;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:stretch;align-content:flex-start}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature{display:flex;flex-direction:row;width:360px;align-items:flex-start;align-content:flex-start;margin-right:60px;margin-top:40px}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature:nth-of-type(1){margin-top:20px}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature:nth-of-type(2){margin-top:20px}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature:nth-of-type(even){margin-right:0}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature .wp-mail-smtp-page-upsell-feature-image{width:65px;text-align:center}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature .wp-mail-smtp-page-upsell-feature-image img{display:block;margin:5px auto 0}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature .wp-mail-smtp-page-upsell-feature-content{margin-left:20px}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature .wp-mail-smtp-page-upsell-feature-content h4{font-size:15px;margin:0 0 0.5em}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature .wp-mail-smtp-page-upsell-feature-content p{color:#72777C;margin:0}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-images{margin-bottom:20px;text-align:center}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-images img{width:380px;height:auto;margin-right:20px;border:5px solid #fff;border-radius:5px;box-shadow:0 0 10px 5px rgba(0,0,0,0.15)}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-images img:last-child{margin-right:0}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-button{text-align:center}.wp-mail-smtp-btn{border:0;border-radius:3px;cursor:pointer;display:inline-block;margin:0;text-decoration:none;text-align:center;vertical-align:middle;white-space:nowrap;text-shadow:none;box-shadow:none;outline:none}.wp-mail-smtp-btn .dashicons{font-size:16px;width:16px;height:16px}.wp-mail-smtp-btn:disabled{opacity:0.5;cursor:not-allowed}.wp-mail-smtp-btn.wp-mail-smtp-btn-md{font-size:13px;font-weight:600;padding:8px 12px;min-height:35px}.wp-mail-smtp-btn.wp-mail-smtp-btn-lg{font-size:16px;font-weight:600;padding:16px 28px}.wp-mail-smtp-btn.wp-mail-smtp-btn-orange{background-color:#FF982D;border-color:#FF982D;color:#fff}.wp-mail-smtp-btn.wp-mail-smtp-btn-orange:hover,.wp-mail-smtp-btn.wp-mail-smtp-btn-orange:active,.wp-mail-smtp-btn.wp-mail-smtp-btn-orange:focus{background-color:#f97f00;border-color:#f97f00}.wp-mail-smtp-btn.wp-mail-smtp-btn-red{background-color:#DC3232;border-color:#DC3232;color:#fff}.wp-mail-smtp-btn.wp-mail-smtp-btn-red:hover,.wp-mail-smtp-btn.wp-mail-smtp-btn-red:active,.wp-mail-smtp-btn.wp-mail-smtp-btn-red:focus{background-color:darkred;border-color:darkred}.wp-mail-smtp-btn.wp-mail-smtp-btn-grey{background-color:#f5f5f5;border:1px solid #ccc;color:#666}.wp-mail-smtp-btn.wp-mail-smtp-btn-grey:hover,.wp-mail-smtp-btn.wp-mail-smtp-btn-grey:active,.wp-mail-smtp-btn.wp-mail-smtp-btn-grey:focus{background-color:#d7d7d7;border-color:#ccc;color:#444}.wp-mail-smtp-btn.wp-mail-smtp-btn-light-grey{background-color:#f5f5f5;border:1px solid #ccc;color:#666}.wp-mail-smtp-btn.wp-mail-smtp-btn-light-grey:hover,.wp-mail-smtp-btn.wp-mail-smtp-btn-light-grey:active,.wp-mail-smtp-btn.wp-mail-smtp-btn-light-grey:focus{background-color:#eee;color:#444}.wp-mail-smtp-btn.wp-mail-smtp-btn-blueish{background-color:#738e9e;border:1px solid #738e9e;color:#fff}.wp-mail-smtp-btn.wp-mail-smtp-btn-blueish:hover,.wp-mail-smtp-btn.wp-mail-smtp-btn-blueish:active,.wp-mail-smtp-btn.wp-mail-smtp-btn-blueish:focus{background-color:#395360;border-color:#395360;color:#fff}
+#wpcontent{padding-left:0 !important;position:relative}@media (max-width: 600px){#wpcontent{padding-top:46px}}@media (max-width: 600px){#wpbody{padding-top:0}}body.toplevel_page_wp-mail-smtp div.jconfirm *,body.toplevel_page_wp-mail-smtp div.jconfirm *::before,body.toplevel_page_wp-mail-smtp div.jconfirm *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box-container div.jconfirm-box{border-radius:0;box-shadow:0 2px 6px rgba(0,0,0,0.2)}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon{color:rgba(0,0,0,0.4);top:8px;right:8px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon:hover{color:rgba(0,0,0,0.8)}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-title-c{margin:0 0 26px 0 !important;padding:0 !important}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-title-c .jconfirm-icon-c{margin:0 !important;color:#c4c4c4 !important;-webkit-transition:none !important;transition:none !important;-webkit-transform:none !important;-ms-transform:none !important;transform:none !important;font-size:45px !important}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-title-c .jconfirm-icon-c i:empty{display:none}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-title-c .jconfirm-icon-c svg{height:35px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-title-c .jconfirm-title{display:block;color:#444}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-title-c .jconfirm-icon-c+span.jconfirm-title{margin-top:20px !important}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content-pane{margin-bottom:0;display:block}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content-pane .jconfirm-content{overflow:inherit}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content{font-size:16px;color:#777;line-height:1.4}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content.lite-upgrade p{font-size:18px;padding:0 20px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content p{margin:0 0 20px;font-size:16px;line-height:1.5}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content p:last-of-type{margin:0}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content p.large{font-size:18px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content p.small{font-size:14px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased{font-size:12px;color:#ccc;text-decoration:none}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased:hover{text-decoration:underline}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased{display:block;font-size:12px;color:#aaa;text-decoration:none;padding-top:20px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased:hover{color:#999;text-decoration:underline}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .discount-note{text-align:center;margin:30px 0 0}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .discount-note p{background-color:#faffac;margin:0 -30px;padding:24px 60px 20px;font-size:15px;color:#4d4d4d;position:relative}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .discount-note p:after{content:url(../images/font-awesome/check-circle-solid-green.svg);width:40px;height:40px;background-color:#fff;border-radius:50%;padding:5px 6px;position:absolute;top:-20px;right:50%;margin-right:-18px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .discount-note span{font-weight:700;color:#3abc01}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .discount-note a{color:#aaa;display:block;margin-top:12px}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box input[type=text]{display:block;width:99%;border:1px solid #d6d6d6;padding:10px;box-shadow:none;margin:20px auto 0 auto}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box button.btn-confirm{background-color:#FF982D;color:#fff;outline:none}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box button.btn-confirm:hover{background-color:#f97f00;border-color:#f97f00}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box button,body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box button.btn-default{color:#666}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box button.btn-block{display:block;text-align:center;width:100%;margin:0 0 10px 0 !important}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box button.btn-normal-case{text-transform:none !important}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .error{display:none;color:red}body.toplevel_page_wp-mail-smtp div.jconfirm div.jconfirm-box .wpforms-error{border:1px solid #ebccd1 !important}#screen-meta-links,#screen-meta{display:none}#wp-mail-smtp-header-temp{position:absolute;margin:0;top:-1px;left:20px;right:20px;z-index:99}#wp-mail-smtp-header{border-top:3px solid #FF982D;padding:20px}#wp-mail-smtp-header img{display:block;margin:0;max-width:242px}@media (max-width: 782px){#wp-mail-smtp-header img{max-width:200px}}#wp-mail-smtp{margin:0}#wp-mail-smtp .wp-mail-smtp-hide{display:none}#wp-mail-smtp .wp-mail-smtp-page-title{height:58px;background-color:#fff;font-size:14px;margin:0 0 20px 0;padding:0 20px}#wp-mail-smtp .wp-mail-smtp-page-title a.tab{border-bottom:2px solid #fff;box-shadow:none;color:#666;display:inline-block;margin-right:30px;padding:20px 0 18px 0;text-decoration:none}#wp-mail-smtp .wp-mail-smtp-page-title a.tab.active{border-bottom:2px solid #FF982D}#wp-mail-smtp .wp-mail-smtp-page-title a.tab:hover{border-color:#999}#wp-mail-smtp .wp-mail-smtp-page-title a.action{padding:5px;border:0;min-height:auto;color:#fff;margin:-10px 0 0 20px}#wp-mail-smtp .wp-mail-smtp-page-title .page-title{background-color:#fff;display:inline-block;font-size:23px;margin:0;padding:20px 20px 20px 0}#wp-mail-smtp .wp-mail-smtp-page-content{padding:0 20px}#wp-mail-smtp .wp-mail-smtp-page-content *,#wp-mail-smtp .wp-mail-smtp-page-content *::before,#wp-mail-smtp .wp-mail-smtp-page-content *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-clear:before{content:" ";display:table}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-clear:after{clear:both;content:" ";display:table}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row{border-bottom:1px solid #e4e4e4;padding:30px 0;font-size:14px;line-height:1.3}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row:first-of-type{padding-top:10px !important}@media (max-width: 781px){#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row{padding:20px 0}}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.inactive{display:none}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row .wp-mail-smtp-setting-mid-row-sep{background:#e4e4e4;height:1px;border:0;margin:15px 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.section-heading{padding:20px 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.section-heading.no-desc h2,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.section-heading.no-desc h4{margin:0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.section-heading .wp-mail-smtp-setting-field{margin:0;max-width:1005px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox input[type=checkbox]{float:left;margin:1px 0 0 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox input[type=checkbox]+label{margin:0 0 0 8px;vertical-align:baseline}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox .desc{margin:0 0 0 30px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox input[type=checkbox]+label+.desc{margin:8px 0 0 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-text .wp-mail-smtp-setting-label,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-password .wp-mail-smtp-setting-label,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-number .wp-mail-smtp-setting-label,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-email .wp-mail-smtp-setting-label{padding-top:8px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-select .wp-mail-smtp-setting-label{padding-top:8px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-radio .wp-mail-smtp-setting-field input[type=radio]{margin:-3px 10px 0 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-radio .wp-mail-smtp-setting-field label{margin-right:30px;display:inline-block}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field label{vertical-align:middle;display:inline-block}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field label:hover .wp-mail-smtp-setting-toggle-switch{background-color:#999}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]{display:none}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:checked+.wp-mail-smtp-setting-toggle-switch{background-color:#46B450}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:checked+.wp-mail-smtp-setting-toggle-switch:before{-webkit-transform:translateX(19px);-ms-transform:translateX(19px);transform:translateX(19px)}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:disabled+.wp-mail-smtp-setting-toggle-switch{background-color:#a0daa5;cursor:default}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:checked+.wp-mail-smtp-setting-toggle-switch+.wp-mail-smtp-setting-toggle-checked-label{display:inline-block}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:checked+.wp-mail-smtp-setting-toggle-switch+.wp-mail-smtp-setting-toggle-checked-label+.wp-mail-smtp-setting-toggle-unchecked-label{display:none}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:disabled+.wp-mail-smtp-setting-toggle-switch+.wp-mail-smtp-setting-toggle-checked-label,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field input[type=checkbox]:disabled+.wp-mail-smtp-setting-toggle-switch+.wp-mail-smtp-setting-toggle-unchecked-label{color:#aaa}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field .wp-mail-smtp-setting-toggle-unchecked-label,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field .wp-mail-smtp-setting-toggle-checked-label{text-transform:uppercase;font-weight:400;color:#777;font-size:13px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field .wp-mail-smtp-setting-toggle-checked-label{display:none}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field .wp-mail-smtp-setting-toggle-switch{position:relative;cursor:pointer;background-color:#ccc;border-radius:15px;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;vertical-align:middle;position:relative;display:inline-block;margin:0 5px 0 0;width:40px;height:20px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-checkbox-toggle .wp-mail-smtp-setting-field .wp-mail-smtp-setting-toggle-switch:before{position:absolute;content:"";height:14px;width:14px;left:3px;top:3px;background-color:#fff;border-radius:50%;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer{padding-bottom:20px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer{display:inline-block;width:140px;margin-right:12px;margin-bottom:12px;position:relative}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer .wp-mail-smtp-mailer-image{background:#fff;text-align:center;border:2px solid #E5E5E5;border-radius:4px;cursor:pointer;height:76px;position:relative;margin-bottom:10px;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer .wp-mail-smtp-mailer-image.is-recommended{background-image:url(../images/recommended.svg);background-repeat:no-repeat;background-size:60%;background-position:top right -2px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer .wp-mail-smtp-mailer-image img{max-width:90%;max-height:40px;display:block;position:relative;top:50%;left:50%;transform:translate(-50%, -50%);opacity:0.6;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer.wp-mail-smtp-mailer-smtp .wp-mail-smtp-mailer-image img{max-height:30px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer.active .wp-mail-smtp-mailer-image{border-color:#FF982D}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer.active .wp-mail-smtp-mailer-image img{opacity:1}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer:hover .wp-mail-smtp-mailer-image{border-color:#ccc}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row.wp-mail-smtp-setting-row-mailer .wp-mail-smtp-mailers .wp-mail-smtp-mailer:hover .wp-mail-smtp-mailer-image img{opacity:1}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row h2,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row h4{color:#444;font-size:20px;font-weight:700;margin:0 0 6px 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row h2{margin-bottom:15px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row h3{color:#444;font-size:24px;font-weight:600;margin:0 0 20px 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p{margin:12px 0 0;font-size:14px;line-height:1.5em}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p:first-of-type{margin:8px 0 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.desc{font-style:italic;color:#777}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.buttonned{margin-top:30px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.inline-notice{margin:5px 0 15px;box-sizing:border-box;background:#fff;border-left:4px solid transparent;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1)}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.inline-notice.inline-error{border-color:#dc3232;margin-bottom:5px;padding:10px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.inline-notice.inline-edu-notice{border-color:#809EB0;line-height:1.5em;padding:10px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.inline-notice a.wp-mail-smtp-mailer-notice-dismiss{float:right;color:#999DA1;margin:0 0 10px 10px;text-decoration:none}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row p.inline-notice a.wp-mail-smtp-mailer-notice-dismiss:hover{color:#666a6e}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row ul{margin:8px 0 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row ul.list li{margin-left:20px;list-style-type:disc}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list th{padding:5px 5px 5px 0;text-align:left}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.email{padding-right:2em}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.status{width:100px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.actions a{border-bottom:1px solid;display:inline-block;margin-right:5px;text-decoration:none}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.actions a[class*=delete]{color:#a00}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.actions a[class*=delete]:hover,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.actions a[class*=delete]:active,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row table.actions-list td.actions a[class*=delete]:focus{color:#400}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=text],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=email],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=number],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=password]{background-color:#fff;border:1px solid #ddd;border-radius:3px;box-shadow:none;color:#333;display:inline-block;vertical-align:middle;padding:7px 12px;margin:0 10px 0 0;width:400px;min-height:35px;line-height:1.3}@media (max-width: 959px){#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=text],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=email],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=number],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=password]{width:300px}}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=text][readonly],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=email][readonly],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=number][readonly],#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=password][readonly]{background-color:#f9f9f9}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=text].small-text,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=email].small-text,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=number].small-text,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=password].small-text{width:75px}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=text]:focus,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=email]:focus,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=number]:focus,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=password]:focus{border-color:#bbb}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=text]:disabled,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=email]:disabled,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=number]:disabled,#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-row input[type=password]:disabled{opacity:0.6}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-label{display:block;float:left;width:205px;padding:0 20px 0 0}@media (max-width: 781px){#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-label{float:none;width:100%;padding-bottom:15px}}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-label label{display:block;font-weight:600}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-field{display:block;margin:0 0 0 205px;max-width:800px}@media (max-width: 781px){#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-setting-field{margin:0}}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-submit{margin:0;padding:25px 0}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-submit .help-text{margin-left:10px;vertical-align:middle}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-mailer-options .wp-mail-smtp-mailer-option .wp-mail-smtp-setting-row.section-heading{padding:20px 0 !important}#wp-mail-smtp .wp-mail-smtp-page-content .wp-mail-smtp-mailer-options .wp-mail-smtp-mailer-option blockquote{background:#E5E5E5;border-radius:4px;color:#666;font-size:14px;margin:20px 0;padding:15px;width:1005px}#wp-mail-smtp .wp-mail-smtp-page-content.wp-mail-smtp-page-general p{margin:0}#wp-mail-smtp .wp-mail-smtp-page-content .notice-inline{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);margin:5px 0 15px;padding:1px 12px}#wp-mail-smtp .wp-mail-smtp-page-content .notice-inline.notice-success{border-left-color:#46b450}#wp-mail-smtp .wp-mail-smtp-page-content .notice-inline.notice-warning{border-left-color:#ffb900}#wp-mail-smtp .wp-mail-smtp-page-content .notice-inline.notice-error{border-left-color:#dc3232}#wp-mail-smtp .wp-mail-smtp-page-content .notice-inline.notice-info{border-left-color:#00a0d2}#wp-mail-smtp .wp-mail-smtp-page-content .notice p,#wp-mail-smtp .wp-mail-smtp-page-content .notice-inline p{margin:0.5em 0;padding:2px}#wp-mail-smtp .wp-mail-smtp-page-content pre{white-space:pre-line}#wp-mail-smtp .wp-mail-smtp-page-content.active{display:block}#wp-mail-smtp .wp-mail-smtp-page-content .connected-as{margin-left:30px}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug{background-color:#fff;padding:25px 20px 1px 25px}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug h2{color:#444;margin:1.4em 0 0.8em;font-size:16px;font-weight:700}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug p{font-size:14px;color:#555;margin-bottom:1.1em}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ul,#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ol{font-size:14px;color:#555;margin:0 0 1.1em 1.8em}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ul li,#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ol li{margin:0 0 8px 0;line-height:1.5}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ul li:last-of-type,#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ol li:last-of-type{margin:0}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ul li ul,#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug ol li ul{list-style-type:disc}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug a{color:#FF982D}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug a:hover{color:#f97f00}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .dashicons-star-filled{color:#FF982D;width:16px;height:16px;font-size:16px;vertical-align:text-top}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .price-off{color:green;font-weight:bold}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .error-log-toggle{text-decoration:none;color:#444}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .error-log-toggle:hover{color:#FF982D}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .error-log-toggle .dashicons{font-size:15px;height:15px;width:15px;padding-top:3px;border:0;outline:0}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .error-log{border-left:3px solid #ffb900;padding:0 0 0 20px;margin:0 0 10px 0;font-size:12px;display:none}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .error-log pre{margin:0}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-debug .error-log-note{display:none}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner{background-color:#fff;padding:25px 20px;border:1px solid #dadada;margin:10px 0 0 0;position:relative}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .wp-mail-smtp-pro-banner-dismiss{position:absolute;right:10px;top:10px}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .wp-mail-smtp-pro-banner-dismiss button{background:none;border:none;color:#a9a9a9;cursor:pointer;margin:0;padding:0}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner h2{color:#444;margin-top:0;font-size:16px;font-weight:700}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner p{font-size:14px;color:#555;margin-bottom:1.1em}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner p:last-of-type{margin:0}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .benefits{margin:0 0 16px 0;overflow:auto;max-width:1000px}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .benefits ul{margin:0;padding:0;width:50%;float:left}@media (max-width: 600px){#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .benefits ul{width:100%;float:none}}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .benefits ul li{margin:0;padding:0 0 2px 16px;color:#555;font-size:14px;position:relative}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .benefits ul li:before{content:'+';position:absolute;top:-1px;left:0}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .benefits ul li.arrow-right:before{content:'→'}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner a{color:#FF982D}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner a:hover,#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner a:active,#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner a:focus{color:#f97f00}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .stars{text-decoration:none}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .stars .dashicons{width:16px;height:16px;font-size:16px;vertical-align:text-top}#wp-mail-smtp .wp-mail-smtp-page-content #wp-mail-smtp-pro-banner .price-off{color:green;font-weight:bold}#wp-mail-smtp .wp-mail-smtp-admin-columns>div[class*="-column-"]{float:left}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-20{width:20%}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-33{width:33.33333%}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-40{width:40%}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-50{width:50%}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-60{width:60%}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-80{width:80%}#wp-mail-smtp .wp-mail-smtp-admin-columns .wp-mail-smtp-admin-column-last{float:right !important}#wp-mail-smtp .wp-mail-smtp-admin-columns:after{content:"";display:table;clear:both}#wp-mail-smtp .wp-mail-smtp-page-upsell{display:flex;align-items:center;justify-content:center;height:auto;flex-direction:column}#wp-mail-smtp .wp-mail-smtp-page-upsell>*{width:800px}#wp-mail-smtp .wp-mail-smtp-page-upsell *,#wp-mail-smtp .wp-mail-smtp-page-upsell *::before,#wp-mail-smtp .wp-mail-smtp-page-upsell *::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#wp-mail-smtp .wp-mail-smtp-page-upsell h2{font-size:24px;color:#444444;text-align:center}#wp-mail-smtp .wp-mail-smtp-page-upsell h3{font-size:16px;font-weight:normal;color:#72777C;line-height:1.5em;margin-top:0;margin-bottom:6px;text-align:center}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features{margin-bottom:40px;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:stretch;align-content:flex-start}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature{display:flex;flex-direction:row;width:360px;align-items:flex-start;align-content:flex-start;margin-right:60px;margin-top:40px}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature:nth-of-type(1){margin-top:20px}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature:nth-of-type(2){margin-top:20px}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature:nth-of-type(even){margin-right:0}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature .wp-mail-smtp-page-upsell-feature-image{display:flex;align-items:center}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature .wp-mail-smtp-page-upsell-feature-image svg{height:64px;width:64px}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature .wp-mail-smtp-page-upsell-feature-image .st0{fill:#C3D0D7}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature .wp-mail-smtp-page-upsell-feature-image .st1{fill:#809DB0}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature .wp-mail-smtp-page-upsell-feature-content{margin-left:20px}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature .wp-mail-smtp-page-upsell-feature-content h4{font-size:15px;margin:0 0 0.5em}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-content .wp-mail-smtp-page-upsell-features .wp-mail-smtp-page-upsell-feature .wp-mail-smtp-page-upsell-feature-content p{color:#72777C;margin:0}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-images{margin-top:20px;margin-bottom:30px;text-align:center}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-images img{width:380px;height:auto;margin-right:30px;border:5px solid #fff;border-radius:5px;box-shadow:0 5px 15px rgba(0,0,0,0.1);float:left}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-images img:last-child{margin-right:0}#wp-mail-smtp .wp-mail-smtp-page-upsell .wp-mail-smtp-page-upsell-button{text-align:center}.wp-mail-smtp-btn{border:0;border-radius:3px;cursor:pointer;display:inline-block;margin:0;text-decoration:none;text-align:center;vertical-align:middle;white-space:nowrap;text-shadow:none;box-shadow:none;outline:none}.wp-mail-smtp-btn .dashicons{font-size:16px;width:16px;height:16px}.wp-mail-smtp-btn:disabled{opacity:0.5;cursor:not-allowed}.wp-mail-smtp-btn.wp-mail-smtp-btn-md{font-size:13px;font-weight:600;padding:8px 12px;min-height:35px}.wp-mail-smtp-btn.wp-mail-smtp-btn-lg{font-size:16px;font-weight:600;padding:16px 28px}.wp-mail-smtp-btn.wp-mail-smtp-btn-orange{background-color:#FF982D;border-color:#FF982D;color:#fff}.wp-mail-smtp-btn.wp-mail-smtp-btn-orange:hover,.wp-mail-smtp-btn.wp-mail-smtp-btn-orange:active,.wp-mail-smtp-btn.wp-mail-smtp-btn-orange:focus{background-color:#f97f00;border-color:#f97f00}.wp-mail-smtp-btn.wp-mail-smtp-btn-red{background-color:#DC3232;border-color:#DC3232;color:#fff}.wp-mail-smtp-btn.wp-mail-smtp-btn-red:hover,.wp-mail-smtp-btn.wp-mail-smtp-btn-red:active,.wp-mail-smtp-btn.wp-mail-smtp-btn-red:focus{background-color:darkred;border-color:darkred}.wp-mail-smtp-btn.wp-mail-smtp-btn-grey{background-color:#f5f5f5;border:1px solid #ccc;color:#666}.wp-mail-smtp-btn.wp-mail-smtp-btn-grey:hover,.wp-mail-smtp-btn.wp-mail-smtp-btn-grey:active,.wp-mail-smtp-btn.wp-mail-smtp-btn-grey:focus{background-color:#d7d7d7;border-color:#ccc;color:#444}.wp-mail-smtp-btn.wp-mail-smtp-btn-light-grey{background-color:#f5f5f5;border:1px solid #ccc;color:#666}.wp-mail-smtp-btn.wp-mail-smtp-btn-light-grey:hover,.wp-mail-smtp-btn.wp-mail-smtp-btn-light-grey:active,.wp-mail-smtp-btn.wp-mail-smtp-btn-light-grey:focus{background-color:#eee;color:#444}.wp-mail-smtp-btn.wp-mail-smtp-btn-blueish{background-color:#738e9e;border:1px solid #738e9e;color:#fff}.wp-mail-smtp-btn.wp-mail-smtp-btn-blueish:hover,.wp-mail-smtp-btn.wp-mail-smtp-btn-blueish:active,.wp-mail-smtp-btn.wp-mail-smtp-btn-blueish:focus{background-color:#395360;border-color:#395360;color:#fff}
/*# sourceMappingURL=smtp-admin.min.css.map */
diff --git a/wp-content/plugins/wp-mail-smtp/assets/images/control/admin.png b/wp-content/plugins/wp-mail-smtp/assets/images/control/admin.png
deleted file mode 100644
index 243b3d0..0000000
Binary files a/wp-content/plugins/wp-mail-smtp/assets/images/control/admin.png and /dev/null differ
diff --git a/wp-content/plugins/wp-mail-smtp/assets/images/control/comments.png b/wp-content/plugins/wp-mail-smtp/assets/images/control/comments.png
deleted file mode 100644
index 3e9eaf0..0000000
Binary files a/wp-content/plugins/wp-mail-smtp/assets/images/control/comments.png and /dev/null differ
diff --git a/wp-content/plugins/wp-mail-smtp/assets/images/control/personal.png b/wp-content/plugins/wp-mail-smtp/assets/images/control/personal.png
deleted file mode 100644
index 08ce029..0000000
Binary files a/wp-content/plugins/wp-mail-smtp/assets/images/control/personal.png and /dev/null differ
diff --git a/wp-content/plugins/wp-mail-smtp/assets/images/control/update.png b/wp-content/plugins/wp-mail-smtp/assets/images/control/update.png
deleted file mode 100644
index 4e20269..0000000
Binary files a/wp-content/plugins/wp-mail-smtp/assets/images/control/update.png and /dev/null differ
diff --git a/wp-content/plugins/wp-mail-smtp/assets/images/control/user_new.png b/wp-content/plugins/wp-mail-smtp/assets/images/control/user_new.png
deleted file mode 100644
index f63bffc..0000000
Binary files a/wp-content/plugins/wp-mail-smtp/assets/images/control/user_new.png and /dev/null differ
diff --git a/wp-content/plugins/wp-mail-smtp/assets/images/control/users.png b/wp-content/plugins/wp-mail-smtp/assets/images/control/users.png
deleted file mode 100644
index c547d3f..0000000
Binary files a/wp-content/plugins/wp-mail-smtp/assets/images/control/users.png and /dev/null differ
diff --git a/wp-content/plugins/wp-mail-smtp/assets/images/font-awesome/check-circle-solid-green.svg b/wp-content/plugins/wp-mail-smtp/assets/images/font-awesome/check-circle-solid-green.svg
new file mode 100644
index 0000000..5eaf778
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/assets/images/font-awesome/check-circle-solid-green.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/wp-content/plugins/wp-mail-smtp/assets/images/font-awesome/exclamation-circle-regular-red.svg b/wp-content/plugins/wp-mail-smtp/assets/images/font-awesome/exclamation-circle-regular-red.svg
new file mode 100644
index 0000000..8287a13
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/assets/images/font-awesome/exclamation-circle-regular-red.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/wp-content/plugins/wp-mail-smtp/assets/images/font-awesome/exclamation-circle-solid-orange.svg b/wp-content/plugins/wp-mail-smtp/assets/images/font-awesome/exclamation-circle-solid-orange.svg
new file mode 100644
index 0000000..7bcfc2a
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/assets/images/font-awesome/exclamation-circle-solid-orange.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/wp-content/plugins/wp-mail-smtp/assets/js/smtp-admin.js b/wp-content/plugins/wp-mail-smtp/assets/js/smtp-admin.js
index 71d2abd..b5c1e43 100644
--- a/wp-content/plugins/wp-mail-smtp/assets/js/smtp-admin.js
+++ b/wp-content/plugins/wp-mail-smtp/assets/js/smtp-admin.js
@@ -168,6 +168,7 @@ WPMailSMTP.Admin.Settings = WPMailSMTP.Admin.Settings || ( function( document, w
} );
app.triggerExitNotice();
+ app.beforeSaveChecks();
},
education: {
@@ -178,6 +179,7 @@ WPMailSMTP.Admin.Settings = WPMailSMTP.Admin.Settings || ( function( document, w
escapeKey: true,
animationBounce: 1,
theme: 'modern',
+ type: 'blue',
animateFromElement: false,
draggable: false,
closeIcon: true,
@@ -263,6 +265,54 @@ WPMailSMTP.Admin.Settings = WPMailSMTP.Admin.Settings || ( function( document, w
$( 'form', $settingPages ).on( 'submit', function() {
app.pluginSettingsChanged = false;
} );
+ },
+
+ /**
+ * Perform any checks before the settings are saved.
+ *
+ * Checks:
+ * - warn users if they try to save the settings with the default (PHP) mailer selected.
+ *
+ * @since 2.1.0
+ */
+ beforeSaveChecks: function() {
+
+ $( 'form', app.pageHolder ).on( 'submit', function() {
+ if ( $( '.wp-mail-smtp-mailer input:checked', app.pageHolder ).val() === 'mail' ) {
+ var $thisForm = $( this );
+
+ $.alert( {
+ backgroundDismiss: false,
+ escapeKey: false,
+ animationBounce: 1,
+ theme: 'modern',
+ type: 'orange',
+ animateFromElement: false,
+ draggable: false,
+ closeIcon: false,
+ useBootstrap: false,
+ icon: '">'+wp_mail_smtp.education.upgrade_icon_lock+''+wp_mail_smtp.education.upgrade_bonus+wp_mail_smtp.education.upgrade_doc+"")},buttons:{confirm:{text:wp_mail_smtp.education.upgrade_button,btnClass:"btn-confirm",keys:["enter"],action:function(){e.open(wp_mail_smtp.education.upgrade_url+"&utm_content="+encodeURI(t.val()),"_blank")}}}})}},mailers:{smtp:{bindActions:function(){a("#wp-mail-smtp-setting-smtp-auth").change(function(){a("#wp-mail-smtp-setting-row-smtp-user, #wp-mail-smtp-setting-row-smtp-pass").toggleClass("inactive")}),a("#wp-mail-smtp-setting-row-smtp-encryption input").change(function(){var t=a(this),i=a("#wp-mail-smtp-setting-smtp-port",n.pageHolder);"tls"===t.val()?(i.val("587"),a("#wp-mail-smtp-setting-row-smtp-autotls").addClass("inactive")):("ssl"===t.val()?i.val("465"):i.val("25"),a("#wp-mail-smtp-setting-row-smtp-autotls").removeClass("inactive"))})}}},triggerExitNotice:function(){var t=a(".wp-mail-smtp-page-general:not( .wp-mail-smtp-tab-test )");a(e).on("beforeunload",function(){if(n.pluginSettingsChanged)return wp_mail_smtp.text_settings_not_saved}),a(":input:not( #wp-mail-smtp-setting-license-key )",t).on("change",function(){n.pluginSettingsChanged=!0}),a("form",t).on("submit",function(){n.pluginSettingsChanged=!1})}};return n}(document,window,jQuery),WPMailSMTP.Admin.Settings.init();
\ No newline at end of file
+"use strict";var WPMailSMTP=window.WPMailSMTP||{};WPMailSMTP.Admin=WPMailSMTP.Admin||{},WPMailSMTP.Admin.Settings=WPMailSMTP.Admin.Settings||function(e,i,a){var n={pluginSettingsChanged:!1,init:function(){a(e).ready(n.ready)},ready:function(){n.pageHolder=a(".wp-mail-smtp-tab-settings"),a("#screen-meta-links, #screen-meta").prependTo("#wp-mail-smtp-header-temp").show(),n.bindActions()},bindActions:function(){a(".wp-mail-smtp-mailer-image",n.pageHolder).click(function(){a(this).parents(".wp-mail-smtp-mailer").find("input").trigger("click")}),a(".wp-mail-smtp-mailer input",n.pageHolder).click(function(){var t=a(this);if(t.prop("disabled"))return t.hasClass("educate")&&n.education.upgradeMailer(t),!1;a(".wp-mail-smtp-mailer",n.pageHolder).removeClass("active"),a(this).parents(".wp-mail-smtp-mailer").addClass("active"),a(".wp-mail-smtp-mailer-option",n.pageHolder).addClass("hidden").removeClass("active"),a(".wp-mail-smtp-mailer-option-"+a(this).val(),n.pageHolder).addClass("active").removeClass("hidden")}),n.mailers.smtp.bindActions(),a("#wp-mail-smtp-pro-banner-dismiss",n.pageHolder).on("click",function(){a.ajax({url:ajaxurl,dataType:"json",type:"POST",data:{action:"wp_mail_smtp_ajax",task:"pro_banner_dismiss"}}).always(function(){a("#wp-mail-smtp-pro-banner",n.pageHolder).fadeOut("fast")})}),a(".js-wp-mail-smtp-mailer-notice-dismiss",n.pageHolder).on("click",function(t){t.preventDefault();var e=a(this),i=e.parents(".inline-notice");if(e.hasClass("disabled"))return!1;a.ajax({url:ajaxurl,dataType:"json",type:"POST",data:{action:"wp_mail_smtp_ajax",task:"notice_dismiss",notice:i.data("notice"),mailer:i.data("mailer")},beforeSend:function(){e.addClass("disabled")}}).always(function(){i.fadeOut("fast",function(){e.removeClass("disabled")})})}),a("#wp-mail-smtp-debug .error-log-toggle").on("click",function(t){t.preventDefault(),a("#wp-mail-smtp-debug .error-log-toggle").find(".dashicons").toggleClass("dashicons-arrow-right-alt2 dashicons-arrow-down-alt2"),a("#wp-mail-smtp-debug .error-log").slideToggle(),a("#wp-mail-smtp-debug .error-log-note").toggle()}),a(".js-wp-mail-smtp-provider-remove",n.pageHolder).on("click",function(){return confirm(wp_mail_smtp.text_provider_remove)}),a(".wp-mail-smtp-setting-copy",n.pageHolder).click(function(t){t.preventDefault(),a("#"+a(this).data("source_id")).get(0).select(),e.execCommand("Copy")}),n.triggerExitNotice(),n.beforeSaveChecks()},education:{upgradeMailer:function(t){a.alert({backgroundDismiss:!0,escapeKey:!0,animationBounce:1,theme:"modern",type:"blue",animateFromElement:!1,draggable:!1,closeIcon:!0,useBootstrap:!1,title:wp_mail_smtp.education.upgrade_title.replace(/%name%/g,t.siblings("label").text().trim()),icon:'">'+wp_mail_smtp.education.upgrade_icon_lock+''+wp_mail_smtp.education.upgrade_bonus+wp_mail_smtp.education.upgrade_doc+"")},buttons:{confirm:{text:wp_mail_smtp.education.upgrade_button,btnClass:"btn-confirm",keys:["enter"],action:function(){i.open(wp_mail_smtp.education.upgrade_url+"&utm_content="+encodeURI(t.val()),"_blank")}}}})}},mailers:{smtp:{bindActions:function(){a("#wp-mail-smtp-setting-smtp-auth").change(function(){a("#wp-mail-smtp-setting-row-smtp-user, #wp-mail-smtp-setting-row-smtp-pass").toggleClass("inactive")}),a("#wp-mail-smtp-setting-row-smtp-encryption input").change(function(){var t=a(this),e=a("#wp-mail-smtp-setting-smtp-port",n.pageHolder);"tls"===t.val()?(e.val("587"),a("#wp-mail-smtp-setting-row-smtp-autotls").addClass("inactive")):("ssl"===t.val()?e.val("465"):e.val("25"),a("#wp-mail-smtp-setting-row-smtp-autotls").removeClass("inactive"))})}}},triggerExitNotice:function(){var t=a(".wp-mail-smtp-page-general:not( .wp-mail-smtp-tab-test )");a(i).on("beforeunload",function(){if(n.pluginSettingsChanged)return wp_mail_smtp.text_settings_not_saved}),a(":input:not( #wp-mail-smtp-setting-license-key )",t).on("change",function(){n.pluginSettingsChanged=!0}),a("form",t).on("submit",function(){n.pluginSettingsChanged=!1})},beforeSaveChecks:function(){a("form",n.pageHolder).on("submit",function(){if("mail"===a(".wp-mail-smtp-mailer input:checked",n.pageHolder).val()){var t=a(this);return a.alert({backgroundDismiss:!1,escapeKey:!1,animationBounce:1,theme:"modern",type:"orange",animateFromElement:!1,draggable:!1,closeIcon:!1,useBootstrap:!1,icon:'">\n"
"Language-Team: LANGUAGE The Default (PHP) mailer is currently selected, but is not recommended because in most cases it does not resolve email delivery issues. Please consider selecting and configuring one of the other mailers. The Default (PHP) mailer is currently selected, but is not recommended because in most cases it does not resolve email delivery issues. Please consider selecting and configuring one of the other mailers.
applied at checkout."
-msgstr ""
-
-#: src/Admin/Area.php:288
-msgid "Already purchased?"
-msgstr ""
-
-#: src/Admin/Area.php:355
-#: src/Admin/Area.php:362
-#: src/Admin/Pages/About.php:308
-msgid "Activate"
-msgstr ""
-
-#: src/Admin/Area.php:356
-#: src/Admin/Pages/About.php:300
-msgid "Activated"
-msgstr ""
-
-#: src/Admin/Area.php:357
-#: src/Admin/Pages/About.php:297
-msgid "Active"
-msgstr ""
-
-#: src/Admin/Area.php:358
-#: src/Admin/Pages/About.php:305
-msgid "Inactive"
-msgstr ""
-
-#: src/Admin/Area.php:359
-msgid "Processing..."
-msgstr ""
-
-#: src/Admin/Area.php:360
-msgid "Could not install a plugin. Please download from WordPress.org and install manually."
-msgstr ""
-
-#: src/Admin/Area.php:361
-msgid "Install and Activate"
-msgstr ""
-
-#: src/Admin/Area.php:363
-msgid "Download"
-msgstr ""
-
-#. translators: %1$s - WP.org link; %2$s - same WP.org link.
-#: src/Admin/Area.php:423
-msgid "Please rate WP Mail SMTP ★★★★★ on WordPress.org to help us spread the word. Thank you from the WP Mail SMTP team!"
-msgstr ""
-
-#: src/Admin/Area.php:743
-msgid "WP Mail SMTP Pro related message was successfully dismissed."
-msgstr ""
-
-#: src/Admin/Area.php:762
-msgid "Educational notice for this mailer was successfully dismissed."
-msgstr ""
-
-#: src/Admin/Area.php:801
-msgid "Go to WP Mail SMTP Settings page"
-msgstr ""
-
-#: src/Admin/Area.php:808
-msgid "Go to WP Mail SMTP Lite vs Pro comparison page"
-msgstr ""
-
-#: src/Admin/Area.php:809
-msgid "Premium Support"
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:307
+#: src/Admin/Area.php:307
+msgid "
applied at checkout."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:333
+#: src/Admin/Area.php:333
+msgid "Already purchased?"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:400
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:407
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:308
+#: src/Admin/Area.php:400
+#: src/Admin/Area.php:407
+#: src/Admin/Pages/About.php:308
+msgid "Activate"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:401
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:300
+#: src/Admin/Area.php:401
+#: src/Admin/Pages/About.php:300
+msgid "Activated"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:402
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:297
+#: src/Admin/Area.php:402
+#: src/Admin/Pages/About.php:297
+msgid "Active"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:403
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:305
+#: src/Admin/Area.php:403
+#: src/Admin/Pages/About.php:305
+msgid "Inactive"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:404
+#: src/Admin/Area.php:404
+msgid "Processing..."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:405
+#: src/Admin/Area.php:405
+msgid "Could not install a plugin. Please download from WordPress.org and install manually."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:406
+#: src/Admin/Area.php:406
+msgid "Install and Activate"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:408
+#: src/Admin/Area.php:408
+msgid "Download"
+msgstr ""
+
+#. translators: %1$s - WP.org link; %2$s - same WP.org link.
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:468
+#: src/Admin/Area.php:468
+msgid "Please rate WP Mail SMTP ★★★★★ on WordPress.org to help us spread the word. Thank you from the WP Mail SMTP team!"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:805
+#: src/Admin/Area.php:805
+msgid "WP Mail SMTP Pro related message was successfully dismissed."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:824
+#: src/Admin/Area.php:824
+msgid "Educational notice for this mailer was successfully dismissed."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:863
+#: src/Admin/Area.php:863
+msgid "Go to WP Mail SMTP Settings page"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:870
+#: src/Admin/Area.php:870
+msgid "Go to WP Mail SMTP Lite vs Pro comparison page"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Area.php:871
+#: src/Admin/Area.php:871
+msgid "Premium Support"
+msgstr ""
+
#. translators: %s - plugin current license type.
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:98
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:526
#: src/Admin/Pages/About.php:98
#: src/Admin/Pages/About.php:526
msgid "%s vs Pro"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:170
#: src/Admin/Pages/About.php:170
msgid "Hello and welcome to WP Mail SMTP, the easiest and most popular WordPress SMTP plugin. We build software that helps your site reliably deliver emails every time."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:174
#: src/Admin/Pages/About.php:174
msgid "Email deliverability has been a well-documented problem for all WordPress websites. However as WPForms grew, we became more aware of this painful issue that affects our users and the larger WordPress community. So we decided to solve this problem and make a solution that's beginner friendly."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:177
#: src/Admin/Pages/About.php:177
msgid "Our goal is to make reliable email deliverability easy for WordPress."
msgstr ""
#. translators: %1$s - WPForms URL, %2$s - WPBeginner URL, %3$s - OptinMonster URL, %4$s - MonsterInsights URL, %5$s - RafflePress URL
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:184
#: src/Admin/Pages/About.php:184
msgid "WP Mail SMTP is brought to you by the same team that's behind the most user friendly WordPress forms, WPForms, the largest WordPress resource site, WPBeginner, the most popular lead-generation software, OptinMonster, the best WordPress analytics plugin, MonsterInsights, and the most powerful WordPress contest plugin, RafflePress."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:202
#: src/Admin/Pages/About.php:202
msgid "Yup, we know a thing or two about building awesome products that customers love."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:208
#: src/Admin/Pages/About.php:208
msgid "The WPForms Team photo"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:210
#: src/Admin/Pages/About.php:210
msgid "The WPForms Team"
msgstr ""
#. translators: %s - status HTML text.
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:250
#: src/Admin/Pages/About.php:250
msgid "Status: %s"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:316
#: src/Admin/Pages/About.php:316
msgid "Not Installed"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:319
#: src/Admin/Pages/About.php:319
msgid "Install Plugin"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:340
#: src/Admin/Pages/About.php:340
msgid "MonsterInsights"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:341
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:347
#: src/Admin/Pages/About.php:341
#: src/Admin/Pages/About.php:347
msgid "MonsterInsights makes it “effortless” to properly connect your WordPress site with Google Analytics, so you can start making data-driven decisions to grow your business."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:346
#: src/Admin/Pages/About.php:346
msgid "MonsterInsights Pro"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:354
#: src/Admin/Pages/About.php:354
msgid "OptinMonster"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:355
#: src/Admin/Pages/About.php:355
msgid "Our high-converting optin forms like Exit-Intent® popups, Fullscreen Welcome Mats, and Scroll boxes help you dramatically boost conversions and get more email subscribers."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:361
#: src/Admin/Pages/About.php:361
msgid "Contact Forms by WPForms"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:362
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:368
#: src/Admin/Pages/About.php:362
#: src/Admin/Pages/About.php:368
msgid "The best WordPress contact form plugin. Drag & Drop online form builder that helps you create beautiful contact forms with just a few clicks."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:367
#: src/Admin/Pages/About.php:367
msgid "WPForms Pro"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:375
#: src/Admin/Pages/About.php:375
msgid "RafflePress"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:376
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:382
#: src/Admin/Pages/About.php:376
#: src/Admin/Pages/About.php:382
msgid "Turn your visitors into brand ambassadors! Easily grow your email list, website traffic, and social media followers with powerful viral giveaways & contests."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:381
#: src/Admin/Pages/About.php:381
msgid "RafflePress Pro"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:401
#: src/Admin/Pages/About.php:401
msgid "Could not activate the plugin. Please activate it from the Plugins page."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:413
#: src/Admin/Pages/About.php:413
msgid "Plugin activated."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:430
#: src/Admin/Pages/About.php:430
msgid "Could not install the plugin."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:491
#: src/Admin/Pages/About.php:491
msgid "Plugin installed & activated."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:499
#: src/Admin/Pages/About.php:499
msgid "Plugin installed."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:534
#: src/Admin/Pages/About.php:534
msgid "Get the most out of WP Mail SMTP by upgrading to Pro and unlocking all of the powerful features."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:543
#: src/Admin/Pages/About.php:543
msgid "Feature"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:553
#: src/Admin/Pages/About.php:553
msgid "Pro"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:594
#: src/Admin/Pages/About.php:594
msgid "Get WP Mail SMTP Pro Today and Unlock all of these Powerful Features"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:601
#: src/Admin/Pages/About.php:601
msgid "Bonus: WP Mail SMTP Lite users get $50 off regular price, automatically applied at checkout."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:628
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:27
#: src/Admin/Pages/About.php:628
#: src/Admin/Pages/ControlTab.php:27
msgid "Email Controls"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:629
#: src/Admin/Pages/About.php:629
msgid "Additional Mailers"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:630
#: src/Admin/Pages/About.php:630
msgid "Customer Support"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:651
#: src/Admin/Pages/About.php:651
msgid "Emails are not logged"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:657
#: src/Admin/Pages/About.php:657
msgid "Complete Email Log management inside WordPress"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:665
#: src/Admin/Pages/About.php:665
msgid "No controls over whether default WordPress emails are sent"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:671
#: src/Admin/Pages/About.php:671
msgid "Complete Email Controls management for most default WordPress emails"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:679
#: src/Admin/Pages/About.php:679
msgid "Only default list of mailers"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:685
#: src/Admin/Pages/About.php:685
msgid "Additional mailers: Microsoft Outlook (with Office365 support) and Amazon SES"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:693
#: src/Admin/Pages/About.php:693
msgid "Limited Support"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/About.php:699
#: src/Admin/Pages/About.php:699
msgid "Priority Support"
msgstr ""
-#: src/Admin/Pages/ControlTab.php:46
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:48
+#: src/Admin/Pages/ControlTab.php:48
msgid "Comment Notifications"
msgstr ""
-#: src/Admin/Pages/ControlTab.php:47
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:49
+#: src/Admin/Pages/ControlTab.php:49
msgid "Manage emails sent when comments are published or awaiting moderation."
msgstr ""
-#: src/Admin/Pages/ControlTab.php:51
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:53
+#: src/Admin/Pages/ControlTab.php:53
msgid "Site Admin Email Change Notifications"
msgstr ""
-#: src/Admin/Pages/ControlTab.php:52
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:54
+#: src/Admin/Pages/ControlTab.php:54
msgid "Manage emails sent when site admin's account has been changed."
msgstr ""
-#: src/Admin/Pages/ControlTab.php:56
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:58
+#: src/Admin/Pages/ControlTab.php:58
msgid "User Change Notifications"
msgstr ""
-#: src/Admin/Pages/ControlTab.php:57
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:59
+#: src/Admin/Pages/ControlTab.php:59
msgid "Limit emails triggered by password changed/reset, email changed, and more."
msgstr ""
-#: src/Admin/Pages/ControlTab.php:61
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:63
+#: src/Admin/Pages/ControlTab.php:63
msgid "Personal Data Requests Notifications"
msgstr ""
-#: src/Admin/Pages/ControlTab.php:62
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:64
+#: src/Admin/Pages/ControlTab.php:64
msgid "Control emails for data requests and data removal actions."
msgstr ""
-#: src/Admin/Pages/ControlTab.php:66
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:68
+#: src/Admin/Pages/ControlTab.php:68
msgid "Automatic Update Notifications"
msgstr ""
-#: src/Admin/Pages/ControlTab.php:67
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:69
+#: src/Admin/Pages/ControlTab.php:69
msgid "Manage emails sent by the core automatic update process."
msgstr ""
-#: src/Admin/Pages/ControlTab.php:71
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:73
+#: src/Admin/Pages/ControlTab.php:73
msgid "New User Notifications"
msgstr ""
-#: src/Admin/Pages/ControlTab.php:72
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:74
+#: src/Admin/Pages/ControlTab.php:74
msgid "Toggle emails sent to both user and site administrator about new user accounts."
msgstr ""
-#: src/Admin/Pages/ControlTab.php:79
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:92
+#: src/Admin/Pages/ControlTab.php:92
msgid "Unlock Email Controls"
msgstr ""
-#: src/Admin/Pages/ControlTab.php:82
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:95
+#: src/Admin/Pages/ControlTab.php:95
msgid "Email Controls allows you to granularly manage emails sent by WordPress.
"
msgstr ""
-#: src/Admin/Pages/ControlTab.php:106
-#: src/Admin/Pages/Logs.php:77
+#: build/wp-mail-smtp-pro/src/Admin/Pages/ControlTab.php:119
+#: build/wp-mail-smtp-pro/src/Admin/Pages/LogsTab.php:67
+#: src/Admin/Pages/ControlTab.php:119
+#: src/Admin/Pages/LogsTab.php:67
msgid "Upgrade to WP Mail SMTP Pro"
msgstr ""
-#: src/Admin/Pages/Logs.php:63
+#: build/wp-mail-smtp-pro/src/Admin/Pages/LogsTab.php:53
+#: src/Admin/Pages/LogsTab.php:53
msgid "Unlock Email Logging"
msgstr ""
-#: src/Admin/Pages/Logs.php:66
+#: build/wp-mail-smtp-pro/src/Admin/Pages/LogsTab.php:56
+#: src/Admin/Pages/LogsTab.php:56
msgid "Keep track of every email sent from your WordPress site with email logging.
"
msgstr ""
-#: src/Admin/Pages/Logs.php:67
+#: build/wp-mail-smtp-pro/src/Admin/Pages/LogsTab.php:57
+#: src/Admin/Pages/LogsTab.php:57
msgid "Troubleshoot sending issues, recover lost emails, and more!"
msgstr ""
-#: src/Admin/Pages/Logs.php:71
+#: build/wp-mail-smtp-pro/src/Admin/Pages/LogsTab.php:61
+#: src/Admin/Pages/LogsTab.php:61
msgid "Logs Archive Page Screenshot"
msgstr ""
-#: src/Admin/Pages/Logs.php:72
+#: build/wp-mail-smtp-pro/src/Admin/Pages/LogsTab.php:62
+#: src/Admin/Pages/LogsTab.php:62
msgid "Logs Single Page Screenshot"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:24
#: src/Admin/Pages/MiscTab.php:24
msgid "Misc"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:56
#: src/Admin/Pages/MiscTab.php:56
msgid "Do Not Send"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:65
#: src/Admin/Pages/MiscTab.php:65
msgid "Check this if you would like to stop sending all emails."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:71
#: src/Admin/Pages/MiscTab.php:71
msgid "Some plugins, like BuddyPress and Events Manager, are using their own email delivery solutions. By default, this option does not block their emails, as those plugins do not use default wp_mail()
function to send emails."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:79
#: src/Admin/Pages/MiscTab.php:79
msgid "You will need to consult with their documentation to switch them to use default WordPress email delivery."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:81
#: src/Admin/Pages/MiscTab.php:81
msgid "Test emails are allowed to be sent, regardless of this option."
msgstr ""
#. translators: %1$s - constant that was used; %2$s - file where it was used.
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:86
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:468
#: src/Admin/Pages/MiscTab.php:86
#: src/Providers/OptionsAbstract.php:468
msgid "The value of this field was set using a constant %1$s most likely inside %2$s of your WordPress installation."
msgstr ""
-#. translators: %s - file to put that constant in.
-#: src/Admin/Pages/MiscTab.php:92
-msgid "If you want to enable this option using constants, put the lines below to your %s file:"
+#. translators: %s - The URL to the constants support article.
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:93
+#: src/Admin/Pages/MiscTab.php:93
+msgid "Please read this support article if you want to enable this option using constants."
msgstr ""
-#: src/Admin/Pages/MiscTab.php:111
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:114
+#: src/Admin/Pages/MiscTab.php:114
msgid "Hide Announcements"
msgstr ""
-#: src/Admin/Pages/MiscTab.php:120
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:123
+#: src/Admin/Pages/MiscTab.php:123
msgid "Check this if you would like to hide plugin announcements and update details."
msgstr ""
-#: src/Admin/Pages/MiscTab.php:130
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:133
+#: src/Admin/Pages/MiscTab.php:133
msgid "Hide Email Delivery Errors"
msgstr ""
-#: src/Admin/Pages/MiscTab.php:146
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:149
+#: src/Admin/Pages/MiscTab.php:149
msgid "Check this if you would like to hide warnings alerting of email delivery errors."
msgstr ""
#. translators: %s - filter that was used to disabled.
-#: src/Admin/Pages/MiscTab.php:153
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:156
+#: src/Admin/Pages/MiscTab.php:156
msgid "Email Delivery Errors were disabled using a %s filter."
msgstr ""
-#: src/Admin/Pages/MiscTab.php:162
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:165
+#: src/Admin/Pages/MiscTab.php:165
msgid "This is not recommended and should only be done for staging or development sites."
msgstr ""
-#: src/Admin/Pages/MiscTab.php:177
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:180
+#: src/Admin/Pages/MiscTab.php:180
msgid "Uninstall WP Mail SMTP"
msgstr ""
-#: src/Admin/Pages/MiscTab.php:185
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:188
+#: src/Admin/Pages/MiscTab.php:188
msgid "Check this if you would like to remove ALL WP Mail SMTP data upon plugin deletion. All settings will be unrecoverable."
msgstr ""
-#: src/Admin/Pages/MiscTab.php:220
+#: build/wp-mail-smtp-pro/src/Admin/Pages/MiscTab.php:223
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:540
+#: src/Admin/Pages/MiscTab.php:223
#: src/Admin/Pages/SettingsTab.php:540
msgid "Settings were successfully saved."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:36
#: src/Admin/Pages/SettingsTab.php:36
msgid "General"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:64
#: src/Admin/Pages/SettingsTab.php:64
msgid "License"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:67
#: src/Admin/Pages/SettingsTab.php:67
msgid "Your license key provides access to updates and support."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:75
#: src/Admin/Pages/SettingsTab.php:75
msgid "License Key"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:85
#: src/Admin/Pages/SettingsTab.php:85
msgid "Mail"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:92
#: src/Admin/Pages/SettingsTab.php:92
msgid "From Email"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:103
#: src/Admin/Pages/SettingsTab.php:103
msgid "The email address which emails are sent from."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:104
#: src/Admin/Pages/SettingsTab.php:104
msgid "If you using an email provider (Gmail, Yahoo, Outlook.com, etc) this should be your email address for that account."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:107
#: src/Admin/Pages/SettingsTab.php:107
msgid "Please note that other plugins can change this, to prevent this use the setting below."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:119
#: src/Admin/Pages/SettingsTab.php:119
msgid "Force From Email"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:124
#: src/Admin/Pages/SettingsTab.php:124
msgid "Current provider will automatically force From Email to be the email address that you use to set up the connection below."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:128
#: src/Admin/Pages/SettingsTab.php:128
msgid "If checked, the From Email setting above will be used for all emails, ignoring values set by other plugins."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:138
#: src/Admin/Pages/SettingsTab.php:138
msgid "From Name"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:149
#: src/Admin/Pages/SettingsTab.php:149
msgid "The name which emails are sent from."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:161
#: src/Admin/Pages/SettingsTab.php:161
msgid "Force From Name"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:166
#: src/Admin/Pages/SettingsTab.php:166
msgid "Current provider doesn't support setting and forcing From Name. Emails will be sent on behalf of the account name used to setup the connection below."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:170
#: src/Admin/Pages/SettingsTab.php:170
msgid "If checked, the From Name setting above will be used for all emails, ignoring values set by other plugins."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:179
#: src/Admin/Pages/SettingsTab.php:179
msgid "Return Path"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:188
#: src/Admin/Pages/SettingsTab.php:188
msgid "Set the return-path to match the From Email"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:192
#: src/Admin/Pages/SettingsTab.php:192
msgid "Return Path indicates where non-delivery receipts - or bounce messages - are to be sent."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:193
#: src/Admin/Pages/SettingsTab.php:193
msgid "If unchecked, bounce messages may be lost. Some providers may ignore this option."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:201
#: src/Admin/Pages/SettingsTab.php:201
msgid "Mailer"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:242
#: src/Admin/Pages/SettingsTab.php:242
msgid "Don't see what you're looking for?"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:244
#: src/Admin/Pages/SettingsTab.php:244
msgid "Suggest a Mailer"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:272
#: src/Admin/Pages/SettingsTab.php:272
msgid "Dismiss this notice"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:314
#: src/Admin/Pages/SettingsTab.php:314
msgid "You're using WP Mail SMTP Lite - no license needed. Enjoy!"
msgstr ""
#. translators: %s - WPMailSMTP.com upgrade URL.
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:320
#: src/Admin/Pages/SettingsTab.php:320
msgid "To unlock more features consider upgrading to PRO."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:339
#: src/Admin/Pages/SettingsTab.php:339
msgid "As a valued WP Mail SMTP Lite user you receive $50 off, automatically applied at checkout!"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:400
#: src/Admin/Pages/SettingsTab.php:400
msgid "Get WP Mail SMTP Pro and Unlock all the Powerful Features"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:404
#: src/Admin/Pages/SettingsTab.php:404
msgid "Thanks for being a loyal WP Mail SMTP user. Upgrade to WP Mail SMTP Pro to unlock more awesome features and experience why WP Mail SMTP is the most popular SMTP plugin."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:408
#: src/Admin/Pages/SettingsTab.php:408
msgid "We know that you will truly love WP Mail SMTP. It's used by over 1,000,000 websites."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:411
#: src/Admin/Pages/SettingsTab.php:411
msgid "Pro Features:"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:415
#: src/Admin/Pages/SettingsTab.php:415
msgid "Manage Notifications - control which emails your site sends"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:416
#: src/Admin/Pages/SettingsTab.php:416
msgid "Email Logging - keep track of every email sent from your site"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:417
#: src/Admin/Pages/SettingsTab.php:417
msgid "Office 365 - send emails using your Office 365 account"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:418
#: src/Admin/Pages/SettingsTab.php:418
msgid "Amazon SES - harness the power of AWS"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:419
#: src/Admin/Pages/SettingsTab.php:419
msgid "Outlook.com - send emails using your Outlook.com account"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:420
#: src/Admin/Pages/SettingsTab.php:420
msgid "Access to our world class support team"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:423
#: src/Admin/Pages/SettingsTab.php:423
msgid "White Glove Setup - sit back and relax while we handle everything for you"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:424
#: src/Admin/Pages/SettingsTab.php:424
msgid "Install WP Mail SMTP Pro plugin"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:425
#: src/Admin/Pages/SettingsTab.php:425
msgid "Set up domain name verification (DNS)"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:426
#: src/Admin/Pages/SettingsTab.php:426
msgid "Configure Mailgun service"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:427
#: src/Admin/Pages/SettingsTab.php:427
msgid "Set up WP Mail SMTP Pro plugin"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:428
#: src/Admin/Pages/SettingsTab.php:428
msgid "Test and verify email delivery"
msgstr ""
#. translators: %s - WPMailSMTP.com URL.
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:436
#: src/Admin/Pages/SettingsTab.php:436
msgid "Get WP Mail SMTP Pro Today and Unlock all the Powerful Features »"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/SettingsTab.php:454
#: src/Admin/Pages/SettingsTab.php:454
msgid "Bonus: WP Mail SMTP users get $50 off regular price, automatically applied at checkout."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:37
#: src/Admin/Pages/TestTab.php:37
msgid "Email Test"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:59
#: src/Admin/Pages/TestTab.php:59
msgid "Send a Test Email"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:66
#: src/Admin/Pages/TestTab.php:66
msgid "Send To"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:72
#: src/Admin/Pages/TestTab.php:72
msgid "Enter email address where test email will be sent."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:80
#: src/Admin/Pages/TestTab.php:80
msgid "HTML"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:86
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:264
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:286
#: src/Admin/Pages/TestTab.php:86
#: src/Providers/OptionsAbstract.php:264
#: src/Providers/OptionsAbstract.php:286
msgid "On"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:87
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:265
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:287
#: src/Admin/Pages/TestTab.php:87
#: src/Providers/OptionsAbstract.php:265
#: src/Providers/OptionsAbstract.php:287
msgid "Off"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:90
#: src/Admin/Pages/TestTab.php:90
msgid "Send this email in HTML or in plain text format."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:110
#: src/Admin/Pages/TestTab.php:110
msgid "You cannot send an email. Mailer is not properly configured. Please check your settings."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:114
#: src/Admin/Pages/TestTab.php:114
msgid "Send Email"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:142
#: src/Admin/Pages/TestTab.php:142
msgid "Test failed. Please use a valid email address and try to resend the test email."
msgstr ""
#. translators: %s - email address a test email will be sent to.
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:154
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:160
#: src/Admin/Pages/TestTab.php:154
#: src/Admin/Pages/TestTab.php:160
msgid "Test email to %s"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:186
#: src/Admin/Pages/TestTab.php:186
msgid "Test plain text email was sent successfully!"
msgstr ""
#. translators: %s - "HTML" in bold.
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:190
#: src/Admin/Pages/TestTab.php:190
msgid "Test %s email was sent successfully! Please check your inbox to make sure it is delivered."
msgstr ""
-#: src/Admin/Pages/TestTab.php:498
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:510
+#: src/Admin/Pages/TestTab.php:510
msgid "SSL certificate issue."
msgstr ""
-#: src/Admin/Pages/TestTab.php:499
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:511
+#: src/Admin/Pages/TestTab.php:511
msgid "This means your web server cannot reliably make secure connections (make requests to HTTPS sites)."
msgstr ""
-#: src/Admin/Pages/TestTab.php:500
-#: src/Admin/Pages/TestTab.php:551
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:512
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:560
+#: src/Admin/Pages/TestTab.php:512
+#: src/Admin/Pages/TestTab.php:560
msgid "Typically this error is returned when web server is not configured properly."
msgstr ""
-#: src/Admin/Pages/TestTab.php:503
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:515
+#: src/Admin/Pages/TestTab.php:515
msgid "Contact your web hosting provider and inform them your site has an issue with SSL certificates."
msgstr ""
-#: src/Admin/Pages/TestTab.php:504
-#: src/Admin/Pages/TestTab.php:555
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:516
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:564
+#: src/Admin/Pages/TestTab.php:516
+#: src/Admin/Pages/TestTab.php:564
msgid "The exact error you can provide them is in the Error log, available at the bottom of this page."
msgstr ""
-#: src/Admin/Pages/TestTab.php:505
-#: src/Admin/Pages/TestTab.php:556
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:517
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:565
+#: src/Admin/Pages/TestTab.php:517
+#: src/Admin/Pages/TestTab.php:565
msgid "Ask them to resolve the issue then try again."
msgstr ""
-#: src/Admin/Pages/TestTab.php:516
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:528
+#: src/Admin/Pages/TestTab.php:528
msgid "Could not connect to host."
msgstr ""
#. translators: %s - SMTP host address.
-#: src/Admin/Pages/TestTab.php:520
-#: src/Admin/Pages/TestTab.php:547
-#: src/Admin/Pages/TestTab.php:620
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:531
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:556
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:658
+#: src/Admin/Pages/TestTab.php:531
+#: src/Admin/Pages/TestTab.php:556
+#: src/Admin/Pages/TestTab.php:658
msgid "This means your web server was unable to connect to %s."
msgstr ""
-#: src/Admin/Pages/TestTab.php:523
-#: src/Admin/Pages/TestTab.php:550
-#: src/Admin/Pages/TestTab.php:623
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:534
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:559
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:661
+#: src/Admin/Pages/TestTab.php:534
+#: src/Admin/Pages/TestTab.php:559
+#: src/Admin/Pages/TestTab.php:661
msgid "This means your web server was unable to connect to the host server."
msgstr ""
-#: src/Admin/Pages/TestTab.php:524
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:535
+#: src/Admin/Pages/TestTab.php:535
msgid "Typically this error is returned your web server is blocking the connections or the SMTP host denying the request."
msgstr ""
#. translators: %s - SMTP host address.
-#: src/Admin/Pages/TestTab.php:529
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:539
+#: src/Admin/Pages/TestTab.php:539
msgid "Contact your web hosting provider and ask them to verify your server can connect to %s. Additionally, ask them if a firewall or security policy may be preventing the connection."
msgstr ""
-#: src/Admin/Pages/TestTab.php:532
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:542
+#: src/Admin/Pages/TestTab.php:542
msgid "If using \"Other SMTP\" Mailer, triple check your SMTP settings including host address, email, and password."
msgstr ""
-#: src/Admin/Pages/TestTab.php:533
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:543
+#: src/Admin/Pages/TestTab.php:543
msgid "If using \"Other SMTP\" Mailer, contact your SMTP host to confirm they are accepting outside connections with the settings you have configured (address, username, port, security, etc)."
msgstr ""
-#: src/Admin/Pages/TestTab.php:543
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:553
+#: src/Admin/Pages/TestTab.php:553
msgid "Could not connect to your host."
msgstr ""
-#: src/Admin/Pages/TestTab.php:554
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:563
+#: src/Admin/Pages/TestTab.php:563
msgid "Contact your web hosting provider and inform them you are having issues making outbound connections."
msgstr ""
-#: src/Admin/Pages/TestTab.php:566
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:575
+#: src/Admin/Pages/TestTab.php:575
msgid "Could not authenticate your SMTP account."
msgstr ""
-#: src/Admin/Pages/TestTab.php:567
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:576
+#: src/Admin/Pages/TestTab.php:576
msgid "This means we were able to connect to your SMTP host, but were not able to proceed using the email/password in the settings."
msgstr ""
-#: src/Admin/Pages/TestTab.php:568
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:577
+#: src/Admin/Pages/TestTab.php:577
msgid "Typically this error is returned when the email or password is not correct or is not what the SMTP host is expecting."
msgstr ""
-#: src/Admin/Pages/TestTab.php:571
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:580
+#: src/Admin/Pages/TestTab.php:580
msgid "Triple check your SMTP settings including host address, email, and password. If you have recently reset your password you will need to update the settings."
msgstr ""
-#: src/Admin/Pages/TestTab.php:572
-#: src/Admin/Pages/TestTab.php:649
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:581
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:686
+#: src/Admin/Pages/TestTab.php:581
+#: src/Admin/Pages/TestTab.php:686
msgid "Contact your SMTP host to confirm you are using the correct username and password."
msgstr ""
-#: src/Admin/Pages/TestTab.php:573
-#: src/Admin/Pages/TestTab.php:650
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:582
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:687
+#: src/Admin/Pages/TestTab.php:582
+#: src/Admin/Pages/TestTab.php:687
msgid "Verify with your SMTP host that your account has permissions to send emails using outside connections."
msgstr ""
-#: src/Admin/Pages/TestTab.php:583
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:592
+#: src/Admin/Pages/TestTab.php:592
msgid "Error due to unsolicited and/or bulk e-mail."
msgstr ""
-#: src/Admin/Pages/TestTab.php:584
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:593
+#: src/Admin/Pages/TestTab.php:593
msgid "This means the connection to your SMTP host was made successfully, but the host rejected the email."
msgstr ""
-#: src/Admin/Pages/TestTab.php:585
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:594
+#: src/Admin/Pages/TestTab.php:594
msgid "Typically this error is returned when you are sending too many e-mails or e-mails that have been identified as spam."
msgstr ""
-#: src/Admin/Pages/TestTab.php:588
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:597
+#: src/Admin/Pages/TestTab.php:597
msgid "Check the emails that are sending are sending individually. Example: email is not sending to 30 recipients. You can install any WordPress e-mail logging plugin to do that."
msgstr ""
-#: src/Admin/Pages/TestTab.php:589
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:598
+#: src/Admin/Pages/TestTab.php:598
msgid "Contact your SMTP host to ask about sending/rate limits."
msgstr ""
-#: src/Admin/Pages/TestTab.php:590
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:599
+#: src/Admin/Pages/TestTab.php:599
msgid "Verify with them your SMTP account is in good standing and your account has not been flagged."
msgstr ""
-#: src/Admin/Pages/TestTab.php:600
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:609
+#: src/Admin/Pages/TestTab.php:609
msgid "Unauthenticated senders are not allowed."
msgstr ""
-#: src/Admin/Pages/TestTab.php:601
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:610
+#: src/Admin/Pages/TestTab.php:610
msgid "This means the connection to your SMTP host was made successfully, but you should enable Authentication and provide correct Username and Password."
msgstr ""
-#: src/Admin/Pages/TestTab.php:604
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:613
+#: src/Admin/Pages/TestTab.php:613
msgid "Go to WP Mail SMTP plugin Settings page."
msgstr ""
-#: src/Admin/Pages/TestTab.php:605
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:614
+#: src/Admin/Pages/TestTab.php:614
msgid "Enable Authentication"
msgstr ""
-#: src/Admin/Pages/TestTab.php:606
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:615
+#: src/Admin/Pages/TestTab.php:615
msgid "Enter correct SMTP Username (usually this is an email address) and Password in the appropriate fields."
msgstr ""
-#: src/Admin/Pages/TestTab.php:616
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:627
+#: src/Admin/Pages/TestTab.php:627
+msgid "Misconfigured server certificate."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:628
+#: src/Admin/Pages/TestTab.php:628
+msgid "This means OpenSSL on your server isn't able to verify the host certificate."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:629
+#: src/Admin/Pages/TestTab.php:629
+msgid "There are a few reasons why this is happening. It could be that the host certificate is misconfigured, or this server's OpenSSL is using an outdated CA bundle."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:632
+#: src/Admin/Pages/TestTab.php:632
+msgid "Verify that the host's SSL certificate is valid."
+msgstr ""
+
+#. translators: %s - URL to the PHP openssl manual
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:635
+#: src/Admin/Pages/TestTab.php:635
+msgid "Contact your hosting support, show them the \"full Error Log for debugging\" below and share this link with them."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:655
+#: src/Admin/Pages/TestTab.php:655
msgid "Could not connect to the SMTP host."
msgstr ""
-#: src/Admin/Pages/TestTab.php:624
-#: src/Admin/Pages/TestTab.php:960
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:662
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1048
+#: src/Admin/Pages/TestTab.php:662
+#: src/Admin/Pages/TestTab.php:1048
msgid "Typically this error is returned for one of the following reasons:"
msgstr ""
-#: src/Admin/Pages/TestTab.php:625
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:663
+#: src/Admin/Pages/TestTab.php:663
msgid "SMTP settings are incorrect (wrong port, security setting, incorrect host)."
msgstr ""
-#: src/Admin/Pages/TestTab.php:626
-#: src/Admin/Pages/TestTab.php:962
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:664
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1050
+#: src/Admin/Pages/TestTab.php:664
+#: src/Admin/Pages/TestTab.php:1050
msgid "Your web server is blocking the connection."
msgstr ""
-#: src/Admin/Pages/TestTab.php:627
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:665
+#: src/Admin/Pages/TestTab.php:665
msgid "Your SMTP host is rejecting the connection."
msgstr ""
-#: src/Admin/Pages/TestTab.php:630
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:668
+#: src/Admin/Pages/TestTab.php:668
msgid "Triple check your SMTP settings including host address, email, and password, port, and security."
msgstr ""
#. translators: %1$s - SMTP host address, %2$s - SMTP port, %3$s - SMTP encryption.
-#: src/Admin/Pages/TestTab.php:634
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:671
+#: src/Admin/Pages/TestTab.php:671
msgid "Contact your web hosting provider and ask them to verify your server can connect to %1$s on port %2$s using %3$s encryption. Additionally, ask them if a firewall or security policy may be preventing the connection - many shared hosts block certain ports.
Note: this is the most common cause of this issue."
msgstr ""
-#: src/Admin/Pages/TestTab.php:647
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:684
+#: src/Admin/Pages/TestTab.php:684
msgid "no"
msgstr ""
-#: src/Admin/Pages/TestTab.php:660
-#: src/Admin/Pages/TestTab.php:675
-#: src/Admin/Pages/TestTab.php:691
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:697
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:712
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:728
+#: src/Admin/Pages/TestTab.php:697
+#: src/Admin/Pages/TestTab.php:712
+#: src/Admin/Pages/TestTab.php:728
msgid "Mailgun failed."
msgstr ""
-#: src/Admin/Pages/TestTab.php:661
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:698
+#: src/Admin/Pages/TestTab.php:698
msgid "It seems that you forgot to activate your Mailgun account."
msgstr ""
-#: src/Admin/Pages/TestTab.php:664
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:701
+#: src/Admin/Pages/TestTab.php:701
msgid "Check your inbox you used to create a Mailgun account. Click the activation link in an email from Mailgun."
msgstr ""
-#: src/Admin/Pages/TestTab.php:665
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:702
+#: src/Admin/Pages/TestTab.php:702
msgid "If you do not see activation email, go to your Mailgun control panel and resend the activation email."
msgstr ""
-#: src/Admin/Pages/TestTab.php:676
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:713
+#: src/Admin/Pages/TestTab.php:713
msgid "Typically this error is because there is an issue with your Mailgun settings, in many cases the API key."
msgstr ""
-#: src/Admin/Pages/TestTab.php:679
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:716
+#: src/Admin/Pages/TestTab.php:716
msgid "Verify your API key is correct."
msgstr ""
-#: src/Admin/Pages/TestTab.php:680
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:717
+#: src/Admin/Pages/TestTab.php:717
msgid "Go to your Mailgun account and view your API key."
msgstr ""
-#: src/Admin/Pages/TestTab.php:681
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:718
+#: src/Admin/Pages/TestTab.php:718
msgid "Note that the API key includes the \"key\" prefix, so make sure that it is in the WP Mail SMTP Mailgun API setting."
msgstr ""
-#: src/Admin/Pages/TestTab.php:692
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:729
+#: src/Admin/Pages/TestTab.php:729
msgid "Your Mailgun account does not have access to send emails."
msgstr ""
-#: src/Admin/Pages/TestTab.php:693
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:730
+#: src/Admin/Pages/TestTab.php:730
msgid "Typically this error is because you have not set up and/or complete domain name verification for your Mailgun account."
msgstr ""
#. translators: %s - Mailgun documentation URL.
-#: src/Admin/Pages/TestTab.php:699
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:735
+#: src/Admin/Pages/TestTab.php:735
msgid "Go to our how-to guide for setting up Mailgun with WP Mail SMTP."
msgstr ""
-#: src/Admin/Pages/TestTab.php:710
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:746
+#: src/Admin/Pages/TestTab.php:746
msgid "Complete the steps in section \"2. Verify Your Domain\"."
msgstr ""
-#: src/Admin/Pages/TestTab.php:720
-#: src/Admin/Pages/TestTab.php:771
-#: src/Admin/Pages/TestTab.php:792
-#: src/Admin/Pages/TestTab.php:819
-#: src/Admin/Pages/TestTab.php:835
-#: src/Admin/Pages/TestTab.php:890
-#: src/Admin/Pages/TestTab.php:917
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:756
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:805
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:825
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:851
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:867
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:919
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:945
+#: src/Admin/Pages/TestTab.php:756
+#: src/Admin/Pages/TestTab.php:805
+#: src/Admin/Pages/TestTab.php:825
+#: src/Admin/Pages/TestTab.php:851
+#: src/Admin/Pages/TestTab.php:867
+#: src/Admin/Pages/TestTab.php:919
+#: src/Admin/Pages/TestTab.php:945
msgid "Google API Error."
msgstr ""
-#: src/Admin/Pages/TestTab.php:721
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:757
+#: src/Admin/Pages/TestTab.php:757
msgid "You have not properly configured Gmail mailer."
msgstr ""
-#: src/Admin/Pages/TestTab.php:722
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:758
+#: src/Admin/Pages/TestTab.php:758
msgid "Make sure that you have clicked the \"Allow plugin to send emails using your Google account\" button under Gmail settings."
msgstr ""
-#: src/Admin/Pages/TestTab.php:725
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:761
+#: src/Admin/Pages/TestTab.php:761
msgid "Go to plugin Settings page and click the \"Allow plugin to send emails using your Google account\" button."
msgstr ""
-#: src/Admin/Pages/TestTab.php:726
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:762
+#: src/Admin/Pages/TestTab.php:762
msgid "After the click you should be redirected to a Gmail authorization screen, where you will be asked a permission to send emails on your behalf."
msgstr ""
-#: src/Admin/Pages/TestTab.php:727
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:763
+#: src/Admin/Pages/TestTab.php:763
msgid "Please click \"Agree\", if you see that button. If not - you will need to enable less secure apps first:"
msgstr ""
#. translators: %s - Google support article URL.
-#: src/Admin/Pages/TestTab.php:733
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:768
+#: src/Admin/Pages/TestTab.php:768
msgid "if you are using regular Gmail account, please read this article to proceed."
msgstr ""
#. translators: %s - Google support article URL.
-#: src/Admin/Pages/TestTab.php:749
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:783
+#: src/Admin/Pages/TestTab.php:783
msgid "if you are using G Suite, please read this article to proceed."
msgstr ""
-#: src/Admin/Pages/TestTab.php:772
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:806
+#: src/Admin/Pages/TestTab.php:806
msgid "Typically this error is because address the email was sent to is invalid or was empty."
msgstr ""
-#: src/Admin/Pages/TestTab.php:775
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:809
+#: src/Admin/Pages/TestTab.php:809
msgid "Check the \"Send To\" email address used and confirm it is a valid email and was not empty."
msgstr ""
#. translators: 1 - correct email address example. 2 - incorrect email address example.
-#: src/Admin/Pages/TestTab.php:778
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:811
+#: src/Admin/Pages/TestTab.php:811
msgid "It should be something like this: %1$s. These are incorrect values: %2$s."
msgstr ""
-#: src/Admin/Pages/TestTab.php:782
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:815
+#: src/Admin/Pages/TestTab.php:815
msgid "Make sure that the generated email has a TO header, useful when you are responsible for email creation."
msgstr ""
-#: src/Admin/Pages/TestTab.php:793
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:826
+#: src/Admin/Pages/TestTab.php:826
msgid "Unfortunately, this error can be due to many different reasons."
msgstr ""
#. translators: %s - Blog article URL.
-#: src/Admin/Pages/TestTab.php:799
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:831
+#: src/Admin/Pages/TestTab.php:831
msgid "Please read this article to learn more about what can cause this error and how it can be resolved."
msgstr ""
-#: src/Admin/Pages/TestTab.php:820
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:852
+#: src/Admin/Pages/TestTab.php:852
msgid "Authentication code that Google returned to you has already been used on your previous auth attempt."
msgstr ""
-#: src/Admin/Pages/TestTab.php:823
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:855
+#: src/Admin/Pages/TestTab.php:855
msgid "Make sure that you are not trying to manually clean up the plugin options to retry the \"Allow...\" step."
msgstr ""
-#: src/Admin/Pages/TestTab.php:824
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:856
+#: src/Admin/Pages/TestTab.php:856
msgid "Reinstall the plugin with clean plugin data turned on on Misc page. This will remove all the plugin options and you will be safe to retry."
msgstr ""
-#: src/Admin/Pages/TestTab.php:825
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:857
+#: src/Admin/Pages/TestTab.php:857
msgid "Make sure there is no aggressive caching on site admin area pages or try to clean cache between attempts."
msgstr ""
-#: src/Admin/Pages/TestTab.php:836
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:868
+#: src/Admin/Pages/TestTab.php:868
msgid "There are various reasons for that, please review the steps below."
msgstr ""
#. translators: %s - Google G Suite Admin area URL.
-#: src/Admin/Pages/TestTab.php:842
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:873
+#: src/Admin/Pages/TestTab.php:873
msgid "Make sure that your G Suite trial period has not expired. You can check the status here."
msgstr ""
#. translators: %s - Google G Suite Admin area URL.
-#: src/Admin/Pages/TestTab.php:856
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:886
+#: src/Admin/Pages/TestTab.php:886
msgid "Make sure that Gmail app in your G Suite is actually enabled. You can check that in Apps list in G Suite Admin area."
msgstr ""
#. translators: %s - Google Developers Console URL.
-#: src/Admin/Pages/TestTab.php:870
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:899
+#: src/Admin/Pages/TestTab.php:899
msgid "Make sure that you have Gmail API enabled, and you can do that here."
msgstr ""
-#: src/Admin/Pages/TestTab.php:893
-#: src/Admin/Pages/TestTab.php:921
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:922
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:949
+#: src/Admin/Pages/TestTab.php:922
+#: src/Admin/Pages/TestTab.php:949
msgid "Make sure that the used Client ID/Secret correspond to a proper project that has Gmail API enabled."
msgstr ""
#. translators: %s - Gmail documentation URL.
-#: src/Admin/Pages/TestTab.php:897
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:925
+#: src/Admin/Pages/TestTab.php:925
msgid "Please follow our Gmail tutorial to be sure that all the correct project and data is applied."
msgstr ""
-#: src/Admin/Pages/TestTab.php:918
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:946
+#: src/Admin/Pages/TestTab.php:946
msgid "You may have added a new API to a project"
msgstr ""
-#: src/Admin/Pages/TestTab.php:922
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:950
+#: src/Admin/Pages/TestTab.php:950
msgid "Try to use a separate project for your emails, so the project has only 1 Gmail API in it enabled. You will need to remove the old project and create a new one from scratch."
msgstr ""
-#: src/Admin/Pages/TestTab.php:958
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:960
+#: src/Admin/Pages/TestTab.php:960
+msgid "SMTP.com API Error."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:961
+#: src/Admin/Pages/TestTab.php:961
+msgid "Your Sender Name option is incorrect."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:964
+#: src/Admin/Pages/TestTab.php:964
+msgid "Please make sure you entered an accurate Sender Name in WP Mail SMTP plugin settings."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:974
+#: src/Admin/Pages/TestTab.php:974
+msgid "GuzzleHttp requirements."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:975
+#: src/Admin/Pages/TestTab.php:975
+msgid "GuzzleHttp requires cURL, the allow_url_fopen ini setting, or a custom HTTP handler."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:978
+#: src/Admin/Pages/TestTab.php:978
+msgid "Edit your php.ini file on your hosting server."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:979
+#: src/Admin/Pages/TestTab.php:979
+msgid "(Recommended) Enable PHP extension: cURL, by adding \"extension=curl\" to the php.ini file (without the quotation marks) OR"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:980
+#: src/Admin/Pages/TestTab.php:980
+msgid "(If cURL can't be enabled on your hosting server) Enable PHP setting: allow_url_fopen, by adding \"allow_url_fopen = On\" to the php.ini file (without the quotation marks)"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:981
+#: src/Admin/Pages/TestTab.php:981
+msgid "If you don't know how to do the above we strongly suggest contacting your hosting support and provide them the \"full Error Log for debugging\" below and these steps. They should be able to fix this issue for you."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1003
+#: src/Admin/Pages/TestTab.php:1003
+msgid "PCRE library issue"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1004
+#: src/Admin/Pages/TestTab.php:1004
+msgid "It looks like your server is running PHP version 7.4.x with an outdated PCRE library (libpcre2) that has a known issue with email address validation."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1005
+#: src/Admin/Pages/TestTab.php:1005
+msgid "There is a known issue with PHP version 7.4.x, when using libpcre2 library version lower than 10.33."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1008
+#: src/Admin/Pages/TestTab.php:1008
+msgid "Contact your web hosting provider and inform them you are having issues with libpcre2 library on PHP 7.4."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1009
+#: src/Admin/Pages/TestTab.php:1009
+msgid "They should be able to resolve this issue for you."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1010
+#: src/Admin/Pages/TestTab.php:1010
+msgid "For a quick fix, until your web hosting resolves this, you can downgrade to PHP version 7.3 on your server."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1046
+#: src/Admin/Pages/TestTab.php:1046
msgid "An issue was detected."
msgstr ""
-#: src/Admin/Pages/TestTab.php:959
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1047
+#: src/Admin/Pages/TestTab.php:1047
msgid "This means your test email was unable to be sent."
msgstr ""
-#: src/Admin/Pages/TestTab.php:961
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1049
+#: src/Admin/Pages/TestTab.php:1049
msgid "Plugin settings are incorrect (wrong SMTP settings, invalid Mailer configuration, etc)."
msgstr ""
-#: src/Admin/Pages/TestTab.php:963
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1051
+#: src/Admin/Pages/TestTab.php:1051
msgid "Your host is rejecting the connection."
msgstr ""
-#: src/Admin/Pages/TestTab.php:966
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1054
+#: src/Admin/Pages/TestTab.php:1054
msgid "Triple check the plugin settings, consider reconfiguring to make sure everything is correct (eg bad copy and paste)."
msgstr ""
-#: src/Admin/Pages/TestTab.php:968
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1056
+#: src/Admin/Pages/TestTab.php:1056
msgid "Contact your web hosting provider and ask them to verify your server can make outside connections. Additionally, ask them if a firewall or security policy may be preventing the connection - many shared hosts block certain ports.
Note: this is the most common cause of this issue."
msgstr ""
-#: src/Admin/Pages/TestTab.php:974
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1062
+#: src/Admin/Pages/TestTab.php:1062
msgid "Try using a different mailer."
msgstr ""
-#: src/Admin/Pages/TestTab.php:993
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1081
+#: src/Admin/Pages/TestTab.php:1081
msgid "There was a problem while sending the test email."
msgstr ""
-#: src/Admin/Pages/TestTab.php:1003
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1091
+#: src/Admin/Pages/TestTab.php:1091
msgid "Recommended next steps:"
msgstr ""
-#: src/Admin/Pages/TestTab.php:1013
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1101
+#: src/Admin/Pages/TestTab.php:1101
msgid "Need support?"
msgstr ""
#. translators: %s - WPMailSMTP.com account area link.
-#: src/Admin/Pages/TestTab.php:1021
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1109
+#: src/Admin/Pages/TestTab.php:1109
msgid "As a WP Mail SMTP Pro user you have access to WP Mail SMTP priority support. Please log in to your WPMailSMTP.com account and submit a support ticket."
msgstr ""
-#: src/Admin/Pages/TestTab.php:1038
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1126
+#: src/Admin/Pages/TestTab.php:1126
msgid "WP Mail SMTP is a free plugin, and the team behind WPForms maintains it to give back to the WordPress community."
msgstr ""
#. translators: %s - WPMailSMTP.com URL.
-#: src/Admin/Pages/TestTab.php:1045
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1133
+#: src/Admin/Pages/TestTab.php:1133
msgid "To access our world class support, please upgrade to WP Mail SMTP Pro. Along with getting expert support, you will also get Notification controls, Email Logging, and integrations for Amazon SES, Office 365, and Outlook.com."
msgstr ""
-#: src/Admin/Pages/TestTab.php:1060
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1148
+#: src/Admin/Pages/TestTab.php:1148
msgid "Additionally, you can take advantage of our White Glove Setup. Sit back and relax while we handle everything for you! If you simply don't have time or maybe you feel a bit in over your head - we got you covered."
msgstr ""
-#: src/Admin/Pages/TestTab.php:1066
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1154
+#: src/Admin/Pages/TestTab.php:1154
msgid "As a valued WP Mail SMTP user, you will get $50 off regular pricing, automatically applied at checkout!"
msgstr ""
#. translators: %1$s - WP Mail SMTP support policy URL, %2$s - WP Mail SMTP support forum URL, %3$s - WPMailSMTP.com URL.
-#: src/Admin/Pages/TestTab.php:1080
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1168
+#: src/Admin/Pages/TestTab.php:1168
msgid "Alternatively, we also offer limited support on the WordPress.org support forums. You can create a support thread there, but please understand that free support is not guaranteed and is limited to simple issues. If you have an urgent or complex issue, then please consider upgrading to WP Mail SMTP Pro to access our priority support ticket system."
msgstr ""
-#: src/Admin/Pages/TestTab.php:1101
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1189
+#: src/Admin/Pages/TestTab.php:1189
msgid "Click here to view the full Error Log for debugging"
msgstr ""
-#: src/Admin/Pages/TestTab.php:1110
+#: build/wp-mail-smtp-pro/src/Admin/Pages/TestTab.php:1198
+#: src/Admin/Pages/TestTab.php:1198
msgid "Please copy only the content of the error debug message above, identified with an orange left border, into the support forum topic if you experience any issues."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Admin/Review.php:119
+#: src/Admin/Review.php:119
+msgid "Are you enjoying WP Mail SMTP?"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Review.php:121
+#: src/Admin/Review.php:121
+msgid "Yes"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Review.php:122
+#: src/Admin/Review.php:122
+msgid "Not Really"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Review.php:126
+#: src/Admin/Review.php:126
+msgid "We're sorry to hear you aren't enjoying WP Mail SMTP. We would love a chance to improve. Could you take a minute and let us know what we can do better?"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Review.php:129
+#: src/Admin/Review.php:129
+msgid "Give Feedback"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Review.php:132
+#: src/Admin/Review.php:132
+msgid "No thanks"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Review.php:137
+#: src/Admin/Review.php:137
+msgid "That’s awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation?"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Review.php:138
+#: src/Admin/Review.php:138
+msgid "~ Jared Atchison
Lead Developer, WP Mail SMTP"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Review.php:141
+#: src/Admin/Review.php:141
+msgid "Ok, you deserve it"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Review.php:143
+#: src/Admin/Review.php:143
+msgid "Nope, maybe later"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Admin/Review.php:144
+#: src/Admin/Review.php:144
+msgid "I already did"
+msgstr ""
+
#. translators: %1$s - Plugin name causing conflict; %2$s - Plugin name causing conflict.
+#: build/wp-mail-smtp-pro/src/Conflicts.php:159
#: src/Conflicts.php:159
msgid "Heads up! WP Mail SMTP has detected %1$s is activated. Please deactivate %2$s to prevent conflicts."
msgstr ""
#. translators: %1$s - WP Mail SMTP plugin name; %2$s - WPMailSMTP.com URL to a related doc.
-#: src/Core.php:342
+#: build/wp-mail-smtp-pro/src/Core.php:367
+#: src/Core.php:367
msgid "Your site is running an outdated version of PHP that is no longer supported and may cause issues with %1$s. Read more for additional information."
msgstr ""
-#: src/Core.php:356
+#: build/wp-mail-smtp-pro/src/Core.php:381
+#: src/Core.php:381
msgid "Please Note: Support for PHP 5.5 will be discontinued in 2020. After this, if no further action is taken, WP Mail SMTP functionality will be disabled."
msgstr ""
#. translators: %s - plugin name and its version.
-#: src/Core.php:390
+#: build/wp-mail-smtp-pro/src/Core.php:415
+#: src/Core.php:415
msgid "EMAILING DISABLED: The %s is currently blocking all emails from being sent."
msgstr ""
#. translators: %1$s - constant name; %2$s - constant value.
-#: src/Core.php:401
+#: build/wp-mail-smtp-pro/src/Core.php:426
+#: src/Core.php:426
msgid "To send emails, change the value of the %1$s constant to %2$s."
msgstr ""
#. translators: %s - plugin Misc settings page URL.
-#: src/Core.php:412
+#: build/wp-mail-smtp-pro/src/Core.php:437
+#: src/Core.php:437
msgid "To send emails, go to plugin Misc settings and disable the \"Do Not Send\" option."
msgstr ""
#. translators: %s - plugin name and its version.
-#: src/Core.php:444
+#: build/wp-mail-smtp-pro/src/Core.php:469
+#: src/Core.php:469
msgid "EMAIL DELIVERY ERROR: the plugin %s logged this error during the last time it tried to send an email:"
msgstr ""
-#: src/Core.php:474
+#: build/wp-mail-smtp-pro/src/Core.php:499
+#: src/Core.php:499
msgid "Consider running an email test after fixing it."
msgstr ""
+#. translators: %1$s - WP Mail SMTP, %2$s - error message.
+#: build/wp-mail-smtp-pro/src/Migration.php:137
+#: src/Migration.php:137
+msgid "There was an error while upgrading the database. Please contact %1$s support with this information: %2$s."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Pro/Providers/Providers.php:158
+#: src/Pro/Providers/Providers.php:158
+msgid "OK"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Pro/SiteHealth.php:58
#: src/Pro/SiteHealth.php:58
msgid "Is wpmailsmtp.com reachable?"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/AmazonSES/Options.php:25
#: src/Providers/AmazonSES/Options.php:25
msgid "Amazon SES"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/AmazonSES/Options.php:39
#: src/Providers/AmazonSES/Options.php:39
msgid "We're sorry, the Amazon SES mailer is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Auth.php:170
#: src/Providers/Gmail/Auth.php:170
msgid "There was an error while processing the Google authentication request. Please make sure that you have Client ID and Client Secret both valid and saved."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Mailer.php:258
+#: src/Providers/Gmail/Mailer.php:258
+msgid "Please re-grant Google app permissions!"
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Mailer.php:259
+#: src/Providers/Gmail/Mailer.php:259
+msgid "Go to WP Mail SMTP plugin settings page. Click the “Remove Connection” button."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Mailer.php:260
+#: src/Providers/Gmail/Mailer.php:260
+msgid "Then click the “Allow plugin to send emails using your Google account” button and re-enable access."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:32
#: src/Providers/Gmail/Options.php:32
msgid "Gmail"
msgstr ""
#. translators: %s - URL to our Gmail doc.
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:35
#: src/Providers/Gmail/Options.php:35
msgid "Send emails using your Gmail or G Suite (formerly Google Apps) account, all while keeping your login credentials safe. Other Google SMTP methods require enabling less secure apps in your account and entering your password. However, this integration uses the Google API to improve email delivery issues while keeping your site secure.
Read our Gmail documentation to learn how to configure Gmail or G Suite."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:48
#: src/Providers/Gmail/Options.php:48
msgid "The Gmail mailer works well for sites that send low numbers of emails. However, Gmail's API has rate limitations and a number of additional restrictions that can lead to challenges during setup. If you expect to send a high volume of emails, or if you find that your web host is not compatible with the Gmail API restrictions, then we recommend considering a different mailer option."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:72
#: src/Providers/Gmail/Options.php:72
msgid "Client ID"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:87
#: src/Providers/Gmail/Options.php:87
msgid "Client Secret"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:109
#: src/Providers/Gmail/Options.php:109
msgid "Authorized redirect URI"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:117
#: src/Providers/Gmail/Options.php:117
msgid "Copy URL to clipboard"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:122
#: src/Providers/Gmail/Options.php:122
msgid "Please copy this URL into the \"Authorized redirect URIs\" field of your Google web application."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:131
#: src/Providers/Gmail/Options.php:131
msgid "Authorization"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:159
#: src/Providers/Gmail/Options.php:159
msgid "Allow plugin to send emails using your Google account"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:162
#: src/Providers/Gmail/Options.php:162
msgid "Click the button above to confirm authorization."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:168
#: src/Providers/Gmail/Options.php:168
msgid "Remove Connection"
msgstr ""
#. translators: %s - email address, as received from Google API.
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:177
#: src/Providers/Gmail/Options.php:177
msgid "Connected as %s"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:184
#: src/Providers/Gmail/Options.php:184
msgid "Removing the connection will give you an ability to redo the connection or link to another Google account."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Gmail/Options.php:192
#: src/Providers/Gmail/Options.php:192
msgid "You need to save settings with Client ID and Client Secret before you can proceed."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Mail/Options.php:25
#: src/Providers/Mail/Options.php:25
msgid "Default (none)"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Mail/Options.php:37
#: src/Providers/Mail/Options.php:37
msgid "You currently have the native WordPress option selected. Please select any other Mailer option above to continue the setup."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:25
#: src/Providers/Mailgun/Options.php:25
msgid "Mailgun"
msgstr ""
#. translators: %1$s - opening link tag; %2$s - closing link tag; %3$s - opening link tag; %4$s - closing link tag.
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:29
#: src/Providers/Mailgun/Options.php:29
msgid "%1$sMailgun%2$s is one of the leading transactional email services trusted by over 150,000+ businesses. They provide 5,000 free emails per month for 3 months.
Read our %3$sMailgun documentation%4$s to learn how to configure Mailgun and improve your email deliverability."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:57
#: src/Providers/Mailgun/Options.php:57
msgid "Private API Key"
msgstr ""
#. translators: %s - API key link.
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:76
#: src/Providers/Mailgun/Options.php:76
msgid "Follow this link to get an API Key from Mailgun: %s."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:78
#: src/Providers/Mailgun/Options.php:78
msgid "Get a Private API Key"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:89
#: src/Providers/Mailgun/Options.php:89
msgid "Domain Name"
msgstr ""
#. translators: %s - Domain Name link.
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:101
#: src/Providers/Mailgun/Options.php:101
msgid "Follow this link to get a Domain Name from Mailgun: %s."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:103
#: src/Providers/Mailgun/Options.php:103
msgid "Get a Domain Name"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:114
#: src/Providers/Mailgun/Options.php:114
msgid "Region"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:124
#: src/Providers/Mailgun/Options.php:124
msgid "US"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:133
#: src/Providers/Mailgun/Options.php:133
msgid "EU"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:137
#: src/Providers/Mailgun/Options.php:137
msgid "Define which endpoint you want to use for sending messages."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:138
#: src/Providers/Mailgun/Options.php:138
msgid "If you are operating under EU laws, you may be required to use EU region."
msgstr ""
#. translators: %s - URL to Mailgun.com page.
+#: build/wp-mail-smtp-pro/src/Providers/Mailgun/Options.php:143
#: src/Providers/Mailgun/Options.php:143
msgid "More information on Mailgun.com."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:186
#: src/Providers/OptionsAbstract.php:186
msgid "SMTP Host"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:200
#: src/Providers/OptionsAbstract.php:200
msgid "Encryption"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:210
#: src/Providers/OptionsAbstract.php:210
msgid "None"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:219
#: src/Providers/OptionsAbstract.php:219
msgid "SSL"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:228
#: src/Providers/OptionsAbstract.php:228
msgid "TLS"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:232
#: src/Providers/OptionsAbstract.php:232
msgid "For most servers TLS is the recommended option. If your SMTP provider offers both SSL and TLS options, we recommend using TLS."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:240
#: src/Providers/OptionsAbstract.php:240
msgid "SMTP Port"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:254
#: src/Providers/OptionsAbstract.php:254
msgid "Auto TLS"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:268
#: src/Providers/OptionsAbstract.php:268
msgid "By default TLS encryption is automatically used if the server supports it, which is recommended. In some cases, due to server misconfigurations, this can cause issues and may need to be disabled."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:276
#: src/Providers/OptionsAbstract.php:276
msgid "Authentication"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:295
#: src/Providers/OptionsAbstract.php:295
msgid "SMTP Username"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:309
#: src/Providers/OptionsAbstract.php:309
msgid "SMTP Password"
msgstr ""
#. translators: %s - constant name: WPMS_SMTP_PASS.
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:321
#: src/Providers/OptionsAbstract.php:321
msgid "To change the password you need to change the value of the constant there: %s"
msgstr ""
#. translators: %1$s - wp-config.php file, %2$s - WPMS_ON constant name.
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:329
#: src/Providers/OptionsAbstract.php:329
msgid "If you want to disable the use of constants, find in %1$s file the constant %2$s and turn if off:"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:339
#: src/Providers/OptionsAbstract.php:339
msgid "All the defined constants will stop working and you will be able to change all the values on this page."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:347
#: src/Providers/OptionsAbstract.php:347
-msgid "The password is stored in plain text. We highly recommend you set up your password in your WordPress configuration file for improved security."
+msgid "The password will be stored in plain text. For improved security, we highly recommend using your site's WordPress configuration file to set your password."
msgstr ""
-#. translators: %s - wp-config.php.
-#: src/Providers/OptionsAbstract.php:352
-msgid "To do this add the lines below to your %s file:"
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:350
+#: src/Providers/OptionsAbstract.php:350
+msgid "Learn More"
msgstr ""
#. translators: %1$s - Provider name; %2$s - PHP version required by Provider; %3$s - current PHP version.
-#: src/Providers/OptionsAbstract.php:418
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:410
+#: src/Providers/OptionsAbstract.php:410
msgid "%1$s requires PHP %2$s to work and does not support your current PHP version %3$s. Please contact your host and request a PHP upgrade to the latest one."
msgstr ""
-#: src/Providers/OptionsAbstract.php:425
-#: src/Providers/OptionsAbstract.php:449
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:417
+#: src/Providers/OptionsAbstract.php:417
msgid "Meanwhile you can switch to some other mailers."
msgstr ""
-#. translators: %s - Provider name.
-#: src/Providers/OptionsAbstract.php:444
-msgid "%s requires a SSL certificate on a site to work and does not support your current installation. Please contact your host and request a SSL certificate or install a free one, like Let's Encrypt."
+#. translators: %s - Provider name
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:436
+#: src/Providers/OptionsAbstract.php:436
+msgid "%s requires an SSL certificate, and so is not currently compatible with your site. Please contact your host to request a SSL certificate, or check out WPBeginner's tutorial on how to set up SSL."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/OptionsAbstract.php:449
+#: src/Providers/OptionsAbstract.php:449
+msgid "If you'd prefer not to set up SSL, or need an SMTP solution in the meantime, please select a different mailer option."
+msgstr ""
+
+#: build/wp-mail-smtp-pro/src/Providers/Outlook/Options.php:25
#: src/Providers/Outlook/Options.php:25
msgid "Outlook"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Outlook/Options.php:39
#: src/Providers/Outlook/Options.php:39
msgid "We're sorry, the Microsoft Outlook mailer is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Pepipost/Options.php:25
#: src/Providers/Pepipost/Options.php:25
msgid "Pepipost SMTP"
msgstr ""
#. translators: %1$s - URL to pepipost.com site.
+#: build/wp-mail-smtp-pro/src/Providers/PepipostAPI/Options.php:31
#: src/Providers/PepipostAPI/Options.php:31
msgid "Pepipost is a recommended transactional email service. Every month Pepipost delivers over 8 billion emails from 20,000+ customers. Their mission is to reliably send emails in the most efficient way and at the most disruptive pricing ever. Pepipost provides users 30,000 free emails the first 30 days."
msgstr ""
#. translators: %1$s - URL to wpmailsmtp.com doc.
+#: build/wp-mail-smtp-pro/src/Providers/PepipostAPI/Options.php:34
#: src/Providers/PepipostAPI/Options.php:34
msgid "Read our Pepipost documentation to learn how to configure Pepipost and improve your email deliverability."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/PepipostAPI/Options.php:53
#: src/Providers/PepipostAPI/Options.php:53
msgid "Get Started with Pepipost"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/PepipostAPI/Options.php:61
#: src/Providers/PepipostAPI/Options.php:61
msgid "Pepipost"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/PepipostAPI/Options.php:88
+#: build/wp-mail-smtp-pro/src/Providers/Sendgrid/Options.php:57
+#: build/wp-mail-smtp-pro/src/Providers/Sendinblue/Options.php:76
+#: build/wp-mail-smtp-pro/src/Providers/SMTPcom/Options.php:83
#: src/Providers/PepipostAPI/Options.php:88
#: src/Providers/Sendgrid/Options.php:57
#: src/Providers/Sendinblue/Options.php:76
@@ -1484,180 +2080,222 @@ msgid "API Key"
msgstr ""
#. translators: %s - link to get an API Key.
+#: build/wp-mail-smtp-pro/src/Providers/PepipostAPI/Options.php:107
+#: build/wp-mail-smtp-pro/src/Providers/Sendinblue/Options.php:95
#: src/Providers/PepipostAPI/Options.php:107
#: src/Providers/Sendinblue/Options.php:95
msgid "Follow this link to get an API Key: %s."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/PepipostAPI/Options.php:109
#: src/Providers/PepipostAPI/Options.php:109
msgid "Get the API Key"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Sendgrid/Options.php:25
#: src/Providers/Sendgrid/Options.php:25
msgid "SendGrid"
msgstr ""
#. translators: %1$s - opening link tag; %2$s - closing link tag; %3$s - opening link tag; %4$s - closing link tag.
+#: build/wp-mail-smtp-pro/src/Providers/Sendgrid/Options.php:29
#: src/Providers/Sendgrid/Options.php:29
msgid "%1$sSendGrid%2$s is one of the leading transactional email services, sending over 35 billion emails every month. They provide users 100 free emails per day.
Read our %3$sSendGrid documentation%4$s to learn how to set up SendGrid and improve your email deliverability."
msgstr ""
#. translators: %s - API key link.
+#: build/wp-mail-smtp-pro/src/Providers/Sendgrid/Options.php:76
#: src/Providers/Sendgrid/Options.php:76
msgid "Follow this link to get an API Key from SendGrid: %s."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Sendgrid/Options.php:78
#: src/Providers/Sendgrid/Options.php:78
msgid "Create API Key"
msgstr ""
#. translators: %s - SendGrid access level.
+#: build/wp-mail-smtp-pro/src/Providers/Sendgrid/Options.php:86
#: src/Providers/Sendgrid/Options.php:86
msgid "To send emails you will need only a %s access level for this API key."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Sendinblue/Options.php:33
#: src/Providers/Sendinblue/Options.php:33
msgid "Sendinblue"
msgstr ""
#. translators: %1$s - URL to sendinblue.com site.
+#: build/wp-mail-smtp-pro/src/Providers/Sendinblue/Options.php:37
#: src/Providers/Sendinblue/Options.php:37
msgid "Sendinblue serves 80,000+ growing companies around the world and sends over 30 million emails each day. They provide users 300 free emails per day."
msgstr ""
#. translators: %2$s - URL to wpmailsmtp.com doc.
+#: build/wp-mail-smtp-pro/src/Providers/Sendinblue/Options.php:40
#: src/Providers/Sendinblue/Options.php:40
msgid "Read our Sendinblue documentation to learn how to configure Sendinblue and improve your email deliverability."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/Sendinblue/Options.php:97
#: src/Providers/Sendinblue/Options.php:97
msgid "Get v3 API Key"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/SMTP/Options.php:25
#: src/Providers/SMTP/Options.php:25
msgid "Other SMTP"
msgstr ""
#. translators: %s - URL to SMTP documentation.
+#: build/wp-mail-smtp-pro/src/Providers/SMTP/Options.php:29
#: src/Providers/SMTP/Options.php:29
msgid "Use the SMTP details provided by your hosting provider or email service.
To see recommended settings for the popular services as well as troubleshooting tips, check out our SMTP documentation."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/SMTPcom/Mailer.php:433
#: src/Providers/SMTPcom/Mailer.php:433
msgid "Api Key:"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/SMTPcom/Mailer.php:435
#: src/Providers/SMTPcom/Mailer.php:435
msgid "Channel:"
msgstr ""
#. translators: %s - URL to smtp.com site.
+#: build/wp-mail-smtp-pro/src/Providers/SMTPcom/Options.php:41
#: src/Providers/SMTPcom/Options.php:41
-msgid "SMTP.com is a recommended transactional email service. With over 22 years of email delivery expertise, SMTP.com has been around for almost as long as email itself. They are known among internet providers as one of the most reliable senders on the internet. Their easy integration process lets you start sending emails in minutes and benefit from years of experience. SMTP.com provides users 10,000 free emails the first 30 days."
+msgid "SMTP.com is a recommended transactional email service. With a 22 years of track record of reliable email delivery, SMTP.com is a premiere solution for WordPress developers and website owners. SMTP.com has been around for almost as long as email itself. Their super simple integration interface makes it easy to get started while a powerful API and robust documentation make it a preferred choice among developers. Start a 30-day free trial with 50,000 emails."
msgstr ""
#. translators: %s - URL to wpmailsmtp.com doc page for stmp.com.
+#: build/wp-mail-smtp-pro/src/Providers/SMTPcom/Options.php:49
#: src/Providers/SMTPcom/Options.php:49
msgid "Read our SMTP.com documentation to learn how to configure SMTP.com and improve your email deliverability."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/SMTPcom/Options.php:59
#: src/Providers/SMTPcom/Options.php:59
msgid "Get Started with SMTP.com"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/SMTPcom/Options.php:67
#: src/Providers/SMTPcom/Options.php:67
msgid "SMTP.com"
msgstr ""
#. translators: %s - API key link.
+#: build/wp-mail-smtp-pro/src/Providers/SMTPcom/Options.php:101
#: src/Providers/SMTPcom/Options.php:101
msgid "Follow this link to get an API Key from SMTP.com: %s."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/SMTPcom/Options.php:103
#: src/Providers/SMTPcom/Options.php:103
msgid "Get API Key"
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/SMTPcom/Options.php:114
#: src/Providers/SMTPcom/Options.php:114
msgid "Sender Name"
msgstr ""
#. translators: %s - Channel/Sender Name link for smtp.com documentation.
+#: build/wp-mail-smtp-pro/src/Providers/SMTPcom/Options.php:130
#: src/Providers/SMTPcom/Options.php:130
msgid "Follow this link to get a Sender Name from SMTP.com: %s."
msgstr ""
+#: build/wp-mail-smtp-pro/src/Providers/SMTPcom/Options.php:132
#: src/Providers/SMTPcom/Options.php:132
msgid "Get Sender Name"
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:67
#: src/SiteHealth.php:67
msgid "Is WP Mail SMTP mailer setup complete?"
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:92
#: src/SiteHealth.php:92
msgid "Version"
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:96
#: src/SiteHealth.php:96
msgid "License key type"
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:100
#: src/SiteHealth.php:100
msgid "Debug"
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:101
#: src/SiteHealth.php:101
msgid "No debug notices found."
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:131
#: src/SiteHealth.php:131
msgid "Current mailer"
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:136
#: src/SiteHealth.php:136
msgid "WP Mail SMTP mailer setup is complete"
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:145
#: src/SiteHealth.php:145
msgid "The WP Mail SMTP plugin mailer setup is complete. You can send a test email, to make sure it's working properly."
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:150
#: src/SiteHealth.php:150
msgid "Test email sending"
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:158
#: src/SiteHealth.php:158
msgid "You currently have the default mailer selected, which means that you haven’t set up SMTP yet."
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:163
#: src/SiteHealth.php:163
msgid "WP Mail SMTP mailer setup is incomplete"
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:169
#: src/SiteHealth.php:169
msgid "The WP Mail SMTP plugin mailer setup is incomplete. Please click on the link below to access plugin settings and configure the mailer."
msgstr ""
+#: build/wp-mail-smtp-pro/src/SiteHealth.php:174
#: src/SiteHealth.php:174
msgid "Configure mailer"
msgstr ""
#. translators: %1$s - date, \a\t - specially escaped "at", %2$s - time.
-#: src/WP.php:183
+#: build/wp-mail-smtp-pro/src/WP.php:190
+#: src/WP.php:190
msgid "%1$s \\a\\t %2$s"
msgstr ""
+#: build/wp-mail-smtp-pro/wp_mail_smtp.php:135
#: wp_mail_smtp.php:135
msgid "Please deactivate the free version of the WP Mail SMTP plugin before activating WP Mail SMTP Pro."
msgstr ""
#. translators: %1$s - WPBeginner URL for recommended WordPress hosting.
+#: build/wp-mail-smtp-pro/wp_mail_smtp.php:163
#: wp_mail_smtp.php:163
msgid "Your site is running an insecure version of PHP that is no longer supported. Please contact your web hosting provider to update your PHP version or switch to a recommended WordPress hosting company."
msgstr ""
#. translators: %s - WPMailSMTP.com docs URL with more details.
+#: build/wp-mail-smtp-pro/wp_mail_smtp.php:180
#: wp_mail_smtp.php:180
msgid "WP Mail SMTP plugin is disabled on your site until you fix the issue. Read more for additional information."
msgstr ""
diff --git a/wp-content/plugins/wp-mail-smtp/readme.txt b/wp-content/plugins/wp-mail-smtp/readme.txt
index 8d2618d..af20fb5 100644
--- a/wp-content/plugins/wp-mail-smtp/readme.txt
+++ b/wp-content/plugins/wp-mail-smtp/readme.txt
@@ -3,7 +3,7 @@ Contributors: wpforms, jaredatch, smub, slaFFik
Tags: smtp, wp mail smtp, wordpress smtp, gmail smtp, sendgrid smtp, mailgun smtp, mail, mailer, phpmailer, wp_mail, email, mailgun, sengrid, gmail, pepipost, sendinblue, wp smtp
Requires at least: 4.9
Tested up to: 5.4
-Stable tag: 2.0.1
+Stable tag: 2.1.1
Requires PHP: 5.5.0
The most popular WordPress SMTP and PHP Mailer plugin. Trusted by over 1 million sites.
@@ -62,7 +62,7 @@ SMTP.com is a recommended transactional email service.
With over 22 years of email delivery expertise, SMTP.com has been around for almost as long as email itself. They are known among internet providers as one of the most reliable senders on the internet.
-Their easy integration process lets you start sending emails in minutes and benefit from years of experience. SMTP.com provides users 10,000 free emails the first 30 days.
+Their easy integration process lets you start sending emails in minutes and benefit from years of experience. SMTP.com provides users 50,000 free emails the first 30 days.
Read our SMTP.com documentation for more details.
@@ -229,6 +229,24 @@ By all means please contact us to discuss features or options you'd like to see
== Changelog ==
+= 2.1.1 - 2020-06-08 =
+* Changed: Remove current automatic default reply-to address and add WP filter `wp_mail_smtp_processor_set_default_reply_to` for setting default reply-to addresses.
+* Changed: Improve description for several options with links to an article about how to properly use constants.
+* Fixed: PHP parse error connected to Monolog library on PHP versions < 7.x.
+
+= 2.1.0 - 2020-06-04 =
+* Added: Async/scheduled tasks management support.
+* Added: New warning notification for selecting the "Default (none)" mailer and saving the plugin settings.
+* Changed: Set the original From Email as Reply-To address if it was overwritten by the Force From Email option.
+* Changed: The Force From Email option is now enabled by default, for new plugin installs.
+* Changed: Reply-To header is now set when not provided, equals to From Name/Email.
+* Fixed: Display a non-empty PHPMailer error when some non-SMTP mailers generate errors.
+* Fixed: Display a more accurate message, when the "channel - not found" error is triggered by SMTP.com API.
+* Fixed: Save and display debug errors for the "Other SMTP" mailer.
+* Fixed: Improve the debug details for the "Invalid address (setFrom)" error in the Email Test tab.
+* Fixed: Improve the debug details for SMTP CA verification fail, Gmail Guzzle requirements, and Gmail invalid grant errors.
+* Fixed: Improve the uninstall cleanup procedure.
+
= 2.0.1 - 2020-05-07 =
* Changed: Improved description of the "Do Not Send" plugin option.
* Fixed: Due to Pepipost API changes we now convert new lines so they are preserved in plain text emails.
diff --git a/wp-content/plugins/wp-mail-smtp/src/Admin/Area.php b/wp-content/plugins/wp-mail-smtp/src/Admin/Area.php
index d863acd..7c6f731 100644
--- a/wp-content/plugins/wp-mail-smtp/src/Admin/Area.php
+++ b/wp-content/plugins/wp-mail-smtp/src/Admin/Area.php
@@ -13,20 +13,26 @@ use WPMailSMTP\Options;
class Area {
/**
+ * Slug of the admin area page.
+ *
* @since 1.0.0
*
- * @var string Slug of the admin area page.
+ * @var string
*/
const SLUG = 'wp-mail-smtp';
/**
+ * Admin page unique hook.
+ *
* @since 1.0.0
*
- * @var string Admin page unique hook.
+ * @var string
*/
public $hook;
/**
+ * List of admin area pages.
+ *
* @since 1.0.0
*
* @var PageAbstract[]
@@ -34,11 +40,13 @@ class Area {
private $pages;
/**
+ * List of official registered pages.
+ *
* @since 1.5.0
*
- * @var array List of official registered pages.
+ * @var array
*/
- public static $pages_registered = array( 'general', 'logs', 'about' );
+ public static $pages_registered = [ 'general', 'logs', 'about' ];
/**
* Area constructor.
@@ -46,6 +54,7 @@ class Area {
* @since 1.0.0
*/
public function __construct() {
+
$this->hooks();
}
@@ -57,34 +66,39 @@ class Area {
protected function hooks() {
// Add the Settings link to a plugin on Plugins page.
- add_filter( 'plugin_action_links_' . plugin_basename( WPMS_PLUGIN_FILE ), array( $this, 'add_plugin_action_link' ), 10, 1 );
+ add_filter( 'plugin_action_links_' . plugin_basename( WPMS_PLUGIN_FILE ), [ $this, 'add_plugin_action_link' ], 10, 1 );
// Add the options page.
- add_action( 'admin_menu', array( $this, 'add_admin_options_page' ) );
+ add_action( 'admin_menu', [ $this, 'add_admin_options_page' ] );
+
+ // Register on load Email Log admin menu hook.
+ add_action( 'load-wp-mail-smtp_page_wp-mail-smtp-logs', [ $this, 'maybe_redirect_email_log_menu_to_email_log_settings_tab' ] );
// Admin footer text.
- add_filter( 'admin_footer_text', array( $this, 'get_admin_footer' ), 1, 2 );
+ add_filter( 'admin_footer_text', [ $this, 'get_admin_footer' ], 1, 2 );
// Enqueue admin area scripts and styles.
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) );
+ add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] );
// Process the admin page forms actions.
- add_action( 'admin_init', array( $this, 'process_actions' ) );
+ add_action( 'admin_init', [ $this, 'process_actions' ] );
// Display custom notices based on the error/success codes.
- add_action( 'admin_init', array( $this, 'display_custom_auth_notices' ) );
+ add_action( 'admin_init', [ $this, 'display_custom_auth_notices' ] );
// Display notice instructing the user to complete plugin setup.
- add_action( 'admin_init', array( $this, 'display_setup_notice' ) );
+ add_action( 'admin_init', [ $this, 'display_setup_notice' ] );
// Outputs the plugin admin header.
- add_action( 'in_admin_header', array( $this, 'display_admin_header' ), 100 );
+ add_action( 'in_admin_header', [ $this, 'display_admin_header' ], 100 );
// Hide all unrelated to the plugin notices on the plugin admin pages.
- add_action( 'admin_print_scripts', array( $this, 'hide_unrelated_notices' ) );
+ add_action( 'admin_print_scripts', [ $this, 'hide_unrelated_notices' ] );
// Process all AJAX requests.
- add_action( 'wp_ajax_wp_mail_smtp_ajax', array( $this, 'process_ajax' ) );
+ add_action( 'wp_ajax_wp_mail_smtp_ajax', [ $this, 'process_ajax' ] );
+
+ ( new Review() )->hooks();
}
/**
@@ -107,8 +121,7 @@ class Area {
switch ( $error ) {
case 'google_access_denied':
- WP::add_admin_notice(
- /* translators: %s - error code, returned by Google API. */
+ WP::add_admin_notice( /* translators: %s - error code, returned by Google API. */
sprintf( esc_html__( 'There was an error while processing the authentication request: %s. Please try again.', 'wp-mail-smtp' ), '' . $error . '
' ),
WP::ADMIN_NOTICE_ERROR
);
@@ -169,15 +182,14 @@ class Area {
// Display notice informing user further action is needed.
WP::add_admin_notice(
sprintf(
- wp_kses(
- /* translators: %s - Mailer anchor link. */
+ wp_kses( /* translators: %s - Mailer anchor link. */
__( 'Thanks for using WP Mail SMTP! To complete the plugin setup and start sending emails, please select and configure your Mailer.', 'wp-mail-smtp' ),
- array(
- 'a' => array(
- 'href' => array(),
- ),
- 'strong' => array(),
- )
+ [
+ 'a' => [
+ 'href' => [],
+ ],
+ 'strong' => [],
+ ]
),
wp_mail_smtp()->get_admin()->get_admin_page_url( self::SLUG . '#wp-mail-smtp-setting-row-mailer' )
),
@@ -232,6 +244,26 @@ class Area {
}
}
+ /**
+ * Redirect the "Email Log" WP menu link to the "Email Log" setting tab for lite version of the plugin.
+ *
+ * @since 2.1.0
+ */
+ public function maybe_redirect_email_log_menu_to_email_log_settings_tab() {
+
+ /**
+ * The Email Logs object to be used for loading the Email Log page.
+ *
+ * @var \WPMailSMTP\Admin\PageAbstract $logs
+ */
+ $logs = $this->generate_display_logs_object();
+
+ if ( $logs instanceof \WPMailSMTP\Admin\Pages\Logs ) {
+ wp_safe_redirect( $logs->get_link() );
+ exit;
+ }
+ }
+
/**
* Enqueue admin area scripts and styles.
*
@@ -269,6 +301,19 @@ class Area {
array(
'text_provider_remove' => esc_html__( 'Are you sure you want to reset the current provider connection? You will need to immediately create a new one to be able to send emails.', 'wp-mail-smtp' ),
'text_settings_not_saved' => esc_html__( 'Changes that you made to the settings are not saved!', 'wp-mail-smtp' ),
+ 'default_mailer_notice' => array(
+ 'title' => esc_html__( 'Heads up!', 'wp-mail-smtp' ),
+ 'content' => wp_kses(
+ __( '
-
-
-
-
+
+
+
+
- get_label() ); ?>
-
-
-
-
-
-
-
+
+
+
+
+ wp-config.php
'
+ printf(
+ wp_kses( /* translators: %s - The URL to the constants support article. */
+ __( 'Please read this support article if you want to enable this option using constants.', 'wp-mail-smtp' ),
+ [
+ 'a' => [
+ 'href' => [],
+ 'target' => [],
+ 'rel' => [],
+ ],
+ ]
+ ),
+ 'https://wpmailsmtp.com/docs/how-to-secure-smtp-settings-by-using-constants/'
);
}
?>
- define( 'WPMS_ON', true ); - define( 'WPMS_DO_NOT_SEND', true ); -- diff --git a/wp-content/plugins/wp-mail-smtp/src/Admin/Pages/TestTab.php b/wp-content/plugins/wp-mail-smtp/src/Admin/Pages/TestTab.php index 1d3b177..b5faa67 100644 --- a/wp-content/plugins/wp-mail-smtp/src/Admin/Pages/TestTab.php +++ b/wp-content/plugins/wp-mail-smtp/src/Admin/Pages/TestTab.php @@ -98,12 +98,12 @@ class TestTab extends PageAbstract { $disabled = ''; $help_text = ''; - if ( - ! wp_mail_smtp()->get_providers()->get_mailer( - Options::init()->get( 'mail', 'mailer' ), - wp_mail_smtp()->get_processor()->get_phpmailer() - )->is_mailer_complete() - ) { + $mailer = wp_mail_smtp()->get_providers()->get_mailer( + Options::init()->get( 'mail', 'mailer' ), + wp_mail_smtp()->get_processor()->get_phpmailer() + ); + + if ( ! $mailer || ! $mailer->is_mailer_complete() ) { $btn = 'wp-mail-smtp-btn-red'; $disabled = 'disabled'; @@ -435,6 +435,18 @@ Lead Developer, WP Mail SMTP'; $mailer_text .= $mailer->get_debug_info(); } + $phpmailer_error = $phpmailer->ErrorInfo; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase + + // Append any PHPMailer errors to the mailer debug (except SMTP mailer, which has the full error output below). + if ( + ! empty( $phpmailer_error ) && + ! $options->is_mailer_smtp() + ) { + $mailer_text .= '
info@example.com
',
'info@localhost
, info@192.168.1.1
'
),
esc_html__( 'Make sure that the generated email has a TO header, useful when you are responsible for email creation.', 'wp-mail-smtp' ),
- ),
- ),
+ ],
+ ],
// [gmail] - Token has been expired or revoked.
- array(
+ [
'mailer' => 'gmail',
- 'errors' => array(
- array( 'invalid_grant', 'Token has been expired or revoked' ),
- ),
- 'description' => array(
+ 'errors' => [
+ [ 'invalid_grant', 'Token has been expired or revoked' ],
+ ],
+ 'description' => [
'' . esc_html__( 'Google API Error.', 'wp-mail-smtp' ) . '',
esc_html__( 'Unfortunately, this error can be due to many different reasons.', 'wp-mail-smtp' ),
- ),
- 'steps' => array(
+ ],
+ 'steps' => [
sprintf(
- wp_kses(
- /* translators: %s - Blog article URL. */
+ wp_kses( /* translators: %s - Blog article URL. */
__( 'Please read this article to learn more about what can cause this error and how it can be resolved.', 'wp-mail-smtp' ),
- array(
- 'a' => array(
- 'href' => array(),
- 'target' => array(),
- 'rel' => array(),
- ),
- )
+ [
+ 'a' => [
+ 'href' => [],
+ 'target' => [],
+ 'rel' => [],
+ ],
+ ]
),
'https://blog.timekit.io/google-oauth-invalid-grant-nightmare-and-how-to-fix-it-9f4efaf1da35'
),
- ),
- ),
+ ],
+ ],
// [gmail] - Code was already redeemed.
- array(
+ [
'mailer' => 'gmail',
- 'errors' => array(
- array( 'invalid_grant', 'Code was already redeemed' ),
- ),
- 'description' => array(
+ 'errors' => [
+ [ 'invalid_grant', 'Code was already redeemed' ],
+ ],
+ 'description' => [
'' . esc_html__( 'Google API Error.', 'wp-mail-smtp' ) . '',
esc_html__( 'Authentication code that Google returned to you has already been used on your previous auth attempt.', 'wp-mail-smtp' ),
- ),
- 'steps' => array(
+ ],
+ 'steps' => [
esc_html__( 'Make sure that you are not trying to manually clean up the plugin options to retry the "Allow..." step.', 'wp-mail-smtp' ),
esc_html__( 'Reinstall the plugin with clean plugin data turned on on Misc page. This will remove all the plugin options and you will be safe to retry.', 'wp-mail-smtp' ),
esc_html__( 'Make sure there is no aggressive caching on site admin area pages or try to clean cache between attempts.', 'wp-mail-smtp' ),
- ),
- ),
+ ],
+ ],
// [gmail] - 400: Mail service not enabled.
- array(
+ [
'mailer' => 'gmail',
- 'errors' => array(
- array( '400', 'Mail service not enabled' ),
- ),
- 'description' => array(
+ 'errors' => [
+ [ '400', 'Mail service not enabled' ],
+ ],
+ 'description' => [
'' . esc_html__( 'Google API Error.', 'wp-mail-smtp' ) . '',
esc_html__( 'There are various reasons for that, please review the steps below.', 'wp-mail-smtp' ),
- ),
- 'steps' => array(
+ ],
+ 'steps' => [
sprintf(
- wp_kses(
- /* translators: %s - Google G Suite Admin area URL. */
+ wp_kses( /* translators: %s - Google G Suite Admin area URL. */
__( 'Make sure that your G Suite trial period has not expired. You can check the status here.', 'wp-mail-smtp' ),
- array(
- 'a' => array(
- 'href' => array(),
- 'rel' => array(),
- 'target' => array(),
- ),
- )
+ [
+ 'a' => [
+ 'href' => [],
+ 'rel' => [],
+ 'target' => [],
+ ],
+ ]
),
'https://admin.google.com'
),
sprintf(
- wp_kses(
- /* translators: %s - Google G Suite Admin area URL. */
+ wp_kses( /* translators: %s - Google G Suite Admin area URL. */
__( 'Make sure that Gmail app in your G Suite is actually enabled. You can check that in Apps list in G Suite Admin area.', 'wp-mail-smtp' ),
- array(
- 'a' => array(
- 'href' => array(),
- 'rel' => array(),
- 'target' => array(),
- ),
- )
+ [
+ 'a' => [
+ 'href' => [],
+ 'rel' => [],
+ 'target' => [],
+ ],
+ ]
),
'https://admin.google.com'
),
sprintf(
- wp_kses(
- /* translators: %s - Google Developers Console URL. */
+ wp_kses( /* translators: %s - Google Developers Console URL. */
__( 'Make sure that you have Gmail API enabled, and you can do that here.', 'wp-mail-smtp' ),
- array(
- 'a' => array(
- 'href' => array(),
- 'rel' => array(),
- 'target' => array(),
- ),
- )
+ [
+ 'a' => [
+ 'href' => [],
+ 'rel' => [],
+ 'target' => [],
+ ],
+ ]
),
'https://console.developers.google.com/'
),
- ),
- ),
+ ],
+ ],
// [gmail] - 403: Project X is not found and cannot be used for API calls.
- array(
+ [
'mailer' => 'gmail',
- 'errors' => array(
- array( '403', 'is not found and cannot be used for API calls' ),
- ),
- 'description' => array(
+ 'errors' => [
+ [ '403', 'is not found and cannot be used for API calls' ],
+ ],
+ 'description' => [
'' . esc_html__( 'Google API Error.', 'wp-mail-smtp' ) . '',
- ),
- 'steps' => array(
+ ],
+ 'steps' => [
esc_html__( 'Make sure that the used Client ID/Secret correspond to a proper project that has Gmail API enabled.', 'wp-mail-smtp' ),
sprintf(
- wp_kses(
- /* translators: %s - Gmail documentation URL. */
+ wp_kses( /* translators: %s - Gmail documentation URL. */
esc_html__( 'Please follow our Gmail tutorial to be sure that all the correct project and data is applied.', 'wp-mail-smtp' ),
- array(
- 'a' => array(
- 'href' => array(),
- 'rel' => array(),
- 'target' => array(),
- ),
- )
+ [
+ 'a' => [
+ 'href' => [],
+ 'rel' => [],
+ 'target' => [],
+ ],
+ ]
),
'https://wpmailsmtp.com/docs/how-to-set-up-the-gmail-mailer-in-wp-mail-smtp/'
),
- ),
- ),
+ ],
+ ],
// [gmail] - The OAuth client was disabled.
- array(
+ [
'mailer' => 'gmail',
- 'errors' => array(
- array( 'disabled_client', 'The OAuth client was disabled' ),
- ),
- 'description' => array(
+ 'errors' => [
+ [ 'disabled_client', 'The OAuth client was disabled' ],
+ ],
+ 'description' => [
'' . esc_html__( 'Google API Error.', 'wp-mail-smtp' ) . '',
esc_html__( 'You may have added a new API to a project', 'wp-mail-smtp' ),
- ),
- 'steps' => array(
+ ],
+ 'steps' => [
esc_html__( 'Make sure that the used Client ID/Secret correspond to a proper project that has Gmail API enabled.', 'wp-mail-smtp' ),
esc_html__( 'Try to use a separate project for your emails, so the project has only 1 Gmail API in it enabled. You will need to remove the old project and create a new one from scratch.', 'wp-mail-smtp' ),
- ),
- ),
- );
+ ],
+ ],
+ // [SMTP.com] - The "channel - not found" issue.
+ [
+ 'mailer' => 'smtpcom',
+ 'errors' => [
+ [ 'channel - not found' ],
+ ],
+ 'description' => [
+ '' . esc_html__( 'SMTP.com API Error.', 'wp-mail-smtp' ) . '',
+ esc_html__( 'Your Sender Name option is incorrect.', 'wp-mail-smtp' ),
+ ],
+ 'steps' => [
+ esc_html__( 'Please make sure you entered an accurate Sender Name in WP Mail SMTP plugin settings.', 'wp-mail-smtp' ),
+ ],
+ ],
+ // [gmail] - GuzzleHttp requires cURL, the allow_url_fopen ini setting, or a custom HTTP handler.
+ [
+ 'mailer' => 'gmail',
+ 'errors' => [
+ [ 'GuzzleHttp requires cURL, the allow_url_fopen ini setting, or a custom HTTP handler' ],
+ ],
+ 'description' => [
+ '' . esc_html__( 'GuzzleHttp requirements.', 'wp-mail-smtp' ) . '',
+ esc_html__( 'GuzzleHttp requires cURL, the allow_url_fopen ini setting, or a custom HTTP handler.', 'wp-mail-smtp' ),
+ ],
+ 'steps' => [
+ esc_html__( 'Edit your php.ini file on your hosting server.', 'wp-mail-smtp' ),
+ esc_html__( '(Recommended) Enable PHP extension: cURL, by adding "extension=curl" to the php.ini file (without the quotation marks) OR', 'wp-mail-smtp' ),
+ esc_html__( '(If cURL can\'t be enabled on your hosting server) Enable PHP setting: allow_url_fopen, by adding "allow_url_fopen = On" to the php.ini file (without the quotation marks)', 'wp-mail-smtp' ),
+ esc_html__( 'If you don\'t know how to do the above we strongly suggest contacting your hosting support and provide them the "full Error Log for debugging" below and these steps. They should be able to fix this issue for you.', 'wp-mail-smtp' ),
+ ],
+ ],
+ ];
+
+ /**
+ * [any] - PHP 7.4.x and PCRE library issues.
+ *
+ * @see https://wordpress.org/support/topic/cant-send-emails-using-php-7-4/
+ */
+ if (
+ version_compare( phpversion(), '7.4', '>=' ) &&
+ defined( 'PCRE_VERSION' ) &&
+ version_compare( PCRE_VERSION, '10.0', '>' ) &&
+ version_compare( PCRE_VERSION, '10.32', '<=' )
+ ) {
+ $details[] = [
+ 'mailer' => 'any',
+ 'errors' => [
+ [ 'Invalid address: (setFrom)' ],
+ ],
+ 'description' => [
+ '' . esc_html__( 'PCRE library issue', 'wp-mail-smtp' ) . '',
+ esc_html__( 'It looks like your server is running PHP version 7.4.x with an outdated PCRE library (libpcre2) that has a known issue with email address validation.', 'wp-mail-smtp' ),
+ esc_html__( 'There is a known issue with PHP version 7.4.x, when using libpcre2 library version lower than 10.33.', 'wp-mail-smtp' ),
+ ],
+ 'steps' => [
+ esc_html__( 'Contact your web hosting provider and inform them you are having issues with libpcre2 library on PHP 7.4.', 'wp-mail-smtp' ),
+ esc_html__( 'They should be able to resolve this issue for you.', 'wp-mail-smtp' ),
+ esc_html__( 'For a quick fix, until your web hosting resolves this, you can downgrade to PHP version 7.3 on your server.', 'wp-mail-smtp' ),
+ ],
+ ];
+ }
// Error detection logic.
foreach ( $details as $data ) {
@@ -953,27 +1041,27 @@ Lead Developer, WP Mail SMTP';
}
// Return defaults.
- return array(
- 'description' => array(
+ return [
+ 'description' => [
'' . esc_html__( 'An issue was detected.', 'wp-mail-smtp' ) . '',
esc_html__( 'This means your test email was unable to be sent.', 'wp-mail-smtp' ),
esc_html__( 'Typically this error is returned for one of the following reasons:', 'wp-mail-smtp' ),
'- ' . esc_html__( 'Plugin settings are incorrect (wrong SMTP settings, invalid Mailer configuration, etc).', 'wp-mail-smtp' ) . 'migration from v' . self::get_cur_version() . ' to v' . self::VERSION . ' failed. Plugin version: v' . WPMS_PLUGIN_VER . '
'
+ );
+
+ WP::add_admin_notice( $message, WP::ADMIN_NOTICE_ERROR );
+ }
+ }
+
+ /**
+ * Update migration version in options table.
+ *
+ * @since 2.1.0
+ *
+ * @param int $version Migration version.
+ */
+ protected function update_db_ver( $version ) {
+
+ if ( empty( $version ) ) {
+ $version = self::VERSION;
+ }
+
+ // Autoload it, because this value is checked all the time
+ // and no need to request it separately from all autoloaded options.
+ update_option( self::OPTION_NAME, $version, true );
+ }
+
+ /**
+ * Prevent running the same migration twice.
+ * Run migration only when required.
+ *
+ * @since 2.1.0
+ *
+ * @param string $version The version of migration to check for potential execution.
+ */
+ protected function maybe_required_older_migrations( $version ) {
+
+ if ( version_compare( $this->cur_ver, $version, '<' ) ) {
+ $this->run( $version );
+ }
+ }
+
+ /**
+ * Migration from 0.x to 1.0.0.
+ * Move separate plugin WP options to one main plugin WP option setting.
+ *
+ * @since 2.1.0
+ */
+ private function migrate_to_1() {
+
+ if ( $this->is_migrated() ) {
+ return;
+ }
+
+ $this->old_values = $this->get_old_values();
+ $this->new_values = $this->get_converted_options();
+
+ Options::init()->set( $this->new_values, true );
+
+ $this->update_db_ver( 1 );
+ }
+
+ /**
+ * Migration from 1.x to 2.1.0.
+ * Create Tasks\Meta table, if it does not exist.
+ *
+ * @since 2.1.0
+ */
+ private function migrate_to_2() {
+
+ $this->maybe_required_older_migrations( 1 );
+
+ $meta = new Meta();
+
+ // Create the table if it doesn't exist.
+ if ( $meta && ! $meta->table_exists() ) {
+ $meta->create_table();
+ }
+
+ $this->update_db_ver( 2 );
+ }
+
+ /**
+ * Whether we already migrated or not.
+ *
+ * @since 1.0.0
+ *
+ * @return bool
+ */
+ protected function is_migrated() {
+
+ $is_migrated = false;
+ $new_values = get_option( Options::META_KEY, array() );
+
+ if ( ! empty( $new_values ) ) {
+ $is_migrated = true;
+ }
+
+ return $is_migrated;
+ }
+
+ /**
+ * Get all old values from DB.
+ *
+ * @since 1.0.0
+ *
+ * @return array
+ */
+ protected function get_old_values() {
+
+ $old_values = array();
+
+ foreach ( $this->old_keys as $old_key ) {
+ $value = get_option( $old_key, '' );
+
+ if ( ! empty( $value ) ) {
+ $old_values[ $old_key ] = $value;
+ }
+ }
+
+ return $old_values;
+ }
+
+ /**
+ * Convert old values from key=>value to a multidimensional array of data.
+ *
+ * @since 1.0.0
+ */
+ protected function get_converted_options() {
+
+ $converted = array();
+
+ foreach ( $this->old_keys as $old_key ) {
+
+ $old_value = isset( $this->old_values[ $old_key ] ) ? $this->old_values[ $old_key ] : '';
+
+ switch ( $old_key ) {
+ case 'pepipost_user':
+ case 'pepipost_pass':
+ case 'pepipost_port':
+ case 'pepipost_ssl':
+ // Do not migrate pepipost options if it's not activated at the moment.
+ if ( isset( $this->old_values['mailer'] ) && $this->old_values['mailer'] === 'pepipost' ) {
+ $shortcut = explode( '_', $old_key );
+
+ if ( $old_key === 'pepipost_ssl' ) {
+ $converted[ $shortcut[0] ]['encryption'] = $old_value;
+ } else {
+ $converted[ $shortcut[0] ][ $shortcut[1] ] = $old_value;
+ }
+ }
+ break;
+
+ case 'smtp_host':
+ case 'smtp_port':
+ case 'smtp_ssl':
+ case 'smtp_auth':
+ case 'smtp_user':
+ case 'smtp_pass':
+ $shortcut = explode( '_', $old_key );
+
+ if ( $old_key === 'smtp_ssl' ) {
+ $converted[ $shortcut[0] ]['encryption'] = $old_value;
+ } elseif ( $old_key === 'smtp_auth' ) {
+ $converted[ $shortcut[0] ][ $shortcut[1] ] = ( $old_value === 'true' ? 'yes' : 'no' );
+ } else {
+ $converted[ $shortcut[0] ][ $shortcut[1] ] = $old_value;
+ }
+
+ break;
+
+ case 'mail_from':
+ $converted['mail']['from_email'] = $old_value;
+ break;
+ case 'mail_from_name':
+ $converted['mail']['from_name'] = $old_value;
+ break;
+ case 'mail_set_return_path':
+ $converted['mail']['return_path'] = ( $old_value === 'true' );
+ break;
+ case 'mailer':
+ $converted['mail']['mailer'] = $old_value;
+ break;
+ case 'wp_mail_smtp_am_notifications_hidden':
+ $converted['general']['am_notifications_hidden'] = ( isset( $old_value ) && $old_value === 'true' );
+ break;
+ }
+ }
+
+ $converted = $this->get_converted_constants_options( $converted );
+
+ return $converted;
+ }
+
+ /**
+ * Some users use constants in wp-config.php to define values.
+ * We need to prioritize them and reapply data to options.
+ * Use only those that are actually defined.
+ *
+ * @since 1.0.0
+ *
+ * @param array $converted
+ *
+ * @return array
+ */
+ protected function get_converted_constants_options( $converted ) {
+
+ // Are we configured via constants?
+ if ( ! defined( 'WPMS_ON' ) || ! WPMS_ON ) {
+ return $converted;
+ }
+
+ /*
+ * Mail settings.
+ */
+ if ( defined( 'WPMS_MAIL_FROM' ) ) {
+ $converted['mail']['from_email'] = WPMS_MAIL_FROM;
+ }
+ if ( defined( 'WPMS_MAIL_FROM_NAME' ) ) {
+ $converted['mail']['from_name'] = WPMS_MAIL_FROM_NAME;
+ }
+ if ( defined( 'WPMS_MAILER' ) ) {
+ $converted['mail']['mailer'] = WPMS_MAILER;
+ }
+ if ( defined( 'WPMS_SET_RETURN_PATH' ) ) {
+ $converted['mail']['return_path'] = WPMS_SET_RETURN_PATH;
+ }
+
+ /*
+ * SMTP settings.
+ */
+ if ( defined( 'WPMS_SMTP_HOST' ) ) {
+ $converted['smtp']['host'] = WPMS_SMTP_HOST;
+ }
+ if ( defined( 'WPMS_SMTP_PORT' ) ) {
+ $converted['smtp']['port'] = WPMS_SMTP_PORT;
+ }
+ if ( defined( 'WPMS_SSL' ) ) {
+ $converted['smtp']['ssl'] = WPMS_SSL;
+ }
+ if ( defined( 'WPMS_SMTP_AUTH' ) ) {
+ $converted['smtp']['auth'] = WPMS_SMTP_AUTH;
+ }
+ if ( defined( 'WPMS_SMTP_USER' ) ) {
+ $converted['smtp']['user'] = WPMS_SMTP_USER;
+ }
+ if ( defined( 'WPMS_SMTP_PASS' ) ) {
+ $converted['smtp']['pass'] = WPMS_SMTP_PASS;
+ }
+
+ return $converted;
+ }
+
+ /**
+ * Delete all old values that are stored separately each.
+ *
+ * @since 1.0.0
+ */
+ protected function clean_deprecated_data() {
+
+ foreach ( $this->old_keys as $old_key ) {
+ delete_option( $old_key );
+ }
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/src/Options.php b/wp-content/plugins/wp-mail-smtp/src/Options.php
index de907a0..b39e191 100644
--- a/wp-content/plugins/wp-mail-smtp/src/Options.php
+++ b/wp-content/plugins/wp-mail-smtp/src/Options.php
@@ -19,21 +19,22 @@ class Options {
* @since 1.4.0 Added Mailgun:region.
* @since 1.5.0 Added Outlook/AmazonSES.
* @since 1.8.0 Added Pepipost API.
+ * @since 2.0.0 Added SMTP.com API.
*
* @since
*
* @var array Map of all the default options of the plugin.
*/
- private static $map = array(
- 'mail' => array(
+ private static $map = [
+ 'mail' => [
'from_name',
'from_email',
'mailer',
'return_path',
'from_name_force',
'from_email_force',
- ),
- 'smtp' => array(
+ ],
+ 'smtp' => [
'host',
'port',
'encryption',
@@ -41,62 +42,64 @@ class Options {
'auth',
'user',
'pass',
- ),
- 'gmail' => array(
+ ],
+ 'gmail' => [
'client_id',
'client_secret',
- ),
- 'outlook' => array(
+ ],
+ 'outlook' => [
'client_id',
'client_secret',
- ),
- 'amazonses' => array(
+ ],
+ 'amazonses' => [
'client_id',
'client_secret',
'region',
'emails_pending',
- ),
- 'mailgun' => array(
+ ],
+ 'mailgun' => [
'api_key',
'domain',
'region',
- ),
- 'sendgrid' => array(
+ ],
+ 'sendgrid' => [
'api_key',
- ),
- 'smtpcom' => array(
+ ],
+ 'smtpcom' => [
'api_key',
'channel',
- ),
- 'sendinblue' => array(
+ ],
+ 'sendinblue' => [
'api_key',
- ),
- 'pepipostapi' => array(
+ ],
+ 'pepipostapi' => [
'api_key',
- ),
- 'pepipost' => array(
+ ],
+ 'pepipost' => [
'host',
'port',
'encryption',
'auth',
'user',
'pass',
- ),
- 'license' => array(
+ ],
+ 'license' => [
'key',
- ),
- );
+ ],
+ ];
/**
* That's where plugin options are saved in wp_options table.
*
- * @var string
+ * @since 1.0.0
*/
const META_KEY = 'wp_mail_smtp';
/**
* All the plugin options.
*
+ * @since 1.0.0
+ *
* @var array
*/
private $_options = array();
@@ -141,6 +144,7 @@ class Options {
* Default options that are saved on plugin activation.
*
* @since 1.3.0
+ * @since 2.1.0 Set the Force from email to "on" by default.
*
* @return array
*/
@@ -152,7 +156,7 @@ class Options {
'from_name' => get_bloginfo( 'name' ),
'mailer' => 'mail',
'return_path' => false,
- 'from_email_force' => false,
+ 'from_email_force' => true,
'from_name_force' => false,
),
'smtp' => array(
@@ -784,7 +788,7 @@ class Options {
* @since 1.5.0 Added Outlook/AmazonSES, Email Log. Stop saving const values into DB.
*
* @param array $options Plugin options to save.
- * @param bool $once Whether to update existing options or to add these options only once.
+ * @param bool $once Whether to update existing options or to add these options only once.
*/
public function set( $options, $once = false ) {
/*
diff --git a/wp-content/plugins/wp-mail-smtp/src/Processor.php b/wp-content/plugins/wp-mail-smtp/src/Processor.php
index 3661785..9c99591 100644
--- a/wp-content/plugins/wp-mail-smtp/src/Processor.php
+++ b/wp-content/plugins/wp-mail-smtp/src/Processor.php
@@ -9,6 +9,18 @@ namespace WPMailSMTP;
*/
class Processor {
+ /**
+ * This attribute will hold the "original" WP from email address passed to the wp_mail_from filter,
+ * that is not equal to the default email address.
+ *
+ * It should hold an email address set via the wp_mail_from filter, before we might overwrite it.
+ *
+ * @since 2.1.0
+ *
+ * @var string
+ */
+ protected $wp_mail_from;
+
/**
* Processor constructor.
*
@@ -81,6 +93,11 @@ class Processor {
$phpmailer->SMTPAutoTLS = false;
}
+ // Check if original WP from email can be set as the reply_to attribute.
+ if ( $this->allow_setting_original_from_email_to_reply_to( $phpmailer->getReplyToAddresses(), $mailer ) ) {
+ $phpmailer->addReplyTo( $this->wp_mail_from );
+ }
+
// If we're sending via SMTP, set the host.
if ( 'smtp' === $mailer ) {
// Set the other options.
@@ -104,12 +121,62 @@ class Processor {
$phpmailer->Password = $options->get( $mailer, 'pass' );
}
+ // Maybe set default reply-to header.
+ $this->set_default_reply_to( $phpmailer );
+
// You can add your own options here.
// See the phpmailer documentation for more info: https://github.com/PHPMailer/PHPMailer/tree/5.2-stable.
/** @noinspection PhpUnusedLocalVariableInspection It's passed by reference. */
$phpmailer = apply_filters( 'wp_mail_smtp_custom_options', $phpmailer );
}
+ /**
+ * Check if it's allowed to set the original WP from email to the reply_to field.
+ *
+ * @since 2.1.0
+ *
+ * @param array $reply_to Array of currently set reply to emails.
+ * @param string $mailer The slug of current mailer.
+ *
+ * @return bool
+ */
+ protected function allow_setting_original_from_email_to_reply_to( $reply_to, $mailer ) {
+
+ $options = new Options();
+ $forced = $options->get( 'mail', 'from_email_force' );
+ $from_email = $options->get( 'mail', 'from_email' );
+
+ if ( ! empty( $reply_to ) ) {
+ return false;
+ }
+
+ if ( in_array( $mailer, array( 'gmail', 'outlook' ), true ) ) {
+ $forced = true;
+
+ switch ( $mailer ) {
+ case 'gmail':
+ $sender = wp_mail_smtp()->get_providers()->get_auth( 'gmail' )->get_user_info();
+ break;
+
+ case 'outlook':
+ $sender = $options->get( 'outlook', 'user_details' );
+ break;
+ }
+
+ $from_email = ! empty( $sender['email'] ) ? $sender['email'] : '';
+ }
+
+ if (
+ empty( $this->wp_mail_from ) ||
+ $from_email === $this->wp_mail_from ||
+ ! $forced
+ ) {
+ return false;
+ }
+
+ return true;
+ }
+
/**
* This method will be called every time 'smtp' and 'mail' mailers will be used to send emails.
*
@@ -157,6 +224,11 @@ class Processor {
$from_email = $options->get( 'mail', 'from_email' );
$def_email = $this->get_default_email();
+ // Save the "original" set WP email from address for later use.
+ if ( $wp_email !== $def_email ) {
+ $this->wp_mail_from = $wp_email;
+ }
+
// Return FROM EMAIL if forced in settings.
if ( $forced & ! empty( $from_email ) ) {
return $from_email;
@@ -250,4 +322,34 @@ class Processor {
return $phpmailer;
}
+
+ /**
+ * Set the default reply_to header, if:
+ * - no other reply_to headers are already set and,
+ * - the default reply_to address filter `wp_mail_smtp_processor_default_reply_to_addresses` is configured.
+ *
+ * @since 2.1.1
+ *
+ * @param \PHPMailer $phpmailer The PHPMailer object.
+ */
+ private function set_default_reply_to( $phpmailer ) {
+
+ if ( ! empty( $phpmailer->getReplyToAddresses() ) ) {
+ return;
+ }
+
+ $default_reply_to_emails = apply_filters( 'wp_mail_smtp_processor_set_default_reply_to', '' );
+
+ if ( empty( $default_reply_to_emails ) ) {
+ return;
+ }
+
+ foreach ( explode( ',', $default_reply_to_emails ) as $email ) {
+ $email = trim( $email );
+
+ if ( filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
+ $phpmailer->addReplyTo( $email );
+ }
+ }
+ }
}
diff --git a/wp-content/plugins/wp-mail-smtp/src/Providers/Gmail/Mailer.php b/wp-content/plugins/wp-mail-smtp/src/Providers/Gmail/Mailer.php
index d3e81b7..5fb87da 100644
--- a/wp-content/plugins/wp-mail-smtp/src/Providers/Gmail/Mailer.php
+++ b/wp-content/plugins/wp-mail-smtp/src/Providers/Gmail/Mailer.php
@@ -92,26 +92,28 @@ class Mailer extends MailerAbstract {
$this->phpmailer->Sender = $gmail_creds['email'];
}
- // Get the raw MIME email using MailCatcher data.
- // We need here to make base64URL-safe string.
- $base64 = str_replace(
- array( '+', '/', '=' ),
- array( '-', '_', '' ),
- base64_encode( $this->phpmailer->getSentMIMEMessage() )
- );
-
- $message->setRaw( $base64 );
-
- $service = new \Google_Service_Gmail( $auth->get_client() );
-
try {
+ // Prepare a message for sending.
+ $this->phpmailer->preSend();
+
+ // Get the raw MIME email using MailCatcher data.
+ // We need here to make base64URL-safe string.
+ $base64 = str_replace(
+ [ '+', '/', '=' ],
+ [ '-', '_', '' ],
+ base64_encode( $this->phpmailer->getSentMIMEMessage() ) //phpcs:ignore
+ );
+
+ $message->setRaw( $base64 );
+
+ $service = new \Google_Service_Gmail( $auth->get_client() );
$response = $service->users_messages->send( 'me', $message );
$this->process_response( $response );
} catch ( \Exception $e ) {
Debug::set(
'Mailer: Gmail' . "\r\n" .
- $e->getMessage()
+ $this->process_exception_message( $e->getMessage() )
);
return;
@@ -124,7 +126,7 @@ class Mailer extends MailerAbstract {
* @since 1.0.0
* @since 1.5.0 Added action "wp_mail_smtp_providers_gmail_mailer_process_response" with $response.
*
- * @param \Google_Service_Gmail_Message $response
+ * @param \Google_Service_Gmail_Message $response Instance of Gmail response.
*/
protected function process_response( $response ) {
@@ -160,7 +162,12 @@ class Mailer extends MailerAbstract {
}
/**
- * @inheritdoc
+ * This method is relevant to SMTP and Pepipost.
+ * All other custom mailers should override it with own information.
+ *
+ * @since 1.2.0
+ *
+ * @return string
*/
public function get_debug_info() {
@@ -200,7 +207,11 @@ class Mailer extends MailerAbstract {
}
/**
- * @inheritdoc
+ * Whether the mailer has all its settings correctly set up and saved.
+ *
+ * @since 1.4.0
+ *
+ * @return bool
*/
public function is_mailer_complete() {
@@ -219,4 +230,75 @@ class Mailer extends MailerAbstract {
return false;
}
+
+ /**
+ * Process the exception message and append additional explanation to it.
+ *
+ * @since 2.1.0
+ *
+ * @param mixed $message A string or an object with strings.
+ *
+ * @return string
+ */
+ protected function process_exception_message( $message ) {
+
+ // Transform the passed message to a string.
+ if ( ! is_string( $message ) ) {
+ $message = wp_json_encode( $message );
+ } else {
+ $message = wp_strip_all_tags( $message, false );
+ }
+
+ // Define known errors, that we will scan the message with.
+ $known_errors = array(
+ array(
+ 'errors' => array(
+ 'invalid_grant',
+ ),
+ 'explanation' => esc_html__( 'Please re-grant Google app permissions!', 'wp-mail-smtp' ) . ' ' . PHP_EOL .
+ esc_html__( 'Go to WP Mail SMTP plugin settings page. Click the “Remove Connection” button.', 'wp-mail-smtp' ) . ' ' . PHP_EOL .
+ esc_html__( 'Then click the “Allow plugin to send emails using your Google account” button and re-enable access.', 'wp-mail-smtp' ),
+ ),
+ );
+
+ // Check if we get a match and append the explanation to the original message.
+ foreach ( $known_errors as $error ) {
+ foreach ( $error['errors'] as $error_fragment ) {
+ if ( false !== strpos( $message, $error_fragment ) ) {
+ return $message . PHP_EOL . $error['explanation'];
+ }
+ }
+ }
+
+ // If we get no match we return the original message (as a string).
+ return $message;
+ }
+
+ /**
+ * Get the default email addresses for the reply to email parameter.
+ *
+ * @deprecated 2.1.1
+ *
+ * @since 2.1.0
+ * @since 2.1.1 Not used anymore.
+ *
+ * @return array
+ */
+ public function default_reply_to_addresses() {
+
+ _deprecated_function( __CLASS__ . '::' . __METHOD__, '2.1.1 of WP Mail SMTP plugin' );
+
+ $gmail_creds = ( new Auth() )->get_user_info();
+
+ if ( empty( $gmail_creds['email'] ) ) {
+ return [];
+ }
+
+ return [
+ $gmail_creds['email'] => [
+ $gmail_creds['email'],
+ '',
+ ],
+ ];
+ }
}
diff --git a/wp-content/plugins/wp-mail-smtp/src/Providers/Loader.php b/wp-content/plugins/wp-mail-smtp/src/Providers/Loader.php
index e90253b..506af82 100644
--- a/wp-content/plugins/wp-mail-smtp/src/Providers/Loader.php
+++ b/wp-content/plugins/wp-mail-smtp/src/Providers/Loader.php
@@ -132,8 +132,8 @@ class Loader {
*
* @since 1.0.0
*
- * @param string $provider
- * @param MailCatcher $phpmailer
+ * @param string $provider The provider name.
+ * @param MailCatcher|\PHPMailer $phpmailer The MailCatcher object.
*
* @return MailerAbstract|null
*/
diff --git a/wp-content/plugins/wp-mail-smtp/src/Providers/MailerAbstract.php b/wp-content/plugins/wp-mail-smtp/src/Providers/MailerAbstract.php
index 68aa408..b0e2441 100644
--- a/wp-content/plugins/wp-mail-smtp/src/Providers/MailerAbstract.php
+++ b/wp-content/plugins/wp-mail-smtp/src/Providers/MailerAbstract.php
@@ -414,4 +414,54 @@ abstract class MailerAbstract implements MailerInterface {
return implode( '
-
+
- wp-config.php'
- );
- ?>
+
+
+
- define( 'WPMS_ON', true ); - define( 'WPMS_SMTP_PASS', 'your_password' ); -@@ -440,13 +432,21 @@ abstract class OptionsAbstract implements OptionsInterface {
WPBeginner\'s tutorial on how to set up SSL.', 'wp-mail-smtp' ), + [ + 'a' => [ + 'href' => [], + 'target' => [], + ], + ] + ), esc_html( $this->get_title() ) ); ?>SMTP.com is a recommended transactional email service. With over 22 years of email delivery expertise, SMTP.com has been around for almost as long as email itself. They are known among internet providers as one of the most reliable senders on the internet. Their easy integration process lets you start sending emails in minutes and benefit from years of experience. SMTP.com provides users 10,000 free emails the first 30 days.', 'wp-mail-smtp' ), + __( 'SMTP.com is a recommended transactional email service. With a 22 years of track record of reliable email delivery, SMTP.com is a premiere solution for WordPress developers and website owners. SMTP.com has been around for almost as long as email itself. Their super simple integration interface makes it easy to get started while a powerful API and robust documentation make it a preferred choice among developers. Start a 30-day free trial with 50,000 emails.', 'wp-mail-smtp' ), $allowed_kses_html ), 'https://wpmailsmtp.com/go/smtp/' diff --git a/wp-content/plugins/wp-mail-smtp/src/Tasks/Meta.php b/wp-content/plugins/wp-mail-smtp/src/Tasks/Meta.php new file mode 100644 index 0000000..c386959 --- /dev/null +++ b/wp-content/plugins/wp-mail-smtp/src/Tasks/Meta.php @@ -0,0 +1,527 @@ +191 chars in JSON to AS, + * so we need to store them somewhere (and clean from time to time). + * + * @since 2.1.0 + */ +class Meta { + + /** + * Database table name. + * + * @since 2.1.0 + * + * @var string + */ + public $table_name; + + /** + * Database version. + * + * @since 2.1.0 + * + * @var string + */ + public $version; + + /** + * Primary key (unique field) for the database table. + * + * @since 2.1.0 + * + * @var string + */ + public $primary_key = 'id'; + + /** + * Database type identifier. + * + * @since 2.1.0 + * + * @var string + */ + public $type = 'tasks_meta'; + + /** + * Primary class constructor. + * + * @since 2.1.0 + */ + public function __construct() { + + $this->table_name = self::get_table_name(); + } + + /** + * Get the DB table name. + * + * @since 2.1.0 + * + * @return string + */ + public static function get_table_name() { + + global $wpdb; + + return $wpdb->prefix . 'wpmailsmtp_tasks_meta'; + } + + /** + * Get table columns. + * + * @since 2.1.0 + */ + public function get_columns() { + + return array( + 'id' => '%d', + 'action' => '%s', + 'data' => '%s', + 'date' => '%s', + ); + } + + /** + * Default column values. + * + * @since 2.1.0 + * + * @return array + */ + public function get_column_defaults() { + + return array( + 'action' => '', + 'data' => '', + 'date' => gmdate( 'Y-m-d H:i:s' ), + ); + } + + /** + * Retrieve a row from the database based on a given row ID. + * + * @since 2.1.0 + * + * @param int $row_id Row ID. + * + * @return null|object + */ + private function get_from_db( $row_id ) { + + global $wpdb; + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching + return $wpdb->get_row( + $wpdb->prepare( + "SELECT * FROM {$this->table_name} WHERE {$this->primary_key} = %s LIMIT 1;", // phpcs:ignore + $row_id + ) + ); + } + + /** + * Retrieve a row based on column and row ID. + * + * @since 2.1.0 + * + * @param string $column Column name. + * @param int|string $row_id Row ID. + * + * @return object|null|bool Database query result, object or null on failure. + */ + public function get_by( $column, $row_id ) { + + global $wpdb; + + if ( empty( $row_id ) || ! array_key_exists( $column, $this->get_columns() ) ) { + return false; + } + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching + return $wpdb->get_row( + $wpdb->prepare( + "SELECT * FROM $this->table_name WHERE $column = '%s' LIMIT 1;", // phpcs:ignore + $row_id + ) + ); + } + + /** + * Retrieve a value based on column name and row ID. + * + * @since 2.1.0 + * + * @param string $column Column name. + * @param int|string $row_id Row ID. + * + * @return string|null Database query result (as string), or null on failure. + */ + public function get_column( $column, $row_id ) { + + global $wpdb; + + if ( empty( $row_id ) || ! array_key_exists( $column, $this->get_columns() ) ) { + return false; + } + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching + return $wpdb->get_var( + $wpdb->prepare( + "SELECT $column FROM $this->table_name WHERE $this->primary_key = '%s' LIMIT 1;", // phpcs:ignore + $row_id + ) + ); + } + + /** + * Retrieve one column value based on another given column and matching value. + * + * @since 2.1.0 + * + * @param string $column Column name. + * @param string $column_where Column to match against in the WHERE clause. + * @param string $column_value Value to match to the column in the WHERE clause. + * + * @return string|null Database query result (as string), or null on failure. + */ + public function get_column_by( $column, $column_where, $column_value ) { + + global $wpdb; + + if ( empty( $column ) || empty( $column_where ) || empty( $column_value ) || ! array_key_exists( $column, $this->get_columns() ) ) { + return false; + } + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching + return $wpdb->get_var( + $wpdb->prepare( + "SELECT $column FROM $this->table_name WHERE $column_where = %s LIMIT 1;", // phpcs:ignore + $column_value + ) + ); + } + + /** + * Insert a new record into the database. + * + * @since 2.1.0 + * + * @param array $data Column data. + * @param string $type Optional. Data type context. + * + * @return int ID for the newly inserted record. 0 otherwise. + */ + private function add_to_db( $data, $type = '' ) { + + global $wpdb; + + // Set default values. + $data = wp_parse_args( $data, $this->get_column_defaults() ); + + do_action( 'wp_mail_smtp_pre_insert_' . $type, $data ); + + // Initialise column format array. + $column_formats = $this->get_columns(); + + // Force fields to lower case. + $data = array_change_key_case( $data ); + + // White list columns. + $data = array_intersect_key( $data, $column_formats ); + + // Reorder $column_formats to match the order of columns given in $data. + $data_keys = array_keys( $data ); + $column_formats = array_merge( array_flip( $data_keys ), $column_formats ); + + $wpdb->insert( $this->table_name, $data, $column_formats ); + + do_action( 'wp_mail_smtp_post_insert_' . $type, $wpdb->insert_id, $data ); + + return $wpdb->insert_id; + } + + /** + * Update an existing record in the database. + * + * @since 2.1.0 + * + * @param int|string $row_id Row ID for the record being updated. + * @param array $data Optional. Array of columns and associated data to update. Default empty array. + * @param string $where Optional. Column to match against in the WHERE clause. If empty, $primary_key + * will be used. Default empty. + * @param string $type Optional. Data type context, e.g. 'affiliate', 'creative', etc. Default empty. + * + * @return bool False if the record could not be updated, true otherwise. + */ + public function update( $row_id, $data = array(), $where = '', $type = '' ) { + + global $wpdb; + + // Row ID must be a positive integer. + $row_id = absint( $row_id ); + + if ( empty( $row_id ) ) { + return false; + } + + if ( empty( $where ) ) { + $where = $this->primary_key; + } + + do_action( 'wp_mail_smtp_pre_update_' . $type, $data ); + + // Initialise column format array. + $column_formats = $this->get_columns(); + + // Force fields to lower case. + $data = array_change_key_case( $data ); + + // White list columns. + $data = array_intersect_key( $data, $column_formats ); + + // Reorder $column_formats to match the order of columns given in $data. + $data_keys = array_keys( $data ); + $column_formats = array_merge( array_flip( $data_keys ), $column_formats ); + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching + if ( false === $wpdb->update( $this->table_name, $data, array( $where => $row_id ), $column_formats ) ) { + return false; + } + + do_action( 'wp_mail_smtp_post_update_' . $type, $data ); + + return true; + } + + /** + * Delete a record from the database. + * + * @since 2.1.0 + * + * @param int|string $row_id Row ID. + * + * @return bool False if the record could not be deleted, true otherwise. + */ + public function delete( $row_id = 0 ) { + + global $wpdb; + + // Row ID must be positive integer. + $row_id = absint( $row_id ); + + if ( empty( $row_id ) ) { + return false; + } + + do_action( 'wp_mail_smtp_pre_delete', $row_id ); + do_action( 'wp_mail_smtp_pre_delete_' . $this->type, $row_id ); + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching + if ( false === $wpdb->query( $wpdb->prepare( "DELETE FROM {$this->table_name} WHERE {$this->primary_key} = %d", $row_id ) ) ) { // phpcs:ignore + return false; + } + + do_action( 'wp_mail_smtp_post_delete', $row_id ); + do_action( 'wp_mail_smtp_post_delete_' . $this->type, $row_id ); + + return true; + } + + /** + * Delete a record from the database by column. + * + * @since 2.1.0 + * + * @param string $column Column name. + * @param int|string $column_value Column value. + * + * @return bool False if the record could not be deleted, true otherwise. + */ + public function delete_by( $column, $column_value ) { + + global $wpdb; + + if ( empty( $column ) || empty( $column_value ) || ! array_key_exists( $column, $this->get_columns() ) ) { + return false; + } + + do_action( 'wp_mail_smtp_pre_delete', $column_value ); + do_action( 'wp_mail_smtp_pre_delete_' . $this->type, $column_value ); + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching + if ( false === $wpdb->query( $wpdb->prepare( "DELETE FROM {$this->table_name} WHERE $column = %s", $column_value ) ) ) { // phpcs:ignore + return false; + } + + do_action( 'wp_mail_smtp_post_delete', $column_value ); + do_action( 'wp_mail_smtp_post_delete_' . $this->type, $column_value ); + + return true; + } + + /** + * Check if the given table exists. + * + * @since 2.1.0 + * + * @param string $table The table name. Defaults to the child class table name. + * + * @return string|null If the table name exists. + */ + public function table_exists( $table = '' ) { + + global $wpdb; + + if ( ! empty( $table ) ) { + $table = sanitize_text_field( $table ); + } else { + $table = $this->table_name; + } + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching + return $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $table ) ) === $table; + } + + /** + * Create custom entry meta database table. + * Used in migration. + * + * @since 2.1.0 + */ + public function create_table() { + + global $wpdb; + + require_once ABSPATH . 'wp-admin/includes/upgrade.php'; + + $charset_collate = ''; + + if ( ! empty( $wpdb->charset ) ) { + $charset_collate .= "DEFAULT CHARACTER SET {$wpdb->charset}"; + } + if ( ! empty( $wpdb->collate ) ) { + $charset_collate .= " COLLATE {$wpdb->collate}"; + } + + $sql = "CREATE TABLE {$this->table_name} ( + id bigint(20) NOT NULL AUTO_INCREMENT, + action varchar(255) NOT NULL, + data longtext NOT NULL, + date datetime NOT NULL, + PRIMARY KEY (id) + ) {$charset_collate};"; + + dbDelta( $sql ); + } + + /** + * Remove queue records for a defined period of time in the past. + * Calling this method will remove queue records that are older than $period seconds. + * + * @since 2.1.0 + * + * @param string $action Action that should be cleaned up. + * @param int $interval Number of seconds from now. + * + * @return int Number of removed tasks meta records. + */ + public function clean_by( $action, $interval ) { + + global $wpdb; + + if ( empty( $action ) || empty( $interval ) ) { + return 0; + } + + $table = self::get_table_name(); + $action = sanitize_key( $action ); + $date = gmdate( 'Y-m-d H:i:s', time() - (int) $interval ); + + // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching + return (int) $wpdb->query( + $wpdb->prepare( + "DELETE FROM `$table` WHERE action = %s AND date < %s", // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared + $action, + $date + ) + ); + } + + /** + * Inserts a new record into the database. + * + * @since 2.1.0 + * + * @param array $data Column data. + * @param string $type Optional. Data type context. + * + * @return int ID for the newly inserted record. 0 otherwise. + */ + public function add( $data, $type = '' ) { + + if ( empty( $data['action'] ) || ! is_string( $data['action'] ) ) { + return 0; + } + + $data['action'] = sanitize_key( $data['action'] ); + + if ( isset( $data['data'] ) ) { + $string = wp_json_encode( $data['data'] ); + + if ( $string === false ) { + $string = ''; + } + + /* + * We are encoding the string representation of all the data + * to make sure that nothing can harm the database. + * This is not an encryption, and we need this data later as is, + * so we are using one of the fastest way to do that. + * This data is removed from DB on a daily basis. + */ + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode + $data['data'] = base64_encode( $string ); + } + + if ( empty( $type ) ) { + $type = $this->type; + } + + return $this->add_to_db( $data, $type ); + } + + /** + * Retrieve a row from the database based on a given row ID. + * + * @since 2.1.0} + * + * @param int $meta_id Meta ID. + * + * @return null|object + */ + public function get( $meta_id ) { + + $meta = $this->get_from_db( $meta_id ); + + if ( empty( $meta ) || empty( $meta->data ) ) { + return $meta; + } + + // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode + $decoded = base64_decode( $meta->data ); + + if ( $decoded === false || ! is_string( $decoded ) ) { + $meta->data = ''; + } else { + $meta->data = json_decode( $decoded, true ); + } + + return $meta; + } +} diff --git a/wp-content/plugins/wp-mail-smtp/src/Tasks/Task.php b/wp-content/plugins/wp-mail-smtp/src/Tasks/Task.php new file mode 100644 index 0000000..ed39ce7 --- /dev/null +++ b/wp-content/plugins/wp-mail-smtp/src/Tasks/Task.php @@ -0,0 +1,304 @@ +action = sanitize_key( $action ); + + if ( empty( $this->action ) ) { + throw new \UnexpectedValueException( 'Task action cannot be empty.' ); + } + } + + /** + * Define the type of the task as async. + * + * @since 2.1.0 + * + * @return Task + */ + public function async() { + + $this->type = self::TYPE_ASYNC; + + return $this; + } + + /** + * Define the type of the task as recurring. + * + * @since 2.1.0 + * + * @param int $timestamp When the first instance of the job will run. + * @param int $interval How long to wait between runs. + * + * @return Task + */ + public function recurring( $timestamp, $interval ) { + + $this->type = self::TYPE_RECURRING; + $this->timestamp = (int) $timestamp; + $this->interval = (int) $interval; + + return $this; + } + + /** + * Define the type of the task as one-time. + * + * @since 2.1.0 + * + * @param int $timestamp When the first instance of the job will run. + * + * @return Task + */ + public function once( $timestamp ) { + + $this->type = self::TYPE_ONCE; + $this->timestamp = (int) $timestamp; + + return $this; + } + + /** + * Pass any number of params that should be saved to Meta table. + * + * @since 2.1.0 + * + * @return Task + */ + public function params() { + + $this->params = func_get_args(); + + return $this; + } + + /** + * Register the action. + * Should be the final call in a chain. + * + * @since 2.1.0 + * + * @return null|string Action ID. + */ + public function register() { + + $action_id = null; + + // No processing if ActionScheduler is not usable. + if ( ! wp_mail_smtp()->get_tasks()->is_usable() ) { + return $action_id; + } + + // Save data to tasks meta table. + $task_meta = new Meta(); + $this->meta_id = $task_meta->add( + [ + 'action' => $this->action, + 'data' => $this->params, + ] + ); + + if ( empty( $this->meta_id ) ) { + return $action_id; + } + + switch ( $this->type ) { + case self::TYPE_ASYNC: + $action_id = $this->register_async(); + break; + + case self::TYPE_RECURRING: + $action_id = $this->register_recurring(); + break; + + case self::TYPE_ONCE: + $action_id = $this->register_once(); + break; + } + + return $action_id; + } + + /** + * Register the async task. + * + * @since 2.1.0 + * + * @return null|string Action ID. + */ + protected function register_async() { + + if ( ! function_exists( 'as_enqueue_async_action' ) ) { + return null; + } + + return as_enqueue_async_action( + $this->action, + [ 'tasks_meta_id' => $this->meta_id ], + Tasks::GROUP + ); + } + + /** + * Register the recurring task. + * + * @since 2.1.0 + * + * @return null|string Action ID. + */ + protected function register_recurring() { + + if ( ! function_exists( 'as_schedule_recurring_action' ) ) { + return null; + } + + return as_schedule_recurring_action( + $this->timestamp, + $this->interval, + $this->action, + [ 'tasks_meta_id' => $this->meta_id ], + Tasks::GROUP + ); + } + + /** + * Register the one-time task. + * + * @since 2.1.0 + * + * @return null|string Action ID. + */ + protected function register_once() { + + if ( ! function_exists( 'as_schedule_single_action' ) ) { + return null; + } + + return as_schedule_single_action( + $this->timestamp, + $this->action, + [ 'tasks_meta_id' => $this->meta_id ], + Tasks::GROUP + ); + } + + /** + * Cancel all occurrences of this task. + * + * @since 2.1.0 + * + * @return null|bool|string Null if no matching action found, + * false if AS library is missing, + * string of the scheduled action ID if a scheduled action was found and unscheduled. + */ + public function cancel() { + + // Exit if AS function does not exist. + if ( ! function_exists( 'as_unschedule_all_actions' ) ) { + return false; + } + + return as_unschedule_all_actions( $this->action ); + } +} diff --git a/wp-content/plugins/wp-mail-smtp/src/Tasks/Tasks.php b/wp-content/plugins/wp-mail-smtp/src/Tasks/Tasks.php new file mode 100644 index 0000000..ab74ec1 --- /dev/null +++ b/wp-content/plugins/wp-mail-smtp/src/Tasks/Tasks.php @@ -0,0 +1,150 @@ +get_tasks() as $task ) { + if ( ! is_subclass_of( $task, '\WPMailSMTP\Tasks\Task' ) ) { + continue; + } + + $new_task = new $task(); + + // Run the init method, if a task has one defined. + if ( method_exists( $new_task, 'init' ) ) { + $new_task->init(); + } + } + + add_action( 'admin_menu', array( $this, 'admin_hide_as_menu' ), PHP_INT_MAX ); + } + + /** + * Get the list of default scheduled tasks. + * Tasks, that are fired under certain specific circumstances + * (like sending emails) are not listed here. + * + * @since 2.1.0 + * + * @return Task[] List of tasks classes. + */ + public function get_tasks() { + + return apply_filters( 'wp_mail_smtp_tasks_get_tasks', array() ); + } + + /** + * Hide Action Scheduler admin area when not in debug mode. + * + * @since 2.1.0 + */ + public function admin_hide_as_menu() { + + // Filter to redefine that WP Mail SMTP hides Tools > Action Scheduler menu item. + if ( apply_filters( 'wp_mail_smtp_tasks_admin_hide_as_menu', true ) ) { + remove_submenu_page( 'tools.php', 'action-scheduler' ); + } + } + + /** + * Create a new task. + * Used for "inline" tasks, that require additional information + * from the plugin runtime before they can be scheduled. + * + * Example: + * wp_mail_smtp()->get( 'tasks' ) + * ->create( 'i_am_the_dude' ) + * ->async() + * ->params( 'The Big Lebowski', 1998 ) + * ->register(); + * + * This `i_am_the_dude` action will be later processed as: + * add_action( 'i_am_the_dude', 'thats_what_you_call_me' ); + * + * @since 2.1.0 + * + * @param string $action Action that will be used as a hook. + * + * @return \WPMailSMTP\Tasks\Task + */ + public function create( $action ) { + + return new Task( $action ); + } + + /** + * Cancel all the AS actions for a group. + * + * @since 2.1.0 + * + * @param string $group Group to cancel all actions for. + */ + public function cancel_all( $group = '' ) { + + if ( empty( $group ) ) { + $group = self::GROUP; + } else { + $group = sanitize_key( $group ); + } + + if ( class_exists( 'ActionScheduler_DBStore' ) ) { + \ActionScheduler_DBStore::instance()->cancel_actions_by_group( $group ); + } + } + + /** + * Whether ActionScheduler thinks that it has migrated or not. + * + * @since 2.1.0 + * + * @return bool + */ + public function is_usable() { + + // No tasks if ActionScheduler wasn't loaded. + if ( ! class_exists( 'ActionScheduler_DataController' ) ) { + return false; + } + + return \ActionScheduler_DataController::is_migration_complete(); + } + + /** + * Whether task has been scheduled and is pending. + * + * @since 2.1.0 + * + * @param string $hook Hook to check for. + * + * @return bool + */ + public function is_scheduled( $hook ) { + + if ( ! function_exists( 'as_next_scheduled_action' ) ) { + return false; + } + + return as_next_scheduled_action( $hook ); + } +} diff --git a/wp-content/plugins/wp-mail-smtp/src/WP.php b/wp-content/plugins/wp-mail-smtp/src/WP.php index ed7edbe..1b4e153 100644 --- a/wp-content/plugins/wp-mail-smtp/src/WP.php +++ b/wp-content/plugins/wp-mail-smtp/src/WP.php @@ -18,24 +18,32 @@ class WP { */ protected static $admin_notices = array(); /** + * CSS class for a success notice. + * * @since 1.0.0 * * @var string */ const ADMIN_NOTICE_SUCCESS = 'notice-success'; /** + * CSS class for an error notice. + * * @since 1.0.0 * * @var string */ const ADMIN_NOTICE_ERROR = 'notice-error'; /** + * CSS class for an info notice. + * * @since 1.0.0 * * @var string */ const ADMIN_NOTICE_INFO = 'notice-info'; /** + * CSS class for a warning notice. + * * @since 1.0.0 * * @var string @@ -43,7 +51,7 @@ class WP { const ADMIN_NOTICE_WARNING = 'notice-warning'; /** - * True is WP is processing an AJAX call. + * True if WP is processing an AJAX call. * * @since 1.0.0 * @@ -103,7 +111,7 @@ class WP {
- +
+
- +
- * The Gmail API lets you view and manage Gmail mailbox data like threads, - * messages, and labels.
+ * Access Gmail mailboxes including sending user email. * *
* For more information about this service, see the API
@@ -98,8 +97,8 @@ class Google_Service_Gmail extends Google_Service
{
parent::__construct($client);
$this->rootUrl = $rootUrl ?: 'https://www.googleapis.com/';
- $this->servicePath = '';
- $this->batchPath = 'batch';
+ $this->servicePath = 'gmail/v1/users/';
+ $this->batchPath = 'batch/gmail/v1';
$this->version = 'v1';
$this->serviceName = 'gmail';
@@ -110,7 +109,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'getProfile' => array(
- 'path' => 'gmail/v1/users/{userId}/profile',
+ 'path' => '{userId}/profile',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -120,7 +119,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'stop' => array(
- 'path' => 'gmail/v1/users/{userId}/stop',
+ 'path' => '{userId}/stop',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -130,7 +129,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'watch' => array(
- 'path' => 'gmail/v1/users/{userId}/watch',
+ 'path' => '{userId}/watch',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -150,7 +149,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'create' => array(
- 'path' => 'gmail/v1/users/{userId}/drafts',
+ 'path' => '{userId}/drafts',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -160,7 +159,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'delete' => array(
- 'path' => 'gmail/v1/users/{userId}/drafts/{id}',
+ 'path' => '{userId}/drafts/{id}',
'httpMethod' => 'DELETE',
'parameters' => array(
'userId' => array(
@@ -175,7 +174,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'get' => array(
- 'path' => 'gmail/v1/users/{userId}/drafts/{id}',
+ 'path' => '{userId}/drafts/{id}',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -194,7 +193,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'list' => array(
- 'path' => 'gmail/v1/users/{userId}/drafts',
+ 'path' => '{userId}/drafts',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -206,6 +205,10 @@ class Google_Service_Gmail extends Google_Service
'location' => 'query',
'type' => 'boolean',
),
+ 'maxResults' => array(
+ 'location' => 'query',
+ 'type' => 'integer',
+ ),
'pageToken' => array(
'location' => 'query',
'type' => 'string',
@@ -214,13 +217,9 @@ class Google_Service_Gmail extends Google_Service
'location' => 'query',
'type' => 'string',
),
- 'maxResults' => array(
- 'location' => 'query',
- 'type' => 'integer',
- ),
),
),'send' => array(
- 'path' => 'gmail/v1/users/{userId}/drafts/send',
+ 'path' => '{userId}/drafts/send',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -230,7 +229,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'update' => array(
- 'path' => 'gmail/v1/users/{userId}/drafts/{id}',
+ 'path' => '{userId}/drafts/{id}',
'httpMethod' => 'PUT',
'parameters' => array(
'userId' => array(
@@ -255,7 +254,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'list' => array(
- 'path' => 'gmail/v1/users/{userId}/history',
+ 'path' => '{userId}/history',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -263,9 +262,10 @@ class Google_Service_Gmail extends Google_Service
'type' => 'string',
'required' => true,
),
- 'pageToken' => array(
+ 'historyTypes' => array(
'location' => 'query',
'type' => 'string',
+ 'repeated' => true,
),
'labelId' => array(
'location' => 'query',
@@ -275,10 +275,9 @@ class Google_Service_Gmail extends Google_Service
'location' => 'query',
'type' => 'integer',
),
- 'historyTypes' => array(
+ 'pageToken' => array(
'location' => 'query',
'type' => 'string',
- 'repeated' => true,
),
'startHistoryId' => array(
'location' => 'query',
@@ -296,7 +295,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'create' => array(
- 'path' => 'gmail/v1/users/{userId}/labels',
+ 'path' => '{userId}/labels',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -306,7 +305,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'delete' => array(
- 'path' => 'gmail/v1/users/{userId}/labels/{id}',
+ 'path' => '{userId}/labels/{id}',
'httpMethod' => 'DELETE',
'parameters' => array(
'userId' => array(
@@ -321,7 +320,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'get' => array(
- 'path' => 'gmail/v1/users/{userId}/labels/{id}',
+ 'path' => '{userId}/labels/{id}',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -336,7 +335,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'list' => array(
- 'path' => 'gmail/v1/users/{userId}/labels',
+ 'path' => '{userId}/labels',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -346,7 +345,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'patch' => array(
- 'path' => 'gmail/v1/users/{userId}/labels/{id}',
+ 'path' => '{userId}/labels/{id}',
'httpMethod' => 'PATCH',
'parameters' => array(
'userId' => array(
@@ -361,7 +360,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'update' => array(
- 'path' => 'gmail/v1/users/{userId}/labels/{id}',
+ 'path' => '{userId}/labels/{id}',
'httpMethod' => 'PUT',
'parameters' => array(
'userId' => array(
@@ -386,7 +385,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'batchDelete' => array(
- 'path' => 'gmail/v1/users/{userId}/messages/batchDelete',
+ 'path' => '{userId}/messages/batchDelete',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -396,7 +395,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'batchModify' => array(
- 'path' => 'gmail/v1/users/{userId}/messages/batchModify',
+ 'path' => '{userId}/messages/batchModify',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -406,7 +405,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'delete' => array(
- 'path' => 'gmail/v1/users/{userId}/messages/{id}',
+ 'path' => '{userId}/messages/{id}',
'httpMethod' => 'DELETE',
'parameters' => array(
'userId' => array(
@@ -421,7 +420,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'get' => array(
- 'path' => 'gmail/v1/users/{userId}/messages/{id}',
+ 'path' => '{userId}/messages/{id}',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -434,18 +433,18 @@ class Google_Service_Gmail extends Google_Service
'type' => 'string',
'required' => true,
),
+ 'format' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
'metadataHeaders' => array(
'location' => 'query',
'type' => 'string',
'repeated' => true,
),
- 'format' => array(
- 'location' => 'query',
- 'type' => 'string',
- ),
),
),'import' => array(
- 'path' => 'gmail/v1/users/{userId}/messages/import',
+ 'path' => '{userId}/messages/import',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -453,7 +452,7 @@ class Google_Service_Gmail extends Google_Service
'type' => 'string',
'required' => true,
),
- 'processForCalendar' => array(
+ 'deleted' => array(
'location' => 'query',
'type' => 'boolean',
),
@@ -465,13 +464,13 @@ class Google_Service_Gmail extends Google_Service
'location' => 'query',
'type' => 'boolean',
),
- 'deleted' => array(
+ 'processForCalendar' => array(
'location' => 'query',
'type' => 'boolean',
),
),
),'insert' => array(
- 'path' => 'gmail/v1/users/{userId}/messages',
+ 'path' => '{userId}/messages',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -479,17 +478,17 @@ class Google_Service_Gmail extends Google_Service
'type' => 'string',
'required' => true,
),
- 'internalDateSource' => array(
- 'location' => 'query',
- 'type' => 'string',
- ),
'deleted' => array(
'location' => 'query',
'type' => 'boolean',
),
+ 'internalDateSource' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
),
),'list' => array(
- 'path' => 'gmail/v1/users/{userId}/messages',
+ 'path' => '{userId}/messages',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -501,26 +500,26 @@ class Google_Service_Gmail extends Google_Service
'location' => 'query',
'type' => 'boolean',
),
- 'pageToken' => array(
- 'location' => 'query',
- 'type' => 'string',
- ),
'labelIds' => array(
'location' => 'query',
'type' => 'string',
'repeated' => true,
),
- 'q' => array(
- 'location' => 'query',
- 'type' => 'string',
- ),
'maxResults' => array(
'location' => 'query',
'type' => 'integer',
),
+ 'pageToken' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
+ 'q' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
),
),'modify' => array(
- 'path' => 'gmail/v1/users/{userId}/messages/{id}/modify',
+ 'path' => '{userId}/messages/{id}/modify',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -535,7 +534,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'send' => array(
- 'path' => 'gmail/v1/users/{userId}/messages/send',
+ 'path' => '{userId}/messages/send',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -545,7 +544,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'trash' => array(
- 'path' => 'gmail/v1/users/{userId}/messages/{id}/trash',
+ 'path' => '{userId}/messages/{id}/trash',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -560,7 +559,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'untrash' => array(
- 'path' => 'gmail/v1/users/{userId}/messages/{id}/untrash',
+ 'path' => '{userId}/messages/{id}/untrash',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -585,7 +584,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'get' => array(
- 'path' => 'gmail/v1/users/{userId}/messages/{messageId}/attachments/{id}',
+ 'path' => '{userId}/messages/{messageId}/attachments/{id}',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -615,7 +614,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'getAutoForwarding' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/autoForwarding',
+ 'path' => '{userId}/settings/autoForwarding',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -625,7 +624,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'getImap' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/imap',
+ 'path' => '{userId}/settings/imap',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -635,7 +634,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'getLanguage' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/language',
+ 'path' => '{userId}/settings/language',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -645,7 +644,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'getPop' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/pop',
+ 'path' => '{userId}/settings/pop',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -655,7 +654,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'getVacation' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/vacation',
+ 'path' => '{userId}/settings/vacation',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -665,7 +664,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'updateAutoForwarding' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/autoForwarding',
+ 'path' => '{userId}/settings/autoForwarding',
'httpMethod' => 'PUT',
'parameters' => array(
'userId' => array(
@@ -675,7 +674,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'updateImap' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/imap',
+ 'path' => '{userId}/settings/imap',
'httpMethod' => 'PUT',
'parameters' => array(
'userId' => array(
@@ -685,7 +684,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'updateLanguage' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/language',
+ 'path' => '{userId}/settings/language',
'httpMethod' => 'PUT',
'parameters' => array(
'userId' => array(
@@ -695,7 +694,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'updatePop' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/pop',
+ 'path' => '{userId}/settings/pop',
'httpMethod' => 'PUT',
'parameters' => array(
'userId' => array(
@@ -705,7 +704,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'updateVacation' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/vacation',
+ 'path' => '{userId}/settings/vacation',
'httpMethod' => 'PUT',
'parameters' => array(
'userId' => array(
@@ -725,7 +724,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'create' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/delegates',
+ 'path' => '{userId}/settings/delegates',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -735,7 +734,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'delete' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/delegates/{delegateEmail}',
+ 'path' => '{userId}/settings/delegates/{delegateEmail}',
'httpMethod' => 'DELETE',
'parameters' => array(
'userId' => array(
@@ -750,7 +749,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'get' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/delegates/{delegateEmail}',
+ 'path' => '{userId}/settings/delegates/{delegateEmail}',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -765,7 +764,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'list' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/delegates',
+ 'path' => '{userId}/settings/delegates',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -785,7 +784,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'create' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/filters',
+ 'path' => '{userId}/settings/filters',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -795,7 +794,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'delete' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/filters/{id}',
+ 'path' => '{userId}/settings/filters/{id}',
'httpMethod' => 'DELETE',
'parameters' => array(
'userId' => array(
@@ -810,7 +809,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'get' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/filters/{id}',
+ 'path' => '{userId}/settings/filters/{id}',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -825,7 +824,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'list' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/filters',
+ 'path' => '{userId}/settings/filters',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -845,7 +844,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'create' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/forwardingAddresses',
+ 'path' => '{userId}/settings/forwardingAddresses',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -855,7 +854,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'delete' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}',
+ 'path' => '{userId}/settings/forwardingAddresses/{forwardingEmail}',
'httpMethod' => 'DELETE',
'parameters' => array(
'userId' => array(
@@ -870,7 +869,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'get' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/forwardingAddresses/{forwardingEmail}',
+ 'path' => '{userId}/settings/forwardingAddresses/{forwardingEmail}',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -885,7 +884,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'list' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/forwardingAddresses',
+ 'path' => '{userId}/settings/forwardingAddresses',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -905,7 +904,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'create' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/sendAs',
+ 'path' => '{userId}/settings/sendAs',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -915,7 +914,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'delete' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}',
+ 'path' => '{userId}/settings/sendAs/{sendAsEmail}',
'httpMethod' => 'DELETE',
'parameters' => array(
'userId' => array(
@@ -930,7 +929,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'get' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}',
+ 'path' => '{userId}/settings/sendAs/{sendAsEmail}',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -945,7 +944,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'list' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/sendAs',
+ 'path' => '{userId}/settings/sendAs',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -955,7 +954,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'patch' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}',
+ 'path' => '{userId}/settings/sendAs/{sendAsEmail}',
'httpMethod' => 'PATCH',
'parameters' => array(
'userId' => array(
@@ -970,7 +969,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'update' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}',
+ 'path' => '{userId}/settings/sendAs/{sendAsEmail}',
'httpMethod' => 'PUT',
'parameters' => array(
'userId' => array(
@@ -985,7 +984,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'verify' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/verify',
+ 'path' => '{userId}/settings/sendAs/{sendAsEmail}/verify',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -1010,7 +1009,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'delete' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}',
+ 'path' => '{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}',
'httpMethod' => 'DELETE',
'parameters' => array(
'userId' => array(
@@ -1030,7 +1029,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'get' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}',
+ 'path' => '{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -1050,7 +1049,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'insert' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo',
+ 'path' => '{userId}/settings/sendAs/{sendAsEmail}/smimeInfo',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -1065,7 +1064,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'list' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo',
+ 'path' => '{userId}/settings/sendAs/{sendAsEmail}/smimeInfo',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -1080,7 +1079,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'setDefault' => array(
- 'path' => 'gmail/v1/users/{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault',
+ 'path' => '{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -1110,7 +1109,7 @@ class Google_Service_Gmail extends Google_Service
array(
'methods' => array(
'delete' => array(
- 'path' => 'gmail/v1/users/{userId}/threads/{id}',
+ 'path' => '{userId}/threads/{id}',
'httpMethod' => 'DELETE',
'parameters' => array(
'userId' => array(
@@ -1125,7 +1124,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'get' => array(
- 'path' => 'gmail/v1/users/{userId}/threads/{id}',
+ 'path' => '{userId}/threads/{id}',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -1138,18 +1137,18 @@ class Google_Service_Gmail extends Google_Service
'type' => 'string',
'required' => true,
),
+ 'format' => array(
+ 'location' => 'query',
+ 'type' => 'string',
+ ),
'metadataHeaders' => array(
'location' => 'query',
'type' => 'string',
'repeated' => true,
),
- 'format' => array(
- 'location' => 'query',
- 'type' => 'string',
- ),
),
),'list' => array(
- 'path' => 'gmail/v1/users/{userId}/threads',
+ 'path' => '{userId}/threads',
'httpMethod' => 'GET',
'parameters' => array(
'userId' => array(
@@ -1157,30 +1156,30 @@ class Google_Service_Gmail extends Google_Service
'type' => 'string',
'required' => true,
),
- 'pageToken' => array(
+ 'includeSpamTrash' => array(
'location' => 'query',
- 'type' => 'string',
+ 'type' => 'boolean',
),
'labelIds' => array(
'location' => 'query',
'type' => 'string',
'repeated' => true,
),
- 'q' => array(
- 'location' => 'query',
- 'type' => 'string',
- ),
'maxResults' => array(
'location' => 'query',
'type' => 'integer',
),
- 'includeSpamTrash' => array(
+ 'pageToken' => array(
'location' => 'query',
- 'type' => 'boolean',
+ 'type' => 'string',
+ ),
+ 'q' => array(
+ 'location' => 'query',
+ 'type' => 'string',
),
),
),'modify' => array(
- 'path' => 'gmail/v1/users/{userId}/threads/{id}/modify',
+ 'path' => '{userId}/threads/{id}/modify',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -1195,7 +1194,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'trash' => array(
- 'path' => 'gmail/v1/users/{userId}/threads/{id}/trash',
+ 'path' => '{userId}/threads/{id}/trash',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
@@ -1210,7 +1209,7 @@ class Google_Service_Gmail extends Google_Service
),
),
),'untrash' => array(
- 'path' => 'gmail/v1/users/{userId}/threads/{id}/untrash',
+ 'path' => '{userId}/threads/{id}/untrash',
'httpMethod' => 'POST',
'parameters' => array(
'userId' => array(
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersDrafts.php b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersDrafts.php
index fb8c652..d0ec543 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersDrafts.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersDrafts.php
@@ -81,12 +81,12 @@ class Google_Service_Gmail_Resource_UsersDrafts extends Google_Service_Resource
*
* @opt_param bool includeSpamTrash Include drafts from SPAM and TRASH in the
* results.
+ * @opt_param string maxResults Maximum number of drafts to return.
* @opt_param string pageToken Page token to retrieve a specific page of results
* in the list.
* @opt_param string q Only return draft messages matching the specified query.
* Supports the same query format as the Gmail search box. For example,
* "from:someuser@example.com rfc822msgid: is:unread".
- * @opt_param string maxResults Maximum number of drafts to return.
* @return Google_Service_Gmail_ListDraftsResponse
*/
public function listUsersDrafts($userId, $optParams = array())
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersHistory.php b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersHistory.php
index 6356da7..128bd17 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersHistory.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersHistory.php
@@ -34,11 +34,11 @@ class Google_Service_Gmail_Resource_UsersHistory extends Google_Service_Resource
* used to indicate the authenticated user.
* @param array $optParams Optional parameters.
*
- * @opt_param string pageToken Page token to retrieve a specific page of results
- * in the list.
+ * @opt_param string historyTypes History types to be returned by the function
* @opt_param string labelId Only return messages with a label matching the ID.
* @opt_param string maxResults The maximum number of history records to return.
- * @opt_param string historyTypes History types to be returned by the function
+ * @opt_param string pageToken Page token to retrieve a specific page of results
+ * in the list.
* @opt_param string startHistoryId Required. Returns history records after the
* specified startHistoryId. The supplied startHistoryId should be obtained from
* the historyId of a message, thread, or previous list response. History IDs
@@ -46,7 +46,7 @@ class Google_Service_Gmail_Resource_UsersHistory extends Google_Service_Resource
* valid IDs. Supplying an invalid or out of date startHistoryId typically
* returns an HTTP 404 error code. A historyId is typically valid for at least a
* week, but in some rare circumstances may be valid for only a few hours. If
- * you receive an HTTP 404 error response, your application should perform a
+ * you receive an HTTP 404 error response, your application should perform a
* full sync. If you receive no nextPageToken in the response, there are no
* updates to retrieve and you can store the returned historyId for a future
* request.
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersLabels.php b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersLabels.php
index 8cf8158..88b33ce 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersLabels.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersLabels.php
@@ -85,7 +85,8 @@ class Google_Service_Gmail_Resource_UsersLabels extends Google_Service_Resource
return $this->call('list', array($params), "Google_Service_Gmail_ListLabelsResponse");
}
/**
- * Patch the specified label. (labels.patch)
+ * Updates the specified label. This method supports patch semantics.
+ * (labels.patch)
*
* @param string $userId The user's email address. The special value me can be
* used to indicate the authenticated user.
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersMessages.php b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersMessages.php
index fa51249..67c737b 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersMessages.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersMessages.php
@@ -26,7 +26,7 @@
class Google_Service_Gmail_Resource_UsersMessages extends Google_Service_Resource
{
/**
- * Deletes many messages by message ID. Provides no guarantees that messages
+ * Deletes many messages by message ID. Provides no guarantees that messages
* were not already deleted or even existed at all. (messages.batchDelete)
*
* @param string $userId The user's email address. The special value me can be
@@ -56,7 +56,7 @@ class Google_Service_Gmail_Resource_UsersMessages extends Google_Service_Resourc
}
/**
* Immediately and permanently deletes the specified message. This operation
- * cannot be undone. Prefer messages.trash instead. (messages.delete)
+ * cannot be undone. Prefer messages.trash instead. (messages.delete)
*
* @param string $userId The user's email address. The special value me can be
* used to indicate the authenticated user.
@@ -77,9 +77,9 @@ class Google_Service_Gmail_Resource_UsersMessages extends Google_Service_Resourc
* @param string $id The ID of the message to retrieve.
* @param array $optParams Optional parameters.
*
+ * @opt_param string format The format to return the message in.
* @opt_param string metadataHeaders When given and format is METADATA, only
* include headers specified.
- * @opt_param string format The format to return the message in.
* @return Google_Service_Gmail_Message
*/
public function get($userId, $id, $optParams = array())
@@ -98,15 +98,15 @@ class Google_Service_Gmail_Resource_UsersMessages extends Google_Service_Resourc
* @param Google_Service_Gmail_Message $postBody
* @param array $optParams Optional parameters.
*
- * @opt_param bool processForCalendar Process calendar invites in the email and
- * add any extracted meetings to the Google Calendar for this user.
+ * @opt_param bool deleted Mark the email as permanently deleted (not TRASH) and
+ * only visible in Google Vault to a Vault administrator. Only used for G Suite
+ * accounts.
* @opt_param string internalDateSource Source for Gmail's internal date of the
* message.
* @opt_param bool neverMarkSpam Ignore the Gmail spam classifier decision and
* never mark this email as SPAM in the mailbox.
- * @opt_param bool deleted Mark the email as permanently deleted (not TRASH) and
- * only visible in Google Vault to a Vault administrator. Only used for G Suite
- * accounts.
+ * @opt_param bool processForCalendar Process calendar invites in the email and
+ * add any extracted meetings to the Google Calendar for this user.
* @return Google_Service_Gmail_Message
*/
public function import($userId, Google_Service_Gmail_Message $postBody, $optParams = array())
@@ -125,11 +125,11 @@ class Google_Service_Gmail_Resource_UsersMessages extends Google_Service_Resourc
* @param Google_Service_Gmail_Message $postBody
* @param array $optParams Optional parameters.
*
- * @opt_param string internalDateSource Source for Gmail's internal date of the
- * message.
* @opt_param bool deleted Mark the email as permanently deleted (not TRASH) and
* only visible in Google Vault to a Vault administrator. Only used for G Suite
* accounts.
+ * @opt_param string internalDateSource Source for Gmail's internal date of the
+ * message.
* @return Google_Service_Gmail_Message
*/
public function insert($userId, Google_Service_Gmail_Message $postBody, $optParams = array())
@@ -147,16 +147,15 @@ class Google_Service_Gmail_Resource_UsersMessages extends Google_Service_Resourc
*
* @opt_param bool includeSpamTrash Include messages from SPAM and TRASH in the
* results.
- * @opt_param string pageToken Page token to retrieve a specific page of results
- * in the list.
* @opt_param string labelIds Only return messages with labels that match all of
* the specified label IDs.
+ * @opt_param string maxResults Maximum number of messages to return.
+ * @opt_param string pageToken Page token to retrieve a specific page of results
+ * in the list.
* @opt_param string q Only return messages matching the specified query.
* Supports the same query format as the Gmail search box. For example,
- * "from:someuser@example.com rfc822msgid:somemsgid@example.com is:unread".
- * Parameter cannot be used when accessing the api using the gmail.metadata
- * scope.
- * @opt_param string maxResults Maximum number of messages to return.
+ * "from:someuser@example.com rfc822msgid: is:unread". Parameter cannot be used
+ * when accessing the api using the gmail.metadata scope.
* @return Google_Service_Gmail_ListMessagesResponse
*/
public function listUsersMessages($userId, $optParams = array())
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettings.php b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettings.php
index 6b5aac3..ccf5d9b 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettings.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettings.php
@@ -29,7 +29,7 @@ class Google_Service_Gmail_Resource_UsersSettings extends Google_Service_Resourc
* Gets the auto-forwarding setting for the specified account.
* (settings.getAutoForwarding)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param array $optParams Optional parameters.
* @return Google_Service_Gmail_AutoForwarding
@@ -43,7 +43,7 @@ class Google_Service_Gmail_Resource_UsersSettings extends Google_Service_Resourc
/**
* Gets IMAP settings. (settings.getImap)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param array $optParams Optional parameters.
* @return Google_Service_Gmail_ImapSettings
@@ -57,7 +57,7 @@ class Google_Service_Gmail_Resource_UsersSettings extends Google_Service_Resourc
/**
* Gets language settings. (settings.getLanguage)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param array $optParams Optional parameters.
* @return Google_Service_Gmail_LanguageSettings
@@ -71,7 +71,7 @@ class Google_Service_Gmail_Resource_UsersSettings extends Google_Service_Resourc
/**
* Gets POP settings. (settings.getPop)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param array $optParams Optional parameters.
* @return Google_Service_Gmail_PopSettings
@@ -85,7 +85,7 @@ class Google_Service_Gmail_Resource_UsersSettings extends Google_Service_Resourc
/**
* Gets vacation responder settings. (settings.getVacation)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param array $optParams Optional parameters.
* @return Google_Service_Gmail_VacationSettings
@@ -97,13 +97,13 @@ class Google_Service_Gmail_Resource_UsersSettings extends Google_Service_Resourc
return $this->call('getVacation', array($params), "Google_Service_Gmail_VacationSettings");
}
/**
- * Updates the auto-forwarding setting for the specified account. A verified
+ * Updates the auto-forwarding setting for the specified account. A verified
* forwarding address must be specified when auto-forwarding is enabled.
*
* This method is only available to service account clients that have been
* delegated domain-wide authority. (settings.updateAutoForwarding)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param Google_Service_Gmail_AutoForwarding $postBody
* @param array $optParams Optional parameters.
@@ -118,7 +118,7 @@ class Google_Service_Gmail_Resource_UsersSettings extends Google_Service_Resourc
/**
* Updates IMAP settings. (settings.updateImap)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param Google_Service_Gmail_ImapSettings $postBody
* @param array $optParams Optional parameters.
@@ -139,7 +139,7 @@ class Google_Service_Gmail_Resource_UsersSettings extends Google_Service_Resourc
* Gmail but have a close variant that is, and so the variant may be chosen and
* saved instead. (settings.updateLanguage)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param Google_Service_Gmail_LanguageSettings $postBody
* @param array $optParams Optional parameters.
@@ -154,7 +154,7 @@ class Google_Service_Gmail_Resource_UsersSettings extends Google_Service_Resourc
/**
* Updates POP settings. (settings.updatePop)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param Google_Service_Gmail_PopSettings $postBody
* @param array $optParams Optional parameters.
@@ -169,7 +169,7 @@ class Google_Service_Gmail_Resource_UsersSettings extends Google_Service_Resourc
/**
* Updates vacation responder settings. (settings.updateVacation)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param Google_Service_Gmail_VacationSettings $postBody
* @param array $optParams Optional parameters.
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsDelegates.php b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsDelegates.php
index 450a2b9..35383e3 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsDelegates.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsDelegates.php
@@ -27,8 +27,8 @@ class Google_Service_Gmail_Resource_UsersSettingsDelegates extends Google_Servic
{
/**
* Adds a delegate with its verification status set directly to accepted,
- * without sending any verification email. The delegate user must be a member
- * of the same G Suite organization as the delegator user.
+ * without sending any verification email. The delegate user must be a member of
+ * the same G Suite organization as the delegator user.
*
* Gmail imposes limitations on the number of delegates and delegators each user
* in a G Suite organization can have. These limits depend on your organization,
@@ -43,7 +43,7 @@ class Google_Service_Gmail_Resource_UsersSettingsDelegates extends Google_Servic
* This method is only available to service account clients that have been
* delegated domain-wide authority. (delegates.create)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param Google_Service_Gmail_Delegate $postBody
* @param array $optParams Optional parameters.
@@ -65,7 +65,7 @@ class Google_Service_Gmail_Resource_UsersSettingsDelegates extends Google_Servic
* This method is only available to service account clients that have been
* delegated domain-wide authority. (delegates.delete)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param string $delegateEmail The email address of the user to be removed as a
* delegate.
@@ -86,7 +86,7 @@ class Google_Service_Gmail_Resource_UsersSettingsDelegates extends Google_Servic
* This method is only available to service account clients that have been
* delegated domain-wide authority. (delegates.get)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param string $delegateEmail The email address of the user whose delegate
* relationship is to be retrieved.
@@ -105,7 +105,7 @@ class Google_Service_Gmail_Resource_UsersSettingsDelegates extends Google_Servic
* This method is only available to service account clients that have been
* delegated domain-wide authority. (delegates.listUsersSettingsDelegates)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param array $optParams Optional parameters.
* @return Google_Service_Gmail_ListDelegatesResponse
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsForwardingAddresses.php b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsForwardingAddresses.php
index 5c39771..b0e2508 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsForwardingAddresses.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsForwardingAddresses.php
@@ -26,7 +26,7 @@
class Google_Service_Gmail_Resource_UsersSettingsForwardingAddresses extends Google_Service_Resource
{
/**
- * Creates a forwarding address. If ownership verification is required, a
+ * Creates a forwarding address. If ownership verification is required, a
* message will be sent to the recipient and the resource's verification status
* will be set to pending; otherwise, the resource will be created with
* verification status set to accepted.
@@ -34,7 +34,7 @@ class Google_Service_Gmail_Resource_UsersSettingsForwardingAddresses extends Goo
* This method is only available to service account clients that have been
* delegated domain-wide authority. (forwardingAddresses.create)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param Google_Service_Gmail_ForwardingAddress $postBody
* @param array $optParams Optional parameters.
@@ -53,7 +53,7 @@ class Google_Service_Gmail_Resource_UsersSettingsForwardingAddresses extends Goo
* This method is only available to service account clients that have been
* delegated domain-wide authority. (forwardingAddresses.delete)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param string $forwardingEmail The forwarding address to be deleted.
* @param array $optParams Optional parameters.
@@ -67,7 +67,7 @@ class Google_Service_Gmail_Resource_UsersSettingsForwardingAddresses extends Goo
/**
* Gets the specified forwarding address. (forwardingAddresses.get)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param string $forwardingEmail The forwarding address to be retrieved.
* @param array $optParams Optional parameters.
@@ -83,7 +83,7 @@ class Google_Service_Gmail_Resource_UsersSettingsForwardingAddresses extends Goo
* Lists the forwarding addresses for the specified account.
* (forwardingAddresses.listUsersSettingsForwardingAddresses)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param array $optParams Optional parameters.
* @return Google_Service_Gmail_ListForwardingAddressesResponse
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsSendAs.php b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsSendAs.php
index 76ecb2f..f3c45cf 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsSendAs.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersSettingsSendAs.php
@@ -26,18 +26,18 @@
class Google_Service_Gmail_Resource_UsersSettingsSendAs extends Google_Service_Resource
{
/**
- * Creates a custom "from" send-as alias. If an SMTP MSA is specified, Gmail
+ * Creates a custom "from" send-as alias. If an SMTP MSA is specified, Gmail
* will attempt to connect to the SMTP service to validate the configuration
- * before creating the alias. If ownership verification is required for the
+ * before creating the alias. If ownership verification is required for the
* alias, a message will be sent to the email address and the resource's
* verification status will be set to pending; otherwise, the resource will be
- * created with verification status set to accepted. If a signature is
- * provided, Gmail will sanitize the HTML before saving it with the alias.
+ * created with verification status set to accepted. If a signature is provided,
+ * Gmail will sanitize the HTML before saving it with the alias.
*
* This method is only available to service account clients that have been
* delegated domain-wide authority. (sendAs.create)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param Google_Service_Gmail_SendAs $postBody
* @param array $optParams Optional parameters.
@@ -50,13 +50,13 @@ class Google_Service_Gmail_Resource_UsersSettingsSendAs extends Google_Service_R
return $this->call('create', array($params), "Google_Service_Gmail_SendAs");
}
/**
- * Deletes the specified send-as alias. Revokes any verification that may have
+ * Deletes the specified send-as alias. Revokes any verification that may have
* been required for using it.
*
* This method is only available to service account clients that have been
* delegated domain-wide authority. (sendAs.delete)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param string $sendAsEmail The send-as alias to be deleted.
* @param array $optParams Optional parameters.
@@ -68,10 +68,10 @@ class Google_Service_Gmail_Resource_UsersSettingsSendAs extends Google_Service_R
return $this->call('delete', array($params));
}
/**
- * Gets the specified send-as alias. Fails with an HTTP 404 error if the
+ * Gets the specified send-as alias. Fails with an HTTP 404 error if the
* specified address is not a member of the collection. (sendAs.get)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param string $sendAsEmail The send-as alias to be retrieved.
* @param array $optParams Optional parameters.
@@ -84,11 +84,11 @@ class Google_Service_Gmail_Resource_UsersSettingsSendAs extends Google_Service_R
return $this->call('get', array($params), "Google_Service_Gmail_SendAs");
}
/**
- * Lists the send-as aliases for the specified account. The result includes the
+ * Lists the send-as aliases for the specified account. The result includes the
* primary send-as address associated with the account as well as any custom
* "from" aliases. (sendAs.listUsersSettingsSendAs)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param array $optParams Optional parameters.
* @return Google_Service_Gmail_ListSendAsResponse
@@ -100,9 +100,14 @@ class Google_Service_Gmail_Resource_UsersSettingsSendAs extends Google_Service_R
return $this->call('list', array($params), "Google_Service_Gmail_ListSendAsResponse");
}
/**
- * Patch the specified send-as alias. (sendAs.patch)
+ * Updates a send-as alias. If a signature is provided, Gmail will sanitize the
+ * HTML before saving it with the alias.
*
- * @param string $userId User's email address. The special value "me" can be
+ * Addresses other than the primary address for the account can only be updated
+ * by service account clients that have been delegated domain-wide authority.
+ * This method supports patch semantics. (sendAs.patch)
+ *
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param string $sendAsEmail The send-as alias to be updated.
* @param Google_Service_Gmail_SendAs $postBody
@@ -116,14 +121,14 @@ class Google_Service_Gmail_Resource_UsersSettingsSendAs extends Google_Service_R
return $this->call('patch', array($params), "Google_Service_Gmail_SendAs");
}
/**
- * Updates a send-as alias. If a signature is provided, Gmail will sanitize the
+ * Updates a send-as alias. If a signature is provided, Gmail will sanitize the
* HTML before saving it with the alias.
*
* Addresses other than the primary address for the account can only be updated
* by service account clients that have been delegated domain-wide authority.
* (sendAs.update)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param string $sendAsEmail The send-as alias to be updated.
* @param Google_Service_Gmail_SendAs $postBody
@@ -143,7 +148,7 @@ class Google_Service_Gmail_Resource_UsersSettingsSendAs extends Google_Service_R
* This method is only available to service account clients that have been
* delegated domain-wide authority. (sendAs.verify)
*
- * @param string $userId User's email address. The special value "me" can be
+ * @param string $userId User's email address. The special value "me" can be
* used to indicate the authenticated user.
* @param string $sendAsEmail The send-as alias to be verified.
* @param array $optParams Optional parameters.
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersThreads.php b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersThreads.php
index 341a7db..b8909c4 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersThreads.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/apiclient-services/src/Google/Service/Gmail/Resource/UsersThreads.php
@@ -48,9 +48,9 @@ class Google_Service_Gmail_Resource_UsersThreads extends Google_Service_Resource
* @param string $id The ID of the thread to retrieve.
* @param array $optParams Optional parameters.
*
+ * @opt_param string format The format to return the messages in.
* @opt_param string metadataHeaders When given and format is METADATA, only
* include headers specified.
- * @opt_param string format The format to return the messages in.
* @return Google_Service_Gmail_Thread
*/
public function get($userId, $id, $optParams = array())
@@ -66,17 +66,17 @@ class Google_Service_Gmail_Resource_UsersThreads extends Google_Service_Resource
* used to indicate the authenticated user.
* @param array $optParams Optional parameters.
*
- * @opt_param string pageToken Page token to retrieve a specific page of results
- * in the list.
+ * @opt_param bool includeSpamTrash Include threads from SPAM and TRASH in the
+ * results.
* @opt_param string labelIds Only return threads with labels that match all of
* the specified label IDs.
+ * @opt_param string maxResults Maximum number of threads to return.
+ * @opt_param string pageToken Page token to retrieve a specific page of results
+ * in the list.
* @opt_param string q Only return threads matching the specified query.
* Supports the same query format as the Gmail search box. For example,
* "from:someuser@example.com rfc822msgid: is:unread". Parameter cannot be used
* when accessing the api using the gmail.metadata scope.
- * @opt_param string maxResults Maximum number of threads to return.
- * @opt_param bool includeSpamTrash Include threads from SPAM and TRASH in the
- * results.
* @return Google_Service_Gmail_ListThreadsResponse
*/
public function listUsersThreads($userId, $optParams = array())
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/autoload.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/autoload.php
index f547337..1e13827 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/autoload.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/autoload.php
@@ -23,7 +23,7 @@ function oauth2client_php_autoload($className)
}
if (count($classPath) > 3) {
// Maximum class file path depth in this project is 3.
- $classPath = array_slice($classPath, 0, 3);
+ $classPath = array_slice($classPath, 0, 3);
}
$filePath = dirname(__FILE__) . '/src/' . implode('/', $classPath) . '.php';
if (file_exists($filePath)) {
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/AccessToken.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/AccessToken.php
index 87344fa..1352e93 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/AccessToken.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/AccessToken.php
@@ -82,22 +82,19 @@ class AccessToken
* accepted. By default, the id token must have been issued to this OAuth2 client.
*
* @param string $token The JSON Web Token to be verified.
- * @param array $options [optional] {
- * Configuration options.
- *
- * @type string $audience The indended recipient of the token.
- * @type string $issuer The intended issuer of the token.
- * @type string $certsLocation The location (remote or local) from which
+ * @param array $options [optional] Configuration options.
+ * @param string $options.audience The indended recipient of the token.
+ * @param string $options.issuer The intended issuer of the token.
+ * @param string $options.cacheKey The cache key of the cached certs. Defaults to
+ * the sha1 of $certsLocation if provided, otherwise is set to
+ * "federated_signon_certs_v3".
+ * @param string $options.certsLocation The location (remote or local) from which
* to retrieve certificates, if not cached. This value should only be
* provided in limited circumstances in which you are sure of the
* behavior.
- * @type string $cacheKey The cache key of the cached certs. Defaults to
- * the sha1 of $certsLocation if provided, otherwise is set to
- * "federated_signon_certs_v3".
- * @type bool $throwException Whether the function should throw an
+ * @param bool $options.throwException Whether the function should throw an
* exception if the verification fails. This is useful for
* determining the reason verification failed.
- * }
* @return array|bool the token payload, if successful, or false if not.
* @throws InvalidArgumentException If certs could not be retrieved from a local file.
* @throws InvalidArgumentException If received certs are in an invalid format.
@@ -129,7 +126,8 @@ class AccessToken
$alg = $this->determineAlg($certs);
if (!in_array($alg, ['RS256', 'ES256'])) {
throw new InvalidArgumentException(
- 'unrecognized "alg" in certs, expected ES256 or RS256');
+ 'unrecognized "alg" in certs, expected ES256 or RS256'
+ );
}
try {
if ($alg == 'RS256') {
@@ -186,13 +184,11 @@ class AccessToken
*
* @param string $token The JSON Web Token to be verified.
* @param array $certs Certificate array according to the JWK spec (see
- * https://tools.ietf.org/html/rfc7517).
+ * https://tools.ietf.org/html/rfc7517).
* @param string|null $audience If set, returns false if the provided
- * audience does not match the "aud" claim on
- * the JWT.
+ * audience does not match the "aud" claim on the JWT.
* @param string|null $issuer If set, returns false if the provided
- * issuer does not match the "iss" claim on
- * the JWT.
+ * issuer does not match the "iss" claim on the JWT.
* @return array|bool the token payload, if successful, or false if not.
*/
private function verifyEs256($token, array $certs, $audience = null, $issuer = null)
@@ -228,13 +224,11 @@ class AccessToken
*
* @param string $token The JSON Web Token to be verified.
* @param array $certs Certificate array according to the JWK spec (see
- * https://tools.ietf.org/html/rfc7517).
+ * https://tools.ietf.org/html/rfc7517).
* @param string|null $audience If set, returns false if the provided
- * audience does not match the "aud" claim on
- * the JWT.
+ * audience does not match the "aud" claim on the JWT.
* @param string|null $issuer If set, returns false if the provided
- * issuer does not match the "iss" claim on
- * the JWT.
+ * issuer does not match the "iss" claim on the JWT.
* @return array|bool the token payload, if successful, or false if not.
*/
private function verifyRs256($token, array $certs, $audience = null, $issuer = null)
@@ -325,6 +319,7 @@ class AccessToken
* are PEM encoded certificates.
*
* @param string $location The location from which to retrieve certs.
+ * @param string $cacheKey The key under which to cache the retrieved certs.
* @param array $options [optional] Configuration options.
* @return array
* @throws InvalidArgumentException If received certs are in an invalid format.
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/ApplicationDefaultCredentials.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/ApplicationDefaultCredentials.php
index c99beb1..add1c93 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/ApplicationDefaultCredentials.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/ApplicationDefaultCredentials.php
@@ -46,23 +46,25 @@ use Psr\Cache\CacheItemPoolInterface;
*
* This allows it to be used as follows with GuzzleHttp\Client:
*
- * use Google\Auth\ApplicationDefaultCredentials;
- * use GuzzleHttp\Client;
- * use GuzzleHttp\HandlerStack;
+ * ```
+ * use Google\Auth\ApplicationDefaultCredentials;
+ * use GuzzleHttp\Client;
+ * use GuzzleHttp\HandlerStack;
*
- * $middleware = ApplicationDefaultCredentials::getMiddleware(
- * 'https://www.googleapis.com/auth/taskqueue'
- * );
- * $stack = HandlerStack::create();
- * $stack->push($middleware);
+ * $middleware = ApplicationDefaultCredentials::getMiddleware(
+ * 'https://www.googleapis.com/auth/taskqueue'
+ * );
+ * $stack = HandlerStack::create();
+ * $stack->push($middleware);
*
- * $client = new Client([
- * 'handler' => $stack,
- * 'base_uri' => 'https://www.googleapis.com/taskqueue/v1beta2/projects/',
- * 'auth' => 'google_auth' // authorize all requests
- * ]);
+ * $client = new Client([
+ * 'handler' => $stack,
+ * 'base_uri' => 'https://www.googleapis.com/taskqueue/v1beta2/projects/',
+ * 'auth' => 'google_auth' // authorize all requests
+ * ]);
*
- * $res = $client->get('myproject/taskqueues/myqueue');
+ * $res = $client->get('myproject/taskqueues/myqueue');
+ * ```
*/
class ApplicationDefaultCredentials
{
@@ -74,13 +76,12 @@ class ApplicationDefaultCredentials
* this does not fallback to the compute engine defaults.
*
* @param string|array scope the scope of the access request, expressed
- * either as an Array or as a space-delimited String.
+ * either as an Array or as a space-delimited String.
* @param callable $httpHandler callback which delivers psr7 request
* @param array $cacheConfig configuration for the cache when it's present
- * @param CacheItemPoolInterface $cache an implementation of CacheItemPoolInterface
- *
+ * @param CacheItemPoolInterface $cache A cache implementation, may be
+ * provided if you have one already available for use.
* @return AuthTokenSubscriber
- *
* @throws DomainException if no implementation can be obtained.
*/
public static function getSubscriber(
@@ -102,13 +103,12 @@ class ApplicationDefaultCredentials
* this does not fallback to the compute engine defaults.
*
* @param string|array scope the scope of the access request, expressed
- * either as an Array or as a space-delimited String.
+ * either as an Array or as a space-delimited String.
* @param callable $httpHandler callback which delivers psr7 request
* @param array $cacheConfig configuration for the cache when it's present
- * @param CacheItemPoolInterface $cache
- *
+ * @param CacheItemPoolInterface $cache A cache implementation, may be
+ * provided if you have one already available for use.
* @return AuthTokenMiddleware
- *
* @throws DomainException if no implementation can be obtained.
*/
public static function getMiddleware(
@@ -131,20 +131,23 @@ class ApplicationDefaultCredentials
* this does not fallback to the Compute Engine defaults.
*
* @param string|array scope the scope of the access request, expressed
- * either as an Array or as a space-delimited String.
+ * either as an Array or as a space-delimited String.
* @param callable $httpHandler callback which delivers psr7 request
* @param array $cacheConfig configuration for the cache when it's present
- * @param CacheItemPoolInterface $cache
+ * @param CacheItemPoolInterface $cache A cache implementation, may be
+ * provided if you have one already available for use.
+ * @param string $quotaProject specifies a project to bill for access
+ * charges associated with the request.
*
* @return CredentialsLoader
- *
* @throws DomainException if no implementation can be obtained.
*/
public static function getCredentials(
$scope = null,
callable $httpHandler = null,
array $cacheConfig = null,
- CacheItemPoolInterface $cache = null
+ CacheItemPoolInterface $cache = null,
+ $quotaProject = null
) {
$creds = null;
$jsonKey = CredentialsLoader::fromEnv()
@@ -160,11 +163,12 @@ class ApplicationDefaultCredentials
}
if (!is_null($jsonKey)) {
+ $jsonKey['quota_project'] = $quotaProject;
$creds = CredentialsLoader::makeCredentials($scope, $jsonKey);
} elseif (AppIdentityCredentials::onAppEngine() && !GCECredentials::onAppEngineFlexible()) {
$creds = new AppIdentityCredentials($scope);
} elseif (GCECredentials::onGce($httpHandler)) {
- $creds = new GCECredentials(null, $scope);
+ $creds = new GCECredentials(null, $scope, null, $quotaProject);
}
if (is_null($creds)) {
@@ -187,10 +191,9 @@ class ApplicationDefaultCredentials
* @param string $targetAudience The audience for the ID token.
* @param callable $httpHandler callback which delivers psr7 request
* @param array $cacheConfig configuration for the cache when it's present
- * @param CacheItemPoolInterface $cache
- *
+ * @param CacheItemPoolInterface $cache A cache implementation, may be
+ * provided if you have one already available for use.
* @return AuthTokenMiddleware
- *
* @throws DomainException if no implementation can be obtained.
*/
public static function getIdTokenMiddleware(
@@ -198,7 +201,6 @@ class ApplicationDefaultCredentials
callable $httpHandler = null,
array $cacheConfig = null,
CacheItemPoolInterface $cache = null
-
) {
$creds = self::getIdTokenCredentials($targetAudience, $httpHandler, $cacheConfig, $cache);
@@ -213,10 +215,9 @@ class ApplicationDefaultCredentials
* @param string $targetAudience The audience for the ID token.
* @param callable $httpHandler callback which delivers psr7 request
* @param array $cacheConfig configuration for the cache when it's present
- * @param CacheItemPoolInterface $cache
- *
+ * @param CacheItemPoolInterface $cache A cache implementation, may be
+ * provided if you have one already available for use.
* @return CredentialsLoader
- *
* @throws DomainException if no implementation can be obtained.
* @throws InvalidArgumentException if JSON "type" key is invalid
*/
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Cache/SysVCacheItemPool.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Cache/SysVCacheItemPool.php
index 5280eee..1834cf1 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Cache/SysVCacheItemPool.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Cache/SysVCacheItemPool.php
@@ -62,22 +62,22 @@ class SysVCacheItemPool implements CacheItemPoolInterface
/**
* Create a SystemV shared memory based CacheItemPool.
*
- * @param array $options [optional] {
- * Configuration options.
- *
- * @type int $variableKey The variable key for getting the data from
- * the shared memory. **Defaults to** 1.
- * @type string $proj The project identifier for ftok. This needs to
- * be a one character string. **Defaults to** 'A'.
- * @type int $memsize The memory size in bytes for shm_attach.
- * **Defaults to** 10000.
- * @type int $perm The permission for shm_attach. **Defaults to** 0600.
+ * @param array $options [optional] Configuration options.
+ * @param int $options.variableKey The variable key for getting the data from
+ * the shared memory. **Defaults to** 1.
+ * @param $options.proj string The project identifier for ftok. This needs to
+ * be a one character string. **Defaults to** 'A'.
+ * @param $options.memsize int The memory size in bytes for shm_attach.
+ * **Defaults to** 10000.
+ * @param $options.perm int The permission for shm_attach. **Defaults to**
+ * 0600.
*/
public function __construct($options = [])
{
if (! extension_loaded('sysvshm')) {
throw new \RuntimeException(
- 'sysvshm extension is required to use this ItemPool');
+ 'sysvshm extension is required to use this ItemPool'
+ );
}
$this->options = $options + [
'variableKey' => self::VAR_KEY,
@@ -90,9 +90,6 @@ class SysVCacheItemPool implements CacheItemPoolInterface
$this->sysvKey = ftok(__FILE__, $this->options['proj']);
}
- /**
- * {@inheritdoc}
- */
public function getItem($key)
{
$this->loadItems();
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/AppIdentityCredentials.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/AppIdentityCredentials.php
index 5244b70..829344d 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/AppIdentityCredentials.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/AppIdentityCredentials.php
@@ -90,7 +90,7 @@ class AppIdentityCredentials extends CredentialsLoader implements
* SERVER_SOFTWARE environment variable (prod) or the APPENGINE_RUNTIME
* environment variable (dev).
*
- * @return true if this an App Engine Instance, false otherwise
+ * @return bool true if this an App Engine Instance, false otherwise
*/
public static function onAppEngine()
{
@@ -115,7 +115,6 @@ class AppIdentityCredentials extends CredentialsLoader implements
* the GuzzleHttp\ClientInterface instance passed in will not be used.
*
* @param callable $httpHandler callback which delivers psr7 request
- *
* @return array A set of auth related metadata, containing the following
* keys:
* - access_token (string)
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/GCECredentials.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/GCECredentials.php
index 461e36f..053b4e0 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/GCECredentials.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/GCECredentials.php
@@ -18,6 +18,7 @@
namespace Google\Auth\Credentials;
use Google\Auth\CredentialsLoader;
+use Google\Auth\GetQuotaProjectInterface;
use Google\Auth\HttpHandler\HttpClientCache;
use Google\Auth\HttpHandler\HttpHandlerFactory;
use Google\Auth\Iam;
@@ -55,9 +56,12 @@ use InvalidArgumentException;
*/
class GCECredentials extends CredentialsLoader implements
SignBlobInterface,
- ProjectIdProviderInterface
+ ProjectIdProviderInterface,
+ GetQuotaProjectInterface
{
+ // phpcs:disable
const cacheKey = 'GOOGLE_AUTH_PHP_GCE';
+ // phpcs:enable
/**
* The metadata IP address on appengine instances.
@@ -149,19 +153,27 @@ class GCECredentials extends CredentialsLoader implements
*/
private $targetAudience;
+ /**
+ * @var string|null
+ */
+ private $quotaProject;
+
/**
* @param Iam $iam [optional] An IAM instance.
* @param string|array $scope [optional] the scope of the access request,
* expressed either as an array or as a space-delimited string.
* @param string $targetAudience [optional] The audience for the ID token.
+ * @param string $quotaProject [optional] Specifies a project to bill for access
+ * charges associated with the request.
*/
- public function __construct(Iam $iam = null, $scope = null, $targetAudience = null)
+ public function __construct(Iam $iam = null, $scope = null, $targetAudience = null, $quotaProject = null)
{
$this->iam = $iam;
if ($scope && $targetAudience) {
throw new InvalidArgumentException(
- 'Scope and targetAudience cannot both be supplied');
+ 'Scope and targetAudience cannot both be supplied'
+ );
}
$tokenUri = self::getTokenUri();
@@ -174,7 +186,8 @@ class GCECredentials extends CredentialsLoader implements
$tokenUri = $tokenUri . '?scopes='. $scope;
} elseif ($targetAudience) {
- $tokenUri = sprintf('http://%s/computeMetadata/%s?audience=%s',
+ $tokenUri = sprintf(
+ 'http://%s/computeMetadata/%s?audience=%s',
self::METADATA_IP,
self::ID_TOKEN_URI_PATH,
$targetAudience
@@ -183,6 +196,7 @@ class GCECredentials extends CredentialsLoader implements
}
$this->tokenUri = $tokenUri;
+ $this->quotaProject = $quotaProject;
}
/**
@@ -225,7 +239,7 @@ class GCECredentials extends CredentialsLoader implements
* Determines if this an App Engine Flexible instance, by accessing the
* GAE_INSTANCE environment variable.
*
- * @return true if this an App Engine Flexible Instance, false otherwise
+ * @return bool true if this an App Engine Flexible Instance, false otherwise
*/
public static function onAppEngineFlexible()
{
@@ -456,4 +470,14 @@ class GCECredentials extends CredentialsLoader implements
return (string) $resp->getBody();
}
+
+ /**
+ * Get the quota project used for this API request
+ *
+ * @return string|null
+ */
+ public function getQuotaProject()
+ {
+ return $this->quotaProject;
+ }
}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/IAMCredentials.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/IAMCredentials.php
index 0d2a37d..5f055d8 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/IAMCredentials.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/IAMCredentials.php
@@ -43,11 +43,13 @@ class IAMCredentials
{
if (!is_string($selector)) {
throw new \InvalidArgumentException(
- 'selector must be a string');
+ 'selector must be a string'
+ );
}
if (!is_string($token)) {
throw new \InvalidArgumentException(
- 'token must be a string');
+ 'token must be a string'
+ );
}
$this->selector = $selector;
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/ServiceAccountCredentials.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/ServiceAccountCredentials.php
index 1bab948..7d5096b 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/ServiceAccountCredentials.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/ServiceAccountCredentials.php
@@ -112,18 +112,21 @@ class ServiceAccountCredentials extends CredentialsLoader implements
}
if (!array_key_exists('client_email', $jsonKey)) {
throw new \InvalidArgumentException(
- 'json key is missing the client_email field');
+ 'json key is missing the client_email field'
+ );
}
if (!array_key_exists('private_key', $jsonKey)) {
throw new \InvalidArgumentException(
- 'json key is missing the private_key field');
+ 'json key is missing the private_key field'
+ );
}
if (array_key_exists('quota_project', $jsonKey)) {
$this->quotaProject = (string) $jsonKey['quota_project'];
}
if ($scope && $targetAudience) {
throw new InvalidArgumentException(
- 'Scope and targetAudience cannot both be supplied');
+ 'Scope and targetAudience cannot both be supplied'
+ );
}
$additionalClaims = [];
if ($targetAudience) {
@@ -199,7 +202,6 @@ class ServiceAccountCredentials extends CredentialsLoader implements
* @param array $metadata metadata hashmap
* @param string $authUri optional auth uri
* @param callable $httpHandler callback which delivers psr7 request
- *
* @return array updated metadata hashmap
*/
public function updateMetadata(
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/ServiceAccountJwtAccessCredentials.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/ServiceAccountJwtAccessCredentials.php
index b3a2517..0943ee7 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/ServiceAccountJwtAccessCredentials.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/ServiceAccountJwtAccessCredentials.php
@@ -71,11 +71,13 @@ class ServiceAccountJwtAccessCredentials extends CredentialsLoader implements
}
if (!array_key_exists('client_email', $jsonKey)) {
throw new \InvalidArgumentException(
- 'json key is missing the client_email field');
+ 'json key is missing the client_email field'
+ );
}
if (!array_key_exists('private_key', $jsonKey)) {
throw new \InvalidArgumentException(
- 'json key is missing the private_key field');
+ 'json key is missing the private_key field'
+ );
}
if (array_key_exists('quota_project', $jsonKey)) {
$this->quotaProject = (string) $jsonKey['quota_project'];
@@ -98,7 +100,6 @@ class ServiceAccountJwtAccessCredentials extends CredentialsLoader implements
* @param array $metadata metadata hashmap
* @param string $authUri optional auth uri
* @param callable $httpHandler callback which delivers psr7 request
- *
* @return array updated metadata hashmap
*/
public function updateMetadata(
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/UserRefreshCredentials.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/UserRefreshCredentials.php
index a42665d..cc1bbf1 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/UserRefreshCredentials.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Credentials/UserRefreshCredentials.php
@@ -74,15 +74,18 @@ class UserRefreshCredentials extends CredentialsLoader implements GetQuotaProjec
}
if (!array_key_exists('client_id', $jsonKey)) {
throw new \InvalidArgumentException(
- 'json key is missing the client_id field');
+ 'json key is missing the client_id field'
+ );
}
if (!array_key_exists('client_secret', $jsonKey)) {
throw new \InvalidArgumentException(
- 'json key is missing the client_secret field');
+ 'json key is missing the client_secret field'
+ );
}
if (!array_key_exists('refresh_token', $jsonKey)) {
throw new \InvalidArgumentException(
- 'json key is missing the refresh_token field');
+ 'json key is missing the refresh_token field'
+ );
}
$this->auth = new OAuth2([
'clientId' => $jsonKey['client_id'],
@@ -109,7 +112,8 @@ class UserRefreshCredentials extends CredentialsLoader implements GetQuotaProjec
. 'To disable this warning, set '
. self::SUPPRESS_CLOUD_SDK_CREDS_WARNING_ENV
. ' environment variable to "true".',
- E_USER_WARNING);
+ E_USER_WARNING
+ );
}
}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/CredentialsLoader.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/CredentialsLoader.php
index a81d88f..fdc7d94 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/CredentialsLoader.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/CredentialsLoader.php
@@ -61,7 +61,7 @@ abstract class CredentialsLoader implements FetchAuthTokenInterface
* variable GOOGLE_APPLICATION_CREDENTIALS. Return null if
* GOOGLE_APPLICATION_CREDENTIALS is not specified.
*
- * @return array JSON key | null
+ * @return array|null JSON key | null
*/
public static function fromEnv()
{
@@ -81,12 +81,13 @@ abstract class CredentialsLoader implements FetchAuthTokenInterface
* Load a JSON key from a well known path.
*
* The well known path is OS dependent:
- * - windows: %APPDATA%/gcloud/application_default_credentials.json
- * - others: $HOME/.config/gcloud/application_default_credentials.json
*
- * If the file does not exists, this returns null.
+ * * windows: %APPDATA%/gcloud/application_default_credentials.json
+ * * others: $HOME/.config/gcloud/application_default_credentials.json
*
- * @return array JSON key | null
+ * If the file does not exist, this returns null.
+ *
+ * @return array|null JSON key | null
*/
public static function fromWellKnownFile()
{
@@ -108,9 +109,8 @@ abstract class CredentialsLoader implements FetchAuthTokenInterface
* Create a new Credentials instance.
*
* @param string|array $scope the scope of the access request, expressed
- * either as an Array or as a space-delimited String.
+ * either as an Array or as a space-delimited String.
* @param array $jsonKey the JSON credentials.
- *
* @return ServiceAccountCredentials|UserRefreshCredentials
*/
public static function makeCredentials($scope, array $jsonKey)
@@ -134,10 +134,9 @@ abstract class CredentialsLoader implements FetchAuthTokenInterface
* Create an authorized HTTP Client from an instance of FetchAuthTokenInterface.
*
* @param FetchAuthTokenInterface $fetcher is used to fetch the auth token
- * @param array $httpClientOptoins (optional) Array of request options to apply.
+ * @param array $httpClientOptions (optional) Array of request options to apply.
* @param callable $httpHandler (optional) http client to fetch the token.
* @param callable $tokenCallback (optional) function to be called when a new token is fetched.
- *
* @return \GuzzleHttp\Client
*/
public static function makeHttpClient(
@@ -203,7 +202,6 @@ abstract class CredentialsLoader implements FetchAuthTokenInterface
* @param array $metadata metadata hashmap
* @param string $authUri optional auth uri
* @param callable $httpHandler callback which delivers psr7 request
- *
* @return array updated metadata hashmap
*/
public function updateMetadata(
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/FetchAuthTokenCache.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/FetchAuthTokenCache.php
index 205ef66..c704c9a 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/FetchAuthTokenCache.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/FetchAuthTokenCache.php
@@ -46,6 +46,11 @@ class FetchAuthTokenCache implements
*/
private $cache;
+ /**
+ * @param FetchAuthTokenInterface $fetcher A credentials fetcher
+ * @param array $cacheConfig Configuration for the cache
+ * @param CacheItemPoolInterface $cache
+ */
public function __construct(
FetchAuthTokenInterface $fetcher,
array $cacheConfig = null,
@@ -66,9 +71,7 @@ class FetchAuthTokenCache implements
* from the supplied fetcher.
*
* @param callable $httpHandler callback which delivers psr7 request
- *
* @return array the response
- *
* @throws \Exception
*/
public function fetchAuthToken(callable $httpHandler = null)
@@ -125,14 +128,14 @@ class FetchAuthTokenCache implements
* Sign a blob using the fetcher.
*
* @param string $stringToSign The string to sign.
- * @param bool $forceOpenssl Require use of OpenSSL for local signing. Does
+ * @param bool $forceOpenSsl Require use of OpenSSL for local signing. Does
* not apply to signing done using external services. **Defaults to**
* `false`.
* @return string The resulting signature.
* @throws \RuntimeException If the fetcher does not implement
* `Google\Auth\SignBlobInterface`.
*/
- public function signBlob($stringToSign, $forceOpenSsl = false)
+ public function signBlob($stringToSign, $forceOpenSsl = false)
{
if (!$this->fetcher instanceof SignBlobInterface) {
throw new \RuntimeException(
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/FetchAuthTokenInterface.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/FetchAuthTokenInterface.php
index e3d8d28..4bf4d27 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/FetchAuthTokenInterface.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/FetchAuthTokenInterface.php
@@ -26,7 +26,6 @@ interface FetchAuthTokenInterface
* Fetches the auth tokens based on the current state.
*
* @param callable $httpHandler callback which delivers psr7 request
- *
* @return array a hash of auth tokens
*/
public function fetchAuthToken(callable $httpHandler = null);
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/HttpHandler/Guzzle5HttpHandler.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/HttpHandler/Guzzle5HttpHandler.php
index b43fc22..18ba027 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/HttpHandler/Guzzle5HttpHandler.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/HttpHandler/Guzzle5HttpHandler.php
@@ -45,7 +45,6 @@ class Guzzle5HttpHandler
*
* @param RequestInterface $request
* @param array $options
- *
* @return ResponseInterface
*/
public function __invoke(RequestInterface $request, array $options = [])
@@ -62,7 +61,6 @@ class Guzzle5HttpHandler
*
* @param RequestInterface $request
* @param array $options
- *
* @return Promise
*/
public function async(RequestInterface $request, array $options = [])
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/HttpHandler/Guzzle6HttpHandler.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/HttpHandler/Guzzle6HttpHandler.php
index 6dfe9a8..ecf78e0 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/HttpHandler/Guzzle6HttpHandler.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/HttpHandler/Guzzle6HttpHandler.php
@@ -26,7 +26,6 @@ class Guzzle6HttpHandler
*
* @param RequestInterface $request
* @param array $options
- *
* @return ResponseInterface
*/
public function __invoke(RequestInterface $request, array $options = [])
@@ -40,7 +39,7 @@ class Guzzle6HttpHandler
* @param RequestInterface $request
* @param array $options
*
- * @return \GuzzleHttp\Promise\Promise
+ * @return \GuzzleHttp\Promise\PromiseInterface
*/
public function async(RequestInterface $request, array $options = [])
{
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Middleware/AuthTokenMiddleware.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Middleware/AuthTokenMiddleware.php
index a109d59..aedb4c2 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Middleware/AuthTokenMiddleware.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Middleware/AuthTokenMiddleware.php
@@ -89,7 +89,6 @@ class AuthTokenMiddleware
* $res = $client->get('myproject/taskqueues/myqueue');
*
* @param callable $handler
- *
* @return \Closure
*/
public function __invoke(callable $handler)
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Middleware/ScopedAccessTokenMiddleware.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Middleware/ScopedAccessTokenMiddleware.php
index 55f04d1..ecbb659 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Middleware/ScopedAccessTokenMiddleware.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Middleware/ScopedAccessTokenMiddleware.php
@@ -76,7 +76,8 @@ class ScopedAccessTokenMiddleware
$this->tokenFunc = $tokenFunc;
if (!(is_string($scopes) || is_array($scopes))) {
throw new \InvalidArgumentException(
- 'wants scope should be string or array');
+ 'wants scope should be string or array'
+ );
}
$this->scopes = $scopes;
@@ -119,7 +120,6 @@ class ScopedAccessTokenMiddleware
* $res = $client->get('myproject/taskqueues/myqueue');
*
* @param callable $handler
- *
* @return \Closure
*/
public function __invoke(callable $handler)
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Middleware/SimpleMiddleware.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Middleware/SimpleMiddleware.php
index c31fc65..5104542 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Middleware/SimpleMiddleware.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Middleware/SimpleMiddleware.php
@@ -71,7 +71,6 @@ class SimpleMiddleware
* $res = $client->get('drive/v2/rest');
*
* @param callable $handler
- *
* @return \Closure
*/
public function __invoke(callable $handler)
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/OAuth2.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/OAuth2.php
index fa3f593..d3f2785 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/OAuth2.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/OAuth2.php
@@ -120,7 +120,7 @@ class OAuth2 implements FetchAuthTokenInterface
* The scope of the access request, expressed either as an Array or as a
* space-delimited string.
*
- * @var string
+ * @var array
*/
private $scope;
@@ -175,6 +175,13 @@ class OAuth2 implements FetchAuthTokenInterface
*/
private $signingKey;
+ /**
+ * The signing key id when using assertion profile. Param kid in jwt header
+ *
+ * @var string
+ */
+ private $signingKeyId;
+
/**
* The signing algorithm when using an assertion profile.
*
@@ -294,6 +301,9 @@ class OAuth2 implements FetchAuthTokenInterface
* - signingKey
* Signing key when using assertion profile
*
+ * - signingKeyId
+ * Signing key id when using assertion profile
+ *
* - refreshToken
* The refresh token associated with the access token
* to be refreshed.
@@ -327,6 +337,7 @@ class OAuth2 implements FetchAuthTokenInterface
'sub' => null,
'audience' => null,
'signingKey' => null,
+ 'signingKeyId' => null,
'signingAlgorithm' => null,
'scope' => null,
'additionalClaims' => [],
@@ -345,6 +356,7 @@ class OAuth2 implements FetchAuthTokenInterface
$this->setExpiry($opts['expiry']);
$this->setAudience($opts['audience']);
$this->setSigningKey($opts['signingKey']);
+ $this->setSigningKeyId($opts['signingKeyId']);
$this->setSigningAlgorithm($opts['signingAlgorithm']);
$this->setScope($opts['scope']);
$this->setExtensionParams($opts['extensionParams']);
@@ -359,11 +371,21 @@ class OAuth2 implements FetchAuthTokenInterface
* - if present, but invalid, raises DomainException.
* - otherwise returns the payload in the idtoken as a PHP object.
*
- * if $publicKey is null, the key is decoded without being verified.
+ * The behavior of this method varies depending on the version of
+ * `firebase/php-jwt` you are using. In versions lower than 3.0.0, if
+ * `$publicKey` is null, the key is decoded without being verified. In
+ * newer versions, if a public key is not given, this method will throw an
+ * `\InvalidArgumentException`.
*
* @param string $publicKey The public key to use to authenticate the token
* @param array $allowed_algs List of supported verification algorithms
- *
+ * @throws \DomainException if the token is missing an audience.
+ * @throws \DomainException if the audience does not match the one set in
+ * the OAuth2 class instance.
+ * @throws \UnexpectedValueException If the token is invalid
+ * @throws SignatureInvalidException If the signature is invalid.
+ * @throws BeforeValidException If the token is not yet valid.
+ * @throws ExpiredException If the token has expired.
* @return null|object
*/
public function verifyIdToken($publicKey = null, $allowed_algs = array())
@@ -388,7 +410,6 @@ class OAuth2 implements FetchAuthTokenInterface
* Obtains the encoded jwt from the instance data.
*
* @param array $config array optional configuration parameters
- *
* @return string
*/
public function toJwt(array $config = [])
@@ -424,8 +445,12 @@ class OAuth2 implements FetchAuthTokenInterface
}
$assertion += $this->getAdditionalClaims();
- return $this->jwtEncode($assertion, $this->getSigningKey(),
- $this->getSigningAlgorithm());
+ return $this->jwtEncode(
+ $assertion,
+ $this->getSigningKey(),
+ $this->getSigningAlgorithm(),
+ $this->getSigningKeyId()
+ );
}
/**
@@ -490,7 +515,6 @@ class OAuth2 implements FetchAuthTokenInterface
* Fetches the auth tokens based on the current state.
*
* @param callable $httpHandler callback which delivers psr7 request
- *
* @return array the response
*/
public function fetchAuthToken(callable $httpHandler = null)
@@ -515,10 +539,6 @@ class OAuth2 implements FetchAuthTokenInterface
*/
public function getCacheKey()
{
- if (is_string($this->scope)) {
- return $this->scope;
- }
-
if (is_array($this->scope)) {
return implode(':', $this->scope);
}
@@ -531,9 +551,7 @@ class OAuth2 implements FetchAuthTokenInterface
* Parses the fetched tokens.
*
* @param ResponseInterface $resp the response.
- *
* @return array the tokens parsed from the response body.
- *
* @throws \Exception
*/
public function parseTokenResponse(ResponseInterface $resp)
@@ -559,12 +577,14 @@ class OAuth2 implements FetchAuthTokenInterface
/**
* Updates an OAuth 2.0 client.
*
- * @example
- * client.updateToken([
+ * Example:
+ * ```
+ * $oauth->updateToken([
* 'refresh_token' => 'n4E9O119d',
* 'access_token' => 'FJQbwq9',
* 'expires_in' => 3600
- * ])
+ * ]);
+ * ```
*
* @param array $config
* The configuration parameters related to the token.
@@ -621,16 +641,15 @@ class OAuth2 implements FetchAuthTokenInterface
* Builds the authorization Uri that the user should be redirected to.
*
* @param array $config configuration options that customize the return url
- *
* @return UriInterface the authorization Url.
- *
* @throws InvalidArgumentException
*/
public function buildFullAuthorizationUri(array $config = [])
{
if (is_null($this->getAuthorizationUri())) {
throw new InvalidArgumentException(
- 'requires an authorizationUri to have been set');
+ 'requires an authorizationUri to have been set'
+ );
}
$params = array_merge([
@@ -645,14 +664,16 @@ class OAuth2 implements FetchAuthTokenInterface
// Validate the auth_params
if (is_null($params['client_id'])) {
throw new InvalidArgumentException(
- 'missing the required client identifier');
+ 'missing the required client identifier'
+ );
}
if (is_null($params['redirect_uri'])) {
throw new InvalidArgumentException('missing the required redirect URI');
}
if (!empty($params['prompt']) && !empty($params['approval_prompt'])) {
throw new InvalidArgumentException(
- 'prompt and approval_prompt are mutually exclusive');
+ 'prompt and approval_prompt are mutually exclusive'
+ );
}
// Construct the uri object; return it if it is valid.
@@ -665,7 +686,8 @@ class OAuth2 implements FetchAuthTokenInterface
if ($result->getScheme() != 'https') {
throw new InvalidArgumentException(
- 'Authorization endpoint must be protected by TLS');
+ 'Authorization endpoint must be protected by TLS'
+ );
}
return $result;
@@ -743,7 +765,8 @@ class OAuth2 implements FetchAuthTokenInterface
// @see https://developers.google.com/identity/sign-in/web/server-side-flow
if ('postmessage' !== (string)$uri) {
throw new InvalidArgumentException(
- 'Redirect URI must be absolute');
+ 'Redirect URI must be absolute'
+ );
}
}
$this->redirectUri = (string)$uri;
@@ -768,7 +791,6 @@ class OAuth2 implements FetchAuthTokenInterface
* a space-delimited String.
*
* @param string|array $scope
- *
* @throws InvalidArgumentException
*/
public function setScope($scope)
@@ -782,13 +804,15 @@ class OAuth2 implements FetchAuthTokenInterface
$pos = strpos($s, ' ');
if ($pos !== false) {
throw new InvalidArgumentException(
- 'array scope values should not contain spaces');
+ 'array scope values should not contain spaces'
+ );
}
}
$this->scope = $scope;
} else {
throw new InvalidArgumentException(
- 'scopes should be a string or array of strings');
+ 'scopes should be a string or array of strings'
+ );
}
}
@@ -828,7 +852,6 @@ class OAuth2 implements FetchAuthTokenInterface
* Sets the current grant type.
*
* @param $grantType
- *
* @throws InvalidArgumentException
*/
public function setGrantType($grantType)
@@ -839,7 +862,8 @@ class OAuth2 implements FetchAuthTokenInterface
// validate URI
if (!$this->isAbsoluteUri($grantType)) {
throw new InvalidArgumentException(
- 'invalid grant type');
+ 'invalid grant type'
+ );
}
$this->grantType = (string)$grantType;
}
@@ -1031,6 +1055,26 @@ class OAuth2 implements FetchAuthTokenInterface
$this->signingKey = $signingKey;
}
+ /**
+ * Gets the signing key id when using an assertion profile.
+ *
+ * @return string
+ */
+ public function getSigningKeyId()
+ {
+ return $this->signingKeyId;
+ }
+
+ /**
+ * Sets the signing key id when using an assertion profile.
+ *
+ * @param string $signingKeyId
+ */
+ public function setSigningKeyId($signingKeyId)
+ {
+ $this->signingKeyId = $signingKeyId;
+ }
+
/**
* Gets the signing algorithm when using an assertion profile.
*
@@ -1287,7 +1331,6 @@ class OAuth2 implements FetchAuthTokenInterface
* @todo handle uri as array
*
* @param string $uri
- *
* @return null|UriInterface
*/
private function coerceUri($uri)
@@ -1303,7 +1346,6 @@ class OAuth2 implements FetchAuthTokenInterface
* @param string $idToken
* @param string|array|null $publicKey
* @param array $allowedAlgs
- *
* @return object
*/
private function jwtDecode($idToken, $publicKey, $allowedAlgs)
@@ -1315,14 +1357,18 @@ class OAuth2 implements FetchAuthTokenInterface
return \JWT::decode($idToken, $publicKey, $allowedAlgs);
}
- private function jwtEncode($assertion, $signingKey, $signingAlgorithm)
+ private function jwtEncode($assertion, $signingKey, $signingAlgorithm, $signingKeyId = null)
{
if (class_exists('Firebase\JWT\JWT')) {
- return \Firebase\JWT\JWT::encode($assertion, $signingKey,
- $signingAlgorithm);
+ return \Firebase\JWT\JWT::encode(
+ $assertion,
+ $signingKey,
+ $signingAlgorithm,
+ $signingKeyId
+ );
}
- return \JWT::encode($assertion, $signingKey, $signingAlgorithm);
+ return \JWT::encode($assertion, $signingKey, $signingAlgorithm, $signingKeyId);
}
/**
@@ -1330,7 +1376,6 @@ class OAuth2 implements FetchAuthTokenInterface
* (RFC 3986).
*
* @param string $uri
- *
* @return bool
*/
private function isAbsoluteUri($uri)
@@ -1342,7 +1387,6 @@ class OAuth2 implements FetchAuthTokenInterface
/**
* @param array $params
- *
* @return array
*/
private function addClientCredentials(&$params)
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Subscriber/AuthTokenSubscriber.php b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Subscriber/AuthTokenSubscriber.php
index 85e2103..bc529d2 100644
--- a/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Subscriber/AuthTokenSubscriber.php
+++ b/wp-content/plugins/wp-mail-smtp/vendor/google/auth/src/Subscriber/AuthTokenSubscriber.php
@@ -79,21 +79,24 @@ class AuthTokenSubscriber implements SubscriberInterface
/**
* Updates the request with an Authorization header when auth is 'fetched_auth_token'.
*
- * use GuzzleHttp\Client;
- * use Google\Auth\OAuth2;
- * use Google\Auth\Subscriber\AuthTokenSubscriber;
+ * Example:
+ * ```
+ * use GuzzleHttp\Client;
+ * use Google\Auth\OAuth2;
+ * use Google\Auth\Subscriber\AuthTokenSubscriber;
*
- * $config = [..
+ *
+ * @internal
+ */
+final class Mbstring
+{
+ const MB_CASE_FOLD = PHP_INT_MAX;
+
+ private static $encodingList = array('ASCII', 'UTF-8');
+ private static $language = 'neutral';
+ private static $internalEncoding = 'UTF-8';
+ private static $caseFold = array(
+ array('µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"),
+ array('μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'),
+ );
+
+ public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null)
+ {
+ if (\is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) {
+ $fromEncoding = self::mb_detect_encoding($s, $fromEncoding);
+ } else {
+ $fromEncoding = self::getEncoding($fromEncoding);
+ }
+
+ $toEncoding = self::getEncoding($toEncoding);
+
+ if ('BASE64' === $fromEncoding) {
+ $s = base64_decode($s);
+ $fromEncoding = $toEncoding;
+ }
+
+ if ('BASE64' === $toEncoding) {
+ return base64_encode($s);
+ }
+
+ if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) {
+ if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) {
+ $fromEncoding = 'Windows-1252';
+ }
+ if ('UTF-8' !== $fromEncoding) {
+ $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s);
+ }
+
+ return preg_replace_callback('/[\x80-\xFF]+/', array(__CLASS__, 'html_encoding_callback'), $s);
+ }
+
+ if ('HTML-ENTITIES' === $fromEncoding) {
+ $s = html_entity_decode($s, ENT_COMPAT, 'UTF-8');
+ $fromEncoding = 'UTF-8';
+ }
+
+ return iconv($fromEncoding, $toEncoding.'//IGNORE', $s);
+ }
+
+ public static function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null)
+ {
+ $vars = array(&$a, &$b, &$c, &$d, &$e, &$f);
+
+ $ok = true;
+ array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) {
+ if (false === $v = Mbstring::mb_convert_encoding($v, $toEncoding, $fromEncoding)) {
+ $ok = false;
+ }
+ });
+
+ return $ok ? $fromEncoding : false;
+ }
+
+ public static function mb_decode_mimeheader($s)
+ {
+ return iconv_mime_decode($s, 2, self::$internalEncoding);
+ }
+
+ public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null)
+ {
+ trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', E_USER_WARNING);
+ }
+
+ public static function mb_decode_numericentity($s, $convmap, $encoding = null)
+ {
+ if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) {
+ trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING);
+
+ return null;
+ }
+
+ if (!\is_array($convmap) || !$convmap) {
+ return false;
+ }
+
+ if (null !== $encoding && !\is_scalar($encoding)) {
+ trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING);
+
+ return ''; // Instead of null (cf. mb_encode_numericentity).
+ }
+
+ $s = (string) $s;
+ if ('' === $s) {
+ return '';
+ }
+
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' === $encoding) {
+ $encoding = null;
+ if (!preg_match('//u', $s)) {
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
+ }
+ } else {
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
+ }
+
+ $cnt = floor(\count($convmap) / 4) * 4;
+
+ for ($i = 0; $i < $cnt; $i += 4) {
+ // collector_decode_htmlnumericentity ignores $convmap[$i + 3]
+ $convmap[$i] += $convmap[$i + 2];
+ $convmap[$i + 1] += $convmap[$i + 2];
+ }
+
+ $s = preg_replace_callback('/(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) {
+ $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1];
+ for ($i = 0; $i < $cnt; $i += 4) {
+ if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) {
+ return Mbstring::mb_chr($c - $convmap[$i + 2]);
+ }
+ }
+
+ return $m[0];
+ }, $s);
+
+ if (null === $encoding) {
+ return $s;
+ }
+
+ return iconv('UTF-8', $encoding.'//IGNORE', $s);
+ }
+
+ public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false)
+ {
+ if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) {
+ trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING);
+
+ return null;
+ }
+
+ if (!\is_array($convmap) || !$convmap) {
+ return false;
+ }
+
+ if (null !== $encoding && !\is_scalar($encoding)) {
+ trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING);
+
+ return null; // Instead of '' (cf. mb_decode_numericentity).
+ }
+
+ if (null !== $is_hex && !\is_scalar($is_hex)) {
+ trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', E_USER_WARNING);
+
+ return null;
+ }
+
+ $s = (string) $s;
+ if ('' === $s) {
+ return '';
+ }
+
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' === $encoding) {
+ $encoding = null;
+ if (!preg_match('//u', $s)) {
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
+ }
+ } else {
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
+ }
+
+ static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4);
+
+ $cnt = floor(\count($convmap) / 4) * 4;
+ $i = 0;
+ $len = \strlen($s);
+ $result = '';
+
+ while ($i < $len) {
+ $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
+ $uchr = substr($s, $i, $ulen);
+ $i += $ulen;
+ $c = self::mb_ord($uchr);
+
+ for ($j = 0; $j < $cnt; $j += 4) {
+ if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) {
+ $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3];
+ $result .= $is_hex ? sprintf('%X;', $cOffset) : ''.$cOffset.';';
+ continue 2;
+ }
+ }
+ $result .= $uchr;
+ }
+
+ if (null === $encoding) {
+ return $result;
+ }
+
+ return iconv('UTF-8', $encoding.'//IGNORE', $result);
+ }
+
+ public static function mb_convert_case($s, $mode, $encoding = null)
+ {
+ $s = (string) $s;
+ if ('' === $s) {
+ return '';
+ }
+
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' === $encoding) {
+ $encoding = null;
+ if (!preg_match('//u', $s)) {
+ $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
+ }
+ } else {
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
+ }
+
+ if (MB_CASE_TITLE == $mode) {
+ static $titleRegexp = null;
+ if (null === $titleRegexp) {
+ $titleRegexp = self::getData('titleCaseRegexp');
+ }
+ $s = preg_replace_callback($titleRegexp, array(__CLASS__, 'title_case'), $s);
+ } else {
+ if (MB_CASE_UPPER == $mode) {
+ static $upper = null;
+ if (null === $upper) {
+ $upper = self::getData('upperCase');
+ }
+ $map = $upper;
+ } else {
+ if (self::MB_CASE_FOLD === $mode) {
+ $s = str_replace(self::$caseFold[0], self::$caseFold[1], $s);
+ }
+
+ static $lower = null;
+ if (null === $lower) {
+ $lower = self::getData('lowerCase');
+ }
+ $map = $lower;
+ }
+
+ static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4);
+
+ $i = 0;
+ $len = \strlen($s);
+
+ while ($i < $len) {
+ $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
+ $uchr = substr($s, $i, $ulen);
+ $i += $ulen;
+
+ if (isset($map[$uchr])) {
+ $uchr = $map[$uchr];
+ $nlen = \strlen($uchr);
+
+ if ($nlen == $ulen) {
+ $nlen = $i;
+ do {
+ $s[--$nlen] = $uchr[--$ulen];
+ } while ($ulen);
+ } else {
+ $s = substr_replace($s, $uchr, $i - $ulen, $ulen);
+ $len += $nlen - $ulen;
+ $i += $nlen - $ulen;
+ }
+ }
+ }
+ }
+
+ if (null === $encoding) {
+ return $s;
+ }
+
+ return iconv('UTF-8', $encoding.'//IGNORE', $s);
+ }
+
+ public static function mb_internal_encoding($encoding = null)
+ {
+ if (null === $encoding) {
+ return self::$internalEncoding;
+ }
+
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' === $encoding || false !== @iconv($encoding, $encoding, ' ')) {
+ self::$internalEncoding = $encoding;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ public static function mb_language($lang = null)
+ {
+ if (null === $lang) {
+ return self::$language;
+ }
+
+ switch ($lang = strtolower($lang)) {
+ case 'uni':
+ case 'neutral':
+ self::$language = $lang;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ public static function mb_list_encodings()
+ {
+ return array('UTF-8');
+ }
+
+ public static function mb_encoding_aliases($encoding)
+ {
+ switch (strtoupper($encoding)) {
+ case 'UTF8':
+ case 'UTF-8':
+ return array('utf8');
+ }
+
+ return false;
+ }
+
+ public static function mb_check_encoding($var = null, $encoding = null)
+ {
+ if (null === $encoding) {
+ if (null === $var) {
+ return false;
+ }
+ $encoding = self::$internalEncoding;
+ }
+
+ return self::mb_detect_encoding($var, array($encoding)) || false !== @iconv($encoding, $encoding, $var);
+ }
+
+ public static function mb_detect_encoding($str, $encodingList = null, $strict = false)
+ {
+ if (null === $encodingList) {
+ $encodingList = self::$encodingList;
+ } else {
+ if (!\is_array($encodingList)) {
+ $encodingList = array_map('trim', explode(',', $encodingList));
+ }
+ $encodingList = array_map('strtoupper', $encodingList);
+ }
+
+ foreach ($encodingList as $enc) {
+ switch ($enc) {
+ case 'ASCII':
+ if (!preg_match('/[\x80-\xFF]/', $str)) {
+ return $enc;
+ }
+ break;
+
+ case 'UTF8':
+ case 'UTF-8':
+ if (preg_match('//u', $str)) {
+ return 'UTF-8';
+ }
+ break;
+
+ default:
+ if (0 === strncmp($enc, 'ISO-8859-', 9)) {
+ return $enc;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public static function mb_detect_order($encodingList = null)
+ {
+ if (null === $encodingList) {
+ return self::$encodingList;
+ }
+
+ if (!\is_array($encodingList)) {
+ $encodingList = array_map('trim', explode(',', $encodingList));
+ }
+ $encodingList = array_map('strtoupper', $encodingList);
+
+ foreach ($encodingList as $enc) {
+ switch ($enc) {
+ default:
+ if (strncmp($enc, 'ISO-8859-', 9)) {
+ return false;
+ }
+ // no break
+ case 'ASCII':
+ case 'UTF8':
+ case 'UTF-8':
+ }
+ }
+
+ self::$encodingList = $encodingList;
+
+ return true;
+ }
+
+ public static function mb_strlen($s, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return \strlen($s);
+ }
+
+ return @iconv_strlen($s, $encoding);
+ }
+
+ public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return strpos($haystack, $needle, $offset);
+ }
+
+ $needle = (string) $needle;
+ if ('' === $needle) {
+ trigger_error(__METHOD__.': Empty delimiter', E_USER_WARNING);
+
+ return false;
+ }
+
+ return iconv_strpos($haystack, $needle, $offset, $encoding);
+ }
+
+ public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return strrpos($haystack, $needle, $offset);
+ }
+
+ if ($offset != (int) $offset) {
+ $offset = 0;
+ } elseif ($offset = (int) $offset) {
+ if ($offset < 0) {
+ if (0 > $offset += self::mb_strlen($needle)) {
+ $haystack = self::mb_substr($haystack, 0, $offset, $encoding);
+ }
+ $offset = 0;
+ } else {
+ $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding);
+ }
+ }
+
+ $pos = iconv_strrpos($haystack, $needle, $encoding);
+
+ return false !== $pos ? $offset + $pos : false;
+ }
+
+ public static function mb_str_split($string, $split_length = 1, $encoding = null)
+ {
+ if (null !== $string && !\is_scalar($string) && !(\is_object($string) && \method_exists($string, '__toString'))) {
+ trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', E_USER_WARNING);
+
+ return null;
+ }
+
+ if (1 > $split_length = (int) $split_length) {
+ trigger_error('The length of each segment must be greater than zero', E_USER_WARNING);
+
+ return false;
+ }
+
+ if (null === $encoding) {
+ $encoding = mb_internal_encoding();
+ }
+
+ if ('UTF-8' === $encoding = self::getEncoding($encoding)) {
+ $rx = '/(';
+ while (65535 < $split_length) {
+ $rx .= '.{65535}';
+ $split_length -= 65535;
+ }
+ $rx .= '.{'.$split_length.'})/us';
+
+ return preg_split($rx, $string, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+ }
+
+ $result = array();
+ $length = mb_strlen($string, $encoding);
+
+ for ($i = 0; $i < $length; $i += $split_length) {
+ $result[] = mb_substr($string, $i, $split_length, $encoding);
+ }
+
+ return $result;
+ }
+
+ public static function mb_strtolower($s, $encoding = null)
+ {
+ return self::mb_convert_case($s, MB_CASE_LOWER, $encoding);
+ }
+
+ public static function mb_strtoupper($s, $encoding = null)
+ {
+ return self::mb_convert_case($s, MB_CASE_UPPER, $encoding);
+ }
+
+ public static function mb_substitute_character($c = null)
+ {
+ if (0 === strcasecmp($c, 'none')) {
+ return true;
+ }
+
+ return null !== $c ? false : 'none';
+ }
+
+ public static function mb_substr($s, $start, $length = null, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return (string) substr($s, $start, null === $length ? 2147483647 : $length);
+ }
+
+ if ($start < 0) {
+ $start = iconv_strlen($s, $encoding) + $start;
+ if ($start < 0) {
+ $start = 0;
+ }
+ }
+
+ if (null === $length) {
+ $length = 2147483647;
+ } elseif ($length < 0) {
+ $length = iconv_strlen($s, $encoding) + $length - $start;
+ if ($length < 0) {
+ return '';
+ }
+ }
+
+ return (string) iconv_substr($s, $start, $length, $encoding);
+ }
+
+ public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding);
+ $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding);
+
+ return self::mb_strpos($haystack, $needle, $offset, $encoding);
+ }
+
+ public static function mb_stristr($haystack, $needle, $part = false, $encoding = null)
+ {
+ $pos = self::mb_stripos($haystack, $needle, 0, $encoding);
+
+ return self::getSubpart($pos, $part, $haystack, $encoding);
+ }
+
+ public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+ if ('CP850' === $encoding || 'ASCII' === $encoding) {
+ return strrchr($haystack, $needle, $part);
+ }
+ $needle = self::mb_substr($needle, 0, 1, $encoding);
+ $pos = iconv_strrpos($haystack, $needle, $encoding);
+
+ return self::getSubpart($pos, $part, $haystack, $encoding);
+ }
+
+ public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null)
+ {
+ $needle = self::mb_substr($needle, 0, 1, $encoding);
+ $pos = self::mb_strripos($haystack, $needle, $encoding);
+
+ return self::getSubpart($pos, $part, $haystack, $encoding);
+ }
+
+ public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null)
+ {
+ $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding);
+ $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding);
+
+ return self::mb_strrpos($haystack, $needle, $offset, $encoding);
+ }
+
+ public static function mb_strstr($haystack, $needle, $part = false, $encoding = null)
+ {
+ $pos = strpos($haystack, $needle);
+ if (false === $pos) {
+ return false;
+ }
+ if ($part) {
+ return substr($haystack, 0, $pos);
+ }
+
+ return substr($haystack, $pos);
+ }
+
+ public static function mb_get_info($type = 'all')
+ {
+ $info = array(
+ 'internal_encoding' => self::$internalEncoding,
+ 'http_output' => 'pass',
+ 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)',
+ 'func_overload' => 0,
+ 'func_overload_list' => 'no overload',
+ 'mail_charset' => 'UTF-8',
+ 'mail_header_encoding' => 'BASE64',
+ 'mail_body_encoding' => 'BASE64',
+ 'illegal_chars' => 0,
+ 'encoding_translation' => 'Off',
+ 'language' => self::$language,
+ 'detect_order' => self::$encodingList,
+ 'substitute_character' => 'none',
+ 'strict_detection' => 'Off',
+ );
+
+ if ('all' === $type) {
+ return $info;
+ }
+ if (isset($info[$type])) {
+ return $info[$type];
+ }
+
+ return false;
+ }
+
+ public static function mb_http_input($type = '')
+ {
+ return false;
+ }
+
+ public static function mb_http_output($encoding = null)
+ {
+ return null !== $encoding ? 'pass' === $encoding : 'pass';
+ }
+
+ public static function mb_strwidth($s, $encoding = null)
+ {
+ $encoding = self::getEncoding($encoding);
+
+ if ('UTF-8' !== $encoding) {
+ $s = iconv($encoding, 'UTF-8//IGNORE', $s);
+ }
+
+ $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide);
+
+ return ($wide << 1) + iconv_strlen($s, 'UTF-8');
+ }
+
+ public static function mb_substr_count($haystack, $needle, $encoding = null)
+ {
+ return substr_count($haystack, $needle);
+ }
+
+ public static function mb_output_handler($contents, $status)
+ {
+ return $contents;
+ }
+
+ public static function mb_chr($code, $encoding = null)
+ {
+ if (0x80 > $code %= 0x200000) {
+ $s = \chr($code);
+ } elseif (0x800 > $code) {
+ $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F);
+ } elseif (0x10000 > $code) {
+ $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
+ } else {
+ $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
+ }
+
+ if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
+ $s = mb_convert_encoding($s, $encoding, 'UTF-8');
+ }
+
+ return $s;
+ }
+
+ public static function mb_ord($s, $encoding = null)
+ {
+ if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
+ $s = mb_convert_encoding($s, 'UTF-8', $encoding);
+ }
+
+ if (1 === \strlen($s)) {
+ return \ord($s);
+ }
+
+ $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0;
+ if (0xF0 <= $code) {
+ return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80;
+ }
+ if (0xE0 <= $code) {
+ return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80;
+ }
+ if (0xC0 <= $code) {
+ return (($code - 0xC0) << 6) + $s[2] - 0x80;
+ }
+
+ return $code;
+ }
+
+ private static function getSubpart($pos, $part, $haystack, $encoding)
+ {
+ if (false === $pos) {
+ return false;
+ }
+ if ($part) {
+ return self::mb_substr($haystack, 0, $pos, $encoding);
+ }
+
+ return self::mb_substr($haystack, $pos, null, $encoding);
+ }
+
+ private static function html_encoding_callback(array $m)
+ {
+ $i = 1;
+ $entities = '';
+ $m = unpack('C*', htmlentities($m[0], ENT_COMPAT, 'UTF-8'));
+
+ while (isset($m[$i])) {
+ if (0x80 > $m[$i]) {
+ $entities .= \chr($m[$i++]);
+ continue;
+ }
+ if (0xF0 <= $m[$i]) {
+ $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
+ } elseif (0xE0 <= $m[$i]) {
+ $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
+ } else {
+ $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80;
+ }
+
+ $entities .= ''.$c.';';
+ }
+
+ return $entities;
+ }
+
+ private static function title_case(array $s)
+ {
+ return self::mb_convert_case($s[1], MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], MB_CASE_LOWER, 'UTF-8');
+ }
+
+ private static function getData($file)
+ {
+ if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) {
+ return require $file;
+ }
+
+ return false;
+ }
+
+ private static function getEncoding($encoding)
+ {
+ if (null === $encoding) {
+ return self::$internalEncoding;
+ }
+
+ if ('UTF-8' === $encoding) {
+ return 'UTF-8';
+ }
+
+ $encoding = strtoupper($encoding);
+
+ if ('8BIT' === $encoding || 'BINARY' === $encoding) {
+ return 'CP850';
+ }
+
+ if ('UTF8' === $encoding) {
+ return 'UTF-8';
+ }
+
+ return $encoding;
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php
new file mode 100644
index 0000000..e6fbfa6
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php
@@ -0,0 +1,1096 @@
+ 'a',
+ 'B' => 'b',
+ 'C' => 'c',
+ 'D' => 'd',
+ 'E' => 'e',
+ 'F' => 'f',
+ 'G' => 'g',
+ 'H' => 'h',
+ 'I' => 'i',
+ 'J' => 'j',
+ 'K' => 'k',
+ 'L' => 'l',
+ 'M' => 'm',
+ 'N' => 'n',
+ 'O' => 'o',
+ 'P' => 'p',
+ 'Q' => 'q',
+ 'R' => 'r',
+ 'S' => 's',
+ 'T' => 't',
+ 'U' => 'u',
+ 'V' => 'v',
+ 'W' => 'w',
+ 'X' => 'x',
+ 'Y' => 'y',
+ 'Z' => 'z',
+ 'À' => 'à',
+ 'Á' => 'á',
+ 'Â' => 'â',
+ 'Ã' => 'ã',
+ 'Ä' => 'ä',
+ 'Å' => 'å',
+ 'Æ' => 'æ',
+ 'Ç' => 'ç',
+ 'È' => 'è',
+ 'É' => 'é',
+ 'Ê' => 'ê',
+ 'Ë' => 'ë',
+ 'Ì' => 'ì',
+ 'Í' => 'í',
+ 'Î' => 'î',
+ 'Ï' => 'ï',
+ 'Ð' => 'ð',
+ 'Ñ' => 'ñ',
+ 'Ò' => 'ò',
+ 'Ó' => 'ó',
+ 'Ô' => 'ô',
+ 'Õ' => 'õ',
+ 'Ö' => 'ö',
+ 'Ø' => 'ø',
+ 'Ù' => 'ù',
+ 'Ú' => 'ú',
+ 'Û' => 'û',
+ 'Ü' => 'ü',
+ 'Ý' => 'ý',
+ 'Þ' => 'þ',
+ 'Ā' => 'ā',
+ 'Ă' => 'ă',
+ 'Ą' => 'ą',
+ 'Ć' => 'ć',
+ 'Ĉ' => 'ĉ',
+ 'Ċ' => 'ċ',
+ 'Č' => 'č',
+ 'Ď' => 'ď',
+ 'Đ' => 'đ',
+ 'Ē' => 'ē',
+ 'Ĕ' => 'ĕ',
+ 'Ė' => 'ė',
+ 'Ę' => 'ę',
+ 'Ě' => 'ě',
+ 'Ĝ' => 'ĝ',
+ 'Ğ' => 'ğ',
+ 'Ġ' => 'ġ',
+ 'Ģ' => 'ģ',
+ 'Ĥ' => 'ĥ',
+ 'Ħ' => 'ħ',
+ 'Ĩ' => 'ĩ',
+ 'Ī' => 'ī',
+ 'Ĭ' => 'ĭ',
+ 'Į' => 'į',
+ 'İ' => 'i',
+ 'IJ' => 'ij',
+ 'Ĵ' => 'ĵ',
+ 'Ķ' => 'ķ',
+ 'Ĺ' => 'ĺ',
+ 'Ļ' => 'ļ',
+ 'Ľ' => 'ľ',
+ 'Ŀ' => 'ŀ',
+ 'Ł' => 'ł',
+ 'Ń' => 'ń',
+ 'Ņ' => 'ņ',
+ 'Ň' => 'ň',
+ 'Ŋ' => 'ŋ',
+ 'Ō' => 'ō',
+ 'Ŏ' => 'ŏ',
+ 'Ő' => 'ő',
+ 'Œ' => 'œ',
+ 'Ŕ' => 'ŕ',
+ 'Ŗ' => 'ŗ',
+ 'Ř' => 'ř',
+ 'Ś' => 'ś',
+ 'Ŝ' => 'ŝ',
+ 'Ş' => 'ş',
+ 'Š' => 'š',
+ 'Ţ' => 'ţ',
+ 'Ť' => 'ť',
+ 'Ŧ' => 'ŧ',
+ 'Ũ' => 'ũ',
+ 'Ū' => 'ū',
+ 'Ŭ' => 'ŭ',
+ 'Ů' => 'ů',
+ 'Ű' => 'ű',
+ 'Ų' => 'ų',
+ 'Ŵ' => 'ŵ',
+ 'Ŷ' => 'ŷ',
+ 'Ÿ' => 'ÿ',
+ 'Ź' => 'ź',
+ 'Ż' => 'ż',
+ 'Ž' => 'ž',
+ 'Ɓ' => 'ɓ',
+ 'Ƃ' => 'ƃ',
+ 'Ƅ' => 'ƅ',
+ 'Ɔ' => 'ɔ',
+ 'Ƈ' => 'ƈ',
+ 'Ɖ' => 'ɖ',
+ 'Ɗ' => 'ɗ',
+ 'Ƌ' => 'ƌ',
+ 'Ǝ' => 'ǝ',
+ 'Ə' => 'ə',
+ 'Ɛ' => 'ɛ',
+ 'Ƒ' => 'ƒ',
+ 'Ɠ' => 'ɠ',
+ 'Ɣ' => 'ɣ',
+ 'Ɩ' => 'ɩ',
+ 'Ɨ' => 'ɨ',
+ 'Ƙ' => 'ƙ',
+ 'Ɯ' => 'ɯ',
+ 'Ɲ' => 'ɲ',
+ 'Ɵ' => 'ɵ',
+ 'Ơ' => 'ơ',
+ 'Ƣ' => 'ƣ',
+ 'Ƥ' => 'ƥ',
+ 'Ʀ' => 'ʀ',
+ 'Ƨ' => 'ƨ',
+ 'Ʃ' => 'ʃ',
+ 'Ƭ' => 'ƭ',
+ 'Ʈ' => 'ʈ',
+ 'Ư' => 'ư',
+ 'Ʊ' => 'ʊ',
+ 'Ʋ' => 'ʋ',
+ 'Ƴ' => 'ƴ',
+ 'Ƶ' => 'ƶ',
+ 'Ʒ' => 'ʒ',
+ 'Ƹ' => 'ƹ',
+ 'Ƽ' => 'ƽ',
+ 'DŽ' => 'dž',
+ 'Dž' => 'dž',
+ 'LJ' => 'lj',
+ 'Lj' => 'lj',
+ 'NJ' => 'nj',
+ 'Nj' => 'nj',
+ 'Ǎ' => 'ǎ',
+ 'Ǐ' => 'ǐ',
+ 'Ǒ' => 'ǒ',
+ 'Ǔ' => 'ǔ',
+ 'Ǖ' => 'ǖ',
+ 'Ǘ' => 'ǘ',
+ 'Ǚ' => 'ǚ',
+ 'Ǜ' => 'ǜ',
+ 'Ǟ' => 'ǟ',
+ 'Ǡ' => 'ǡ',
+ 'Ǣ' => 'ǣ',
+ 'Ǥ' => 'ǥ',
+ 'Ǧ' => 'ǧ',
+ 'Ǩ' => 'ǩ',
+ 'Ǫ' => 'ǫ',
+ 'Ǭ' => 'ǭ',
+ 'Ǯ' => 'ǯ',
+ 'DZ' => 'dz',
+ 'Dz' => 'dz',
+ 'Ǵ' => 'ǵ',
+ 'Ƕ' => 'ƕ',
+ 'Ƿ' => 'ƿ',
+ 'Ǹ' => 'ǹ',
+ 'Ǻ' => 'ǻ',
+ 'Ǽ' => 'ǽ',
+ 'Ǿ' => 'ǿ',
+ 'Ȁ' => 'ȁ',
+ 'Ȃ' => 'ȃ',
+ 'Ȅ' => 'ȅ',
+ 'Ȇ' => 'ȇ',
+ 'Ȉ' => 'ȉ',
+ 'Ȋ' => 'ȋ',
+ 'Ȍ' => 'ȍ',
+ 'Ȏ' => 'ȏ',
+ 'Ȑ' => 'ȑ',
+ 'Ȓ' => 'ȓ',
+ 'Ȕ' => 'ȕ',
+ 'Ȗ' => 'ȗ',
+ 'Ș' => 'ș',
+ 'Ț' => 'ț',
+ 'Ȝ' => 'ȝ',
+ 'Ȟ' => 'ȟ',
+ 'Ƞ' => 'ƞ',
+ 'Ȣ' => 'ȣ',
+ 'Ȥ' => 'ȥ',
+ 'Ȧ' => 'ȧ',
+ 'Ȩ' => 'ȩ',
+ 'Ȫ' => 'ȫ',
+ 'Ȭ' => 'ȭ',
+ 'Ȯ' => 'ȯ',
+ 'Ȱ' => 'ȱ',
+ 'Ȳ' => 'ȳ',
+ 'Ⱥ' => 'ⱥ',
+ 'Ȼ' => 'ȼ',
+ 'Ƚ' => 'ƚ',
+ 'Ⱦ' => 'ⱦ',
+ 'Ɂ' => 'ɂ',
+ 'Ƀ' => 'ƀ',
+ 'Ʉ' => 'ʉ',
+ 'Ʌ' => 'ʌ',
+ 'Ɇ' => 'ɇ',
+ 'Ɉ' => 'ɉ',
+ 'Ɋ' => 'ɋ',
+ 'Ɍ' => 'ɍ',
+ 'Ɏ' => 'ɏ',
+ 'Ͱ' => 'ͱ',
+ 'Ͳ' => 'ͳ',
+ 'Ͷ' => 'ͷ',
+ 'Ϳ' => 'ϳ',
+ 'Ά' => 'ά',
+ 'Έ' => 'έ',
+ 'Ή' => 'ή',
+ 'Ί' => 'ί',
+ 'Ό' => 'ό',
+ 'Ύ' => 'ύ',
+ 'Ώ' => 'ώ',
+ 'Α' => 'α',
+ 'Β' => 'β',
+ 'Γ' => 'γ',
+ 'Δ' => 'δ',
+ 'Ε' => 'ε',
+ 'Ζ' => 'ζ',
+ 'Η' => 'η',
+ 'Θ' => 'θ',
+ 'Ι' => 'ι',
+ 'Κ' => 'κ',
+ 'Λ' => 'λ',
+ 'Μ' => 'μ',
+ 'Ν' => 'ν',
+ 'Ξ' => 'ξ',
+ 'Ο' => 'ο',
+ 'Π' => 'π',
+ 'Ρ' => 'ρ',
+ 'Σ' => 'σ',
+ 'Τ' => 'τ',
+ 'Υ' => 'υ',
+ 'Φ' => 'φ',
+ 'Χ' => 'χ',
+ 'Ψ' => 'ψ',
+ 'Ω' => 'ω',
+ 'Ϊ' => 'ϊ',
+ 'Ϋ' => 'ϋ',
+ 'Ϗ' => 'ϗ',
+ 'Ϙ' => 'ϙ',
+ 'Ϛ' => 'ϛ',
+ 'Ϝ' => 'ϝ',
+ 'Ϟ' => 'ϟ',
+ 'Ϡ' => 'ϡ',
+ 'Ϣ' => 'ϣ',
+ 'Ϥ' => 'ϥ',
+ 'Ϧ' => 'ϧ',
+ 'Ϩ' => 'ϩ',
+ 'Ϫ' => 'ϫ',
+ 'Ϭ' => 'ϭ',
+ 'Ϯ' => 'ϯ',
+ 'ϴ' => 'θ',
+ 'Ϸ' => 'ϸ',
+ 'Ϲ' => 'ϲ',
+ 'Ϻ' => 'ϻ',
+ 'Ͻ' => 'ͻ',
+ 'Ͼ' => 'ͼ',
+ 'Ͽ' => 'ͽ',
+ 'Ѐ' => 'ѐ',
+ 'Ё' => 'ё',
+ 'Ђ' => 'ђ',
+ 'Ѓ' => 'ѓ',
+ 'Є' => 'є',
+ 'Ѕ' => 'ѕ',
+ 'І' => 'і',
+ 'Ї' => 'ї',
+ 'Ј' => 'ј',
+ 'Љ' => 'љ',
+ 'Њ' => 'њ',
+ 'Ћ' => 'ћ',
+ 'Ќ' => 'ќ',
+ 'Ѝ' => 'ѝ',
+ 'Ў' => 'ў',
+ 'Џ' => 'џ',
+ 'А' => 'а',
+ 'Б' => 'б',
+ 'В' => 'в',
+ 'Г' => 'г',
+ 'Д' => 'д',
+ 'Е' => 'е',
+ 'Ж' => 'ж',
+ 'З' => 'з',
+ 'И' => 'и',
+ 'Й' => 'й',
+ 'К' => 'к',
+ 'Л' => 'л',
+ 'М' => 'м',
+ 'Н' => 'н',
+ 'О' => 'о',
+ 'П' => 'п',
+ 'Р' => 'р',
+ 'С' => 'с',
+ 'Т' => 'т',
+ 'У' => 'у',
+ 'Ф' => 'ф',
+ 'Х' => 'х',
+ 'Ц' => 'ц',
+ 'Ч' => 'ч',
+ 'Ш' => 'ш',
+ 'Щ' => 'щ',
+ 'Ъ' => 'ъ',
+ 'Ы' => 'ы',
+ 'Ь' => 'ь',
+ 'Э' => 'э',
+ 'Ю' => 'ю',
+ 'Я' => 'я',
+ 'Ѡ' => 'ѡ',
+ 'Ѣ' => 'ѣ',
+ 'Ѥ' => 'ѥ',
+ 'Ѧ' => 'ѧ',
+ 'Ѩ' => 'ѩ',
+ 'Ѫ' => 'ѫ',
+ 'Ѭ' => 'ѭ',
+ 'Ѯ' => 'ѯ',
+ 'Ѱ' => 'ѱ',
+ 'Ѳ' => 'ѳ',
+ 'Ѵ' => 'ѵ',
+ 'Ѷ' => 'ѷ',
+ 'Ѹ' => 'ѹ',
+ 'Ѻ' => 'ѻ',
+ 'Ѽ' => 'ѽ',
+ 'Ѿ' => 'ѿ',
+ 'Ҁ' => 'ҁ',
+ 'Ҋ' => 'ҋ',
+ 'Ҍ' => 'ҍ',
+ 'Ҏ' => 'ҏ',
+ 'Ґ' => 'ґ',
+ 'Ғ' => 'ғ',
+ 'Ҕ' => 'ҕ',
+ 'Җ' => 'җ',
+ 'Ҙ' => 'ҙ',
+ 'Қ' => 'қ',
+ 'Ҝ' => 'ҝ',
+ 'Ҟ' => 'ҟ',
+ 'Ҡ' => 'ҡ',
+ 'Ң' => 'ң',
+ 'Ҥ' => 'ҥ',
+ 'Ҧ' => 'ҧ',
+ 'Ҩ' => 'ҩ',
+ 'Ҫ' => 'ҫ',
+ 'Ҭ' => 'ҭ',
+ 'Ү' => 'ү',
+ 'Ұ' => 'ұ',
+ 'Ҳ' => 'ҳ',
+ 'Ҵ' => 'ҵ',
+ 'Ҷ' => 'ҷ',
+ 'Ҹ' => 'ҹ',
+ 'Һ' => 'һ',
+ 'Ҽ' => 'ҽ',
+ 'Ҿ' => 'ҿ',
+ 'Ӏ' => 'ӏ',
+ 'Ӂ' => 'ӂ',
+ 'Ӄ' => 'ӄ',
+ 'Ӆ' => 'ӆ',
+ 'Ӈ' => 'ӈ',
+ 'Ӊ' => 'ӊ',
+ 'Ӌ' => 'ӌ',
+ 'Ӎ' => 'ӎ',
+ 'Ӑ' => 'ӑ',
+ 'Ӓ' => 'ӓ',
+ 'Ӕ' => 'ӕ',
+ 'Ӗ' => 'ӗ',
+ 'Ә' => 'ә',
+ 'Ӛ' => 'ӛ',
+ 'Ӝ' => 'ӝ',
+ 'Ӟ' => 'ӟ',
+ 'Ӡ' => 'ӡ',
+ 'Ӣ' => 'ӣ',
+ 'Ӥ' => 'ӥ',
+ 'Ӧ' => 'ӧ',
+ 'Ө' => 'ө',
+ 'Ӫ' => 'ӫ',
+ 'Ӭ' => 'ӭ',
+ 'Ӯ' => 'ӯ',
+ 'Ӱ' => 'ӱ',
+ 'Ӳ' => 'ӳ',
+ 'Ӵ' => 'ӵ',
+ 'Ӷ' => 'ӷ',
+ 'Ӹ' => 'ӹ',
+ 'Ӻ' => 'ӻ',
+ 'Ӽ' => 'ӽ',
+ 'Ӿ' => 'ӿ',
+ 'Ԁ' => 'ԁ',
+ 'Ԃ' => 'ԃ',
+ 'Ԅ' => 'ԅ',
+ 'Ԇ' => 'ԇ',
+ 'Ԉ' => 'ԉ',
+ 'Ԋ' => 'ԋ',
+ 'Ԍ' => 'ԍ',
+ 'Ԏ' => 'ԏ',
+ 'Ԑ' => 'ԑ',
+ 'Ԓ' => 'ԓ',
+ 'Ԕ' => 'ԕ',
+ 'Ԗ' => 'ԗ',
+ 'Ԙ' => 'ԙ',
+ 'Ԛ' => 'ԛ',
+ 'Ԝ' => 'ԝ',
+ 'Ԟ' => 'ԟ',
+ 'Ԡ' => 'ԡ',
+ 'Ԣ' => 'ԣ',
+ 'Ԥ' => 'ԥ',
+ 'Ԧ' => 'ԧ',
+ 'Ԩ' => 'ԩ',
+ 'Ԫ' => 'ԫ',
+ 'Ԭ' => 'ԭ',
+ 'Ԯ' => 'ԯ',
+ 'Ա' => 'ա',
+ 'Բ' => 'բ',
+ 'Գ' => 'գ',
+ 'Դ' => 'դ',
+ 'Ե' => 'ե',
+ 'Զ' => 'զ',
+ 'Է' => 'է',
+ 'Ը' => 'ը',
+ 'Թ' => 'թ',
+ 'Ժ' => 'ժ',
+ 'Ի' => 'ի',
+ 'Լ' => 'լ',
+ 'Խ' => 'խ',
+ 'Ծ' => 'ծ',
+ 'Կ' => 'կ',
+ 'Հ' => 'հ',
+ 'Ձ' => 'ձ',
+ 'Ղ' => 'ղ',
+ 'Ճ' => 'ճ',
+ 'Մ' => 'մ',
+ 'Յ' => 'յ',
+ 'Ն' => 'ն',
+ 'Շ' => 'շ',
+ 'Ո' => 'ո',
+ 'Չ' => 'չ',
+ 'Պ' => 'պ',
+ 'Ջ' => 'ջ',
+ 'Ռ' => 'ռ',
+ 'Ս' => 'ս',
+ 'Վ' => 'վ',
+ 'Տ' => 'տ',
+ 'Ր' => 'ր',
+ 'Ց' => 'ց',
+ 'Ւ' => 'ւ',
+ 'Փ' => 'փ',
+ 'Ք' => 'ք',
+ 'Օ' => 'օ',
+ 'Ֆ' => 'ֆ',
+ 'Ⴀ' => 'ⴀ',
+ 'Ⴁ' => 'ⴁ',
+ 'Ⴂ' => 'ⴂ',
+ 'Ⴃ' => 'ⴃ',
+ 'Ⴄ' => 'ⴄ',
+ 'Ⴅ' => 'ⴅ',
+ 'Ⴆ' => 'ⴆ',
+ 'Ⴇ' => 'ⴇ',
+ 'Ⴈ' => 'ⴈ',
+ 'Ⴉ' => 'ⴉ',
+ 'Ⴊ' => 'ⴊ',
+ 'Ⴋ' => 'ⴋ',
+ 'Ⴌ' => 'ⴌ',
+ 'Ⴍ' => 'ⴍ',
+ 'Ⴎ' => 'ⴎ',
+ 'Ⴏ' => 'ⴏ',
+ 'Ⴐ' => 'ⴐ',
+ 'Ⴑ' => 'ⴑ',
+ 'Ⴒ' => 'ⴒ',
+ 'Ⴓ' => 'ⴓ',
+ 'Ⴔ' => 'ⴔ',
+ 'Ⴕ' => 'ⴕ',
+ 'Ⴖ' => 'ⴖ',
+ 'Ⴗ' => 'ⴗ',
+ 'Ⴘ' => 'ⴘ',
+ 'Ⴙ' => 'ⴙ',
+ 'Ⴚ' => 'ⴚ',
+ 'Ⴛ' => 'ⴛ',
+ 'Ⴜ' => 'ⴜ',
+ 'Ⴝ' => 'ⴝ',
+ 'Ⴞ' => 'ⴞ',
+ 'Ⴟ' => 'ⴟ',
+ 'Ⴠ' => 'ⴠ',
+ 'Ⴡ' => 'ⴡ',
+ 'Ⴢ' => 'ⴢ',
+ 'Ⴣ' => 'ⴣ',
+ 'Ⴤ' => 'ⴤ',
+ 'Ⴥ' => 'ⴥ',
+ 'Ⴧ' => 'ⴧ',
+ 'Ⴭ' => 'ⴭ',
+ 'Ḁ' => 'ḁ',
+ 'Ḃ' => 'ḃ',
+ 'Ḅ' => 'ḅ',
+ 'Ḇ' => 'ḇ',
+ 'Ḉ' => 'ḉ',
+ 'Ḋ' => 'ḋ',
+ 'Ḍ' => 'ḍ',
+ 'Ḏ' => 'ḏ',
+ 'Ḑ' => 'ḑ',
+ 'Ḓ' => 'ḓ',
+ 'Ḕ' => 'ḕ',
+ 'Ḗ' => 'ḗ',
+ 'Ḙ' => 'ḙ',
+ 'Ḛ' => 'ḛ',
+ 'Ḝ' => 'ḝ',
+ 'Ḟ' => 'ḟ',
+ 'Ḡ' => 'ḡ',
+ 'Ḣ' => 'ḣ',
+ 'Ḥ' => 'ḥ',
+ 'Ḧ' => 'ḧ',
+ 'Ḩ' => 'ḩ',
+ 'Ḫ' => 'ḫ',
+ 'Ḭ' => 'ḭ',
+ 'Ḯ' => 'ḯ',
+ 'Ḱ' => 'ḱ',
+ 'Ḳ' => 'ḳ',
+ 'Ḵ' => 'ḵ',
+ 'Ḷ' => 'ḷ',
+ 'Ḹ' => 'ḹ',
+ 'Ḻ' => 'ḻ',
+ 'Ḽ' => 'ḽ',
+ 'Ḿ' => 'ḿ',
+ 'Ṁ' => 'ṁ',
+ 'Ṃ' => 'ṃ',
+ 'Ṅ' => 'ṅ',
+ 'Ṇ' => 'ṇ',
+ 'Ṉ' => 'ṉ',
+ 'Ṋ' => 'ṋ',
+ 'Ṍ' => 'ṍ',
+ 'Ṏ' => 'ṏ',
+ 'Ṑ' => 'ṑ',
+ 'Ṓ' => 'ṓ',
+ 'Ṕ' => 'ṕ',
+ 'Ṗ' => 'ṗ',
+ 'Ṙ' => 'ṙ',
+ 'Ṛ' => 'ṛ',
+ 'Ṝ' => 'ṝ',
+ 'Ṟ' => 'ṟ',
+ 'Ṡ' => 'ṡ',
+ 'Ṣ' => 'ṣ',
+ 'Ṥ' => 'ṥ',
+ 'Ṧ' => 'ṧ',
+ 'Ṩ' => 'ṩ',
+ 'Ṫ' => 'ṫ',
+ 'Ṭ' => 'ṭ',
+ 'Ṯ' => 'ṯ',
+ 'Ṱ' => 'ṱ',
+ 'Ṳ' => 'ṳ',
+ 'Ṵ' => 'ṵ',
+ 'Ṷ' => 'ṷ',
+ 'Ṹ' => 'ṹ',
+ 'Ṻ' => 'ṻ',
+ 'Ṽ' => 'ṽ',
+ 'Ṿ' => 'ṿ',
+ 'Ẁ' => 'ẁ',
+ 'Ẃ' => 'ẃ',
+ 'Ẅ' => 'ẅ',
+ 'Ẇ' => 'ẇ',
+ 'Ẉ' => 'ẉ',
+ 'Ẋ' => 'ẋ',
+ 'Ẍ' => 'ẍ',
+ 'Ẏ' => 'ẏ',
+ 'Ẑ' => 'ẑ',
+ 'Ẓ' => 'ẓ',
+ 'Ẕ' => 'ẕ',
+ 'ẞ' => 'ß',
+ 'Ạ' => 'ạ',
+ 'Ả' => 'ả',
+ 'Ấ' => 'ấ',
+ 'Ầ' => 'ầ',
+ 'Ẩ' => 'ẩ',
+ 'Ẫ' => 'ẫ',
+ 'Ậ' => 'ậ',
+ 'Ắ' => 'ắ',
+ 'Ằ' => 'ằ',
+ 'Ẳ' => 'ẳ',
+ 'Ẵ' => 'ẵ',
+ 'Ặ' => 'ặ',
+ 'Ẹ' => 'ẹ',
+ 'Ẻ' => 'ẻ',
+ 'Ẽ' => 'ẽ',
+ 'Ế' => 'ế',
+ 'Ề' => 'ề',
+ 'Ể' => 'ể',
+ 'Ễ' => 'ễ',
+ 'Ệ' => 'ệ',
+ 'Ỉ' => 'ỉ',
+ 'Ị' => 'ị',
+ 'Ọ' => 'ọ',
+ 'Ỏ' => 'ỏ',
+ 'Ố' => 'ố',
+ 'Ồ' => 'ồ',
+ 'Ổ' => 'ổ',
+ 'Ỗ' => 'ỗ',
+ 'Ộ' => 'ộ',
+ 'Ớ' => 'ớ',
+ 'Ờ' => 'ờ',
+ 'Ở' => 'ở',
+ 'Ỡ' => 'ỡ',
+ 'Ợ' => 'ợ',
+ 'Ụ' => 'ụ',
+ 'Ủ' => 'ủ',
+ 'Ứ' => 'ứ',
+ 'Ừ' => 'ừ',
+ 'Ử' => 'ử',
+ 'Ữ' => 'ữ',
+ 'Ự' => 'ự',
+ 'Ỳ' => 'ỳ',
+ 'Ỵ' => 'ỵ',
+ 'Ỷ' => 'ỷ',
+ 'Ỹ' => 'ỹ',
+ 'Ỻ' => 'ỻ',
+ 'Ỽ' => 'ỽ',
+ 'Ỿ' => 'ỿ',
+ 'Ἀ' => 'ἀ',
+ 'Ἁ' => 'ἁ',
+ 'Ἂ' => 'ἂ',
+ 'Ἃ' => 'ἃ',
+ 'Ἄ' => 'ἄ',
+ 'Ἅ' => 'ἅ',
+ 'Ἆ' => 'ἆ',
+ 'Ἇ' => 'ἇ',
+ 'Ἐ' => 'ἐ',
+ 'Ἑ' => 'ἑ',
+ 'Ἒ' => 'ἒ',
+ 'Ἓ' => 'ἓ',
+ 'Ἔ' => 'ἔ',
+ 'Ἕ' => 'ἕ',
+ 'Ἠ' => 'ἠ',
+ 'Ἡ' => 'ἡ',
+ 'Ἢ' => 'ἢ',
+ 'Ἣ' => 'ἣ',
+ 'Ἤ' => 'ἤ',
+ 'Ἥ' => 'ἥ',
+ 'Ἦ' => 'ἦ',
+ 'Ἧ' => 'ἧ',
+ 'Ἰ' => 'ἰ',
+ 'Ἱ' => 'ἱ',
+ 'Ἲ' => 'ἲ',
+ 'Ἳ' => 'ἳ',
+ 'Ἴ' => 'ἴ',
+ 'Ἵ' => 'ἵ',
+ 'Ἶ' => 'ἶ',
+ 'Ἷ' => 'ἷ',
+ 'Ὀ' => 'ὀ',
+ 'Ὁ' => 'ὁ',
+ 'Ὂ' => 'ὂ',
+ 'Ὃ' => 'ὃ',
+ 'Ὄ' => 'ὄ',
+ 'Ὅ' => 'ὅ',
+ 'Ὑ' => 'ὑ',
+ 'Ὓ' => 'ὓ',
+ 'Ὕ' => 'ὕ',
+ 'Ὗ' => 'ὗ',
+ 'Ὠ' => 'ὠ',
+ 'Ὡ' => 'ὡ',
+ 'Ὢ' => 'ὢ',
+ 'Ὣ' => 'ὣ',
+ 'Ὤ' => 'ὤ',
+ 'Ὥ' => 'ὥ',
+ 'Ὦ' => 'ὦ',
+ 'Ὧ' => 'ὧ',
+ 'ᾈ' => 'ᾀ',
+ 'ᾉ' => 'ᾁ',
+ 'ᾊ' => 'ᾂ',
+ 'ᾋ' => 'ᾃ',
+ 'ᾌ' => 'ᾄ',
+ 'ᾍ' => 'ᾅ',
+ 'ᾎ' => 'ᾆ',
+ 'ᾏ' => 'ᾇ',
+ 'ᾘ' => 'ᾐ',
+ 'ᾙ' => 'ᾑ',
+ 'ᾚ' => 'ᾒ',
+ 'ᾛ' => 'ᾓ',
+ 'ᾜ' => 'ᾔ',
+ 'ᾝ' => 'ᾕ',
+ 'ᾞ' => 'ᾖ',
+ 'ᾟ' => 'ᾗ',
+ 'ᾨ' => 'ᾠ',
+ 'ᾩ' => 'ᾡ',
+ 'ᾪ' => 'ᾢ',
+ 'ᾫ' => 'ᾣ',
+ 'ᾬ' => 'ᾤ',
+ 'ᾭ' => 'ᾥ',
+ 'ᾮ' => 'ᾦ',
+ 'ᾯ' => 'ᾧ',
+ 'Ᾰ' => 'ᾰ',
+ 'Ᾱ' => 'ᾱ',
+ 'Ὰ' => 'ὰ',
+ 'Ά' => 'ά',
+ 'ᾼ' => 'ᾳ',
+ 'Ὲ' => 'ὲ',
+ 'Έ' => 'έ',
+ 'Ὴ' => 'ὴ',
+ 'Ή' => 'ή',
+ 'ῌ' => 'ῃ',
+ 'Ῐ' => 'ῐ',
+ 'Ῑ' => 'ῑ',
+ 'Ὶ' => 'ὶ',
+ 'Ί' => 'ί',
+ 'Ῠ' => 'ῠ',
+ 'Ῡ' => 'ῡ',
+ 'Ὺ' => 'ὺ',
+ 'Ύ' => 'ύ',
+ 'Ῥ' => 'ῥ',
+ 'Ὸ' => 'ὸ',
+ 'Ό' => 'ό',
+ 'Ὼ' => 'ὼ',
+ 'Ώ' => 'ώ',
+ 'ῼ' => 'ῳ',
+ 'Ω' => 'ω',
+ 'K' => 'k',
+ 'Å' => 'å',
+ 'Ⅎ' => 'ⅎ',
+ 'Ⅰ' => 'ⅰ',
+ 'Ⅱ' => 'ⅱ',
+ 'Ⅲ' => 'ⅲ',
+ 'Ⅳ' => 'ⅳ',
+ 'Ⅴ' => 'ⅴ',
+ 'Ⅵ' => 'ⅵ',
+ 'Ⅶ' => 'ⅶ',
+ 'Ⅷ' => 'ⅷ',
+ 'Ⅸ' => 'ⅸ',
+ 'Ⅹ' => 'ⅹ',
+ 'Ⅺ' => 'ⅺ',
+ 'Ⅻ' => 'ⅻ',
+ 'Ⅼ' => 'ⅼ',
+ 'Ⅽ' => 'ⅽ',
+ 'Ⅾ' => 'ⅾ',
+ 'Ⅿ' => 'ⅿ',
+ 'Ↄ' => 'ↄ',
+ 'Ⓐ' => 'ⓐ',
+ 'Ⓑ' => 'ⓑ',
+ 'Ⓒ' => 'ⓒ',
+ 'Ⓓ' => 'ⓓ',
+ 'Ⓔ' => 'ⓔ',
+ 'Ⓕ' => 'ⓕ',
+ 'Ⓖ' => 'ⓖ',
+ 'Ⓗ' => 'ⓗ',
+ 'Ⓘ' => 'ⓘ',
+ 'Ⓙ' => 'ⓙ',
+ 'Ⓚ' => 'ⓚ',
+ 'Ⓛ' => 'ⓛ',
+ 'Ⓜ' => 'ⓜ',
+ 'Ⓝ' => 'ⓝ',
+ 'Ⓞ' => 'ⓞ',
+ 'Ⓟ' => 'ⓟ',
+ 'Ⓠ' => 'ⓠ',
+ 'Ⓡ' => 'ⓡ',
+ 'Ⓢ' => 'ⓢ',
+ 'Ⓣ' => 'ⓣ',
+ 'Ⓤ' => 'ⓤ',
+ 'Ⓥ' => 'ⓥ',
+ 'Ⓦ' => 'ⓦ',
+ 'Ⓧ' => 'ⓧ',
+ 'Ⓨ' => 'ⓨ',
+ 'Ⓩ' => 'ⓩ',
+ 'Ⰰ' => 'ⰰ',
+ 'Ⰱ' => 'ⰱ',
+ 'Ⰲ' => 'ⰲ',
+ 'Ⰳ' => 'ⰳ',
+ 'Ⰴ' => 'ⰴ',
+ 'Ⰵ' => 'ⰵ',
+ 'Ⰶ' => 'ⰶ',
+ 'Ⰷ' => 'ⰷ',
+ 'Ⰸ' => 'ⰸ',
+ 'Ⰹ' => 'ⰹ',
+ 'Ⰺ' => 'ⰺ',
+ 'Ⰻ' => 'ⰻ',
+ 'Ⰼ' => 'ⰼ',
+ 'Ⰽ' => 'ⰽ',
+ 'Ⰾ' => 'ⰾ',
+ 'Ⰿ' => 'ⰿ',
+ 'Ⱀ' => 'ⱀ',
+ 'Ⱁ' => 'ⱁ',
+ 'Ⱂ' => 'ⱂ',
+ 'Ⱃ' => 'ⱃ',
+ 'Ⱄ' => 'ⱄ',
+ 'Ⱅ' => 'ⱅ',
+ 'Ⱆ' => 'ⱆ',
+ 'Ⱇ' => 'ⱇ',
+ 'Ⱈ' => 'ⱈ',
+ 'Ⱉ' => 'ⱉ',
+ 'Ⱊ' => 'ⱊ',
+ 'Ⱋ' => 'ⱋ',
+ 'Ⱌ' => 'ⱌ',
+ 'Ⱍ' => 'ⱍ',
+ 'Ⱎ' => 'ⱎ',
+ 'Ⱏ' => 'ⱏ',
+ 'Ⱐ' => 'ⱐ',
+ 'Ⱑ' => 'ⱑ',
+ 'Ⱒ' => 'ⱒ',
+ 'Ⱓ' => 'ⱓ',
+ 'Ⱔ' => 'ⱔ',
+ 'Ⱕ' => 'ⱕ',
+ 'Ⱖ' => 'ⱖ',
+ 'Ⱗ' => 'ⱗ',
+ 'Ⱘ' => 'ⱘ',
+ 'Ⱙ' => 'ⱙ',
+ 'Ⱚ' => 'ⱚ',
+ 'Ⱛ' => 'ⱛ',
+ 'Ⱜ' => 'ⱜ',
+ 'Ⱝ' => 'ⱝ',
+ 'Ⱞ' => 'ⱞ',
+ 'Ⱡ' => 'ⱡ',
+ 'Ɫ' => 'ɫ',
+ 'Ᵽ' => 'ᵽ',
+ 'Ɽ' => 'ɽ',
+ 'Ⱨ' => 'ⱨ',
+ 'Ⱪ' => 'ⱪ',
+ 'Ⱬ' => 'ⱬ',
+ 'Ɑ' => 'ɑ',
+ 'Ɱ' => 'ɱ',
+ 'Ɐ' => 'ɐ',
+ 'Ɒ' => 'ɒ',
+ 'Ⱳ' => 'ⱳ',
+ 'Ⱶ' => 'ⱶ',
+ 'Ȿ' => 'ȿ',
+ 'Ɀ' => 'ɀ',
+ 'Ⲁ' => 'ⲁ',
+ 'Ⲃ' => 'ⲃ',
+ 'Ⲅ' => 'ⲅ',
+ 'Ⲇ' => 'ⲇ',
+ 'Ⲉ' => 'ⲉ',
+ 'Ⲋ' => 'ⲋ',
+ 'Ⲍ' => 'ⲍ',
+ 'Ⲏ' => 'ⲏ',
+ 'Ⲑ' => 'ⲑ',
+ 'Ⲓ' => 'ⲓ',
+ 'Ⲕ' => 'ⲕ',
+ 'Ⲗ' => 'ⲗ',
+ 'Ⲙ' => 'ⲙ',
+ 'Ⲛ' => 'ⲛ',
+ 'Ⲝ' => 'ⲝ',
+ 'Ⲟ' => 'ⲟ',
+ 'Ⲡ' => 'ⲡ',
+ 'Ⲣ' => 'ⲣ',
+ 'Ⲥ' => 'ⲥ',
+ 'Ⲧ' => 'ⲧ',
+ 'Ⲩ' => 'ⲩ',
+ 'Ⲫ' => 'ⲫ',
+ 'Ⲭ' => 'ⲭ',
+ 'Ⲯ' => 'ⲯ',
+ 'Ⲱ' => 'ⲱ',
+ 'Ⲳ' => 'ⲳ',
+ 'Ⲵ' => 'ⲵ',
+ 'Ⲷ' => 'ⲷ',
+ 'Ⲹ' => 'ⲹ',
+ 'Ⲻ' => 'ⲻ',
+ 'Ⲽ' => 'ⲽ',
+ 'Ⲿ' => 'ⲿ',
+ 'Ⳁ' => 'ⳁ',
+ 'Ⳃ' => 'ⳃ',
+ 'Ⳅ' => 'ⳅ',
+ 'Ⳇ' => 'ⳇ',
+ 'Ⳉ' => 'ⳉ',
+ 'Ⳋ' => 'ⳋ',
+ 'Ⳍ' => 'ⳍ',
+ 'Ⳏ' => 'ⳏ',
+ 'Ⳑ' => 'ⳑ',
+ 'Ⳓ' => 'ⳓ',
+ 'Ⳕ' => 'ⳕ',
+ 'Ⳗ' => 'ⳗ',
+ 'Ⳙ' => 'ⳙ',
+ 'Ⳛ' => 'ⳛ',
+ 'Ⳝ' => 'ⳝ',
+ 'Ⳟ' => 'ⳟ',
+ 'Ⳡ' => 'ⳡ',
+ 'Ⳣ' => 'ⳣ',
+ 'Ⳬ' => 'ⳬ',
+ 'Ⳮ' => 'ⳮ',
+ 'Ⳳ' => 'ⳳ',
+ 'Ꙁ' => 'ꙁ',
+ 'Ꙃ' => 'ꙃ',
+ 'Ꙅ' => 'ꙅ',
+ 'Ꙇ' => 'ꙇ',
+ 'Ꙉ' => 'ꙉ',
+ 'Ꙋ' => 'ꙋ',
+ 'Ꙍ' => 'ꙍ',
+ 'Ꙏ' => 'ꙏ',
+ 'Ꙑ' => 'ꙑ',
+ 'Ꙓ' => 'ꙓ',
+ 'Ꙕ' => 'ꙕ',
+ 'Ꙗ' => 'ꙗ',
+ 'Ꙙ' => 'ꙙ',
+ 'Ꙛ' => 'ꙛ',
+ 'Ꙝ' => 'ꙝ',
+ 'Ꙟ' => 'ꙟ',
+ 'Ꙡ' => 'ꙡ',
+ 'Ꙣ' => 'ꙣ',
+ 'Ꙥ' => 'ꙥ',
+ 'Ꙧ' => 'ꙧ',
+ 'Ꙩ' => 'ꙩ',
+ 'Ꙫ' => 'ꙫ',
+ 'Ꙭ' => 'ꙭ',
+ 'Ꚁ' => 'ꚁ',
+ 'Ꚃ' => 'ꚃ',
+ 'Ꚅ' => 'ꚅ',
+ 'Ꚇ' => 'ꚇ',
+ 'Ꚉ' => 'ꚉ',
+ 'Ꚋ' => 'ꚋ',
+ 'Ꚍ' => 'ꚍ',
+ 'Ꚏ' => 'ꚏ',
+ 'Ꚑ' => 'ꚑ',
+ 'Ꚓ' => 'ꚓ',
+ 'Ꚕ' => 'ꚕ',
+ 'Ꚗ' => 'ꚗ',
+ 'Ꚙ' => 'ꚙ',
+ 'Ꚛ' => 'ꚛ',
+ 'Ꜣ' => 'ꜣ',
+ 'Ꜥ' => 'ꜥ',
+ 'Ꜧ' => 'ꜧ',
+ 'Ꜩ' => 'ꜩ',
+ 'Ꜫ' => 'ꜫ',
+ 'Ꜭ' => 'ꜭ',
+ 'Ꜯ' => 'ꜯ',
+ 'Ꜳ' => 'ꜳ',
+ 'Ꜵ' => 'ꜵ',
+ 'Ꜷ' => 'ꜷ',
+ 'Ꜹ' => 'ꜹ',
+ 'Ꜻ' => 'ꜻ',
+ 'Ꜽ' => 'ꜽ',
+ 'Ꜿ' => 'ꜿ',
+ 'Ꝁ' => 'ꝁ',
+ 'Ꝃ' => 'ꝃ',
+ 'Ꝅ' => 'ꝅ',
+ 'Ꝇ' => 'ꝇ',
+ 'Ꝉ' => 'ꝉ',
+ 'Ꝋ' => 'ꝋ',
+ 'Ꝍ' => 'ꝍ',
+ 'Ꝏ' => 'ꝏ',
+ 'Ꝑ' => 'ꝑ',
+ 'Ꝓ' => 'ꝓ',
+ 'Ꝕ' => 'ꝕ',
+ 'Ꝗ' => 'ꝗ',
+ 'Ꝙ' => 'ꝙ',
+ 'Ꝛ' => 'ꝛ',
+ 'Ꝝ' => 'ꝝ',
+ 'Ꝟ' => 'ꝟ',
+ 'Ꝡ' => 'ꝡ',
+ 'Ꝣ' => 'ꝣ',
+ 'Ꝥ' => 'ꝥ',
+ 'Ꝧ' => 'ꝧ',
+ 'Ꝩ' => 'ꝩ',
+ 'Ꝫ' => 'ꝫ',
+ 'Ꝭ' => 'ꝭ',
+ 'Ꝯ' => 'ꝯ',
+ 'Ꝺ' => 'ꝺ',
+ 'Ꝼ' => 'ꝼ',
+ 'Ᵹ' => 'ᵹ',
+ 'Ꝿ' => 'ꝿ',
+ 'Ꞁ' => 'ꞁ',
+ 'Ꞃ' => 'ꞃ',
+ 'Ꞅ' => 'ꞅ',
+ 'Ꞇ' => 'ꞇ',
+ 'Ꞌ' => 'ꞌ',
+ 'Ɥ' => 'ɥ',
+ 'Ꞑ' => 'ꞑ',
+ 'Ꞓ' => 'ꞓ',
+ 'Ꞗ' => 'ꞗ',
+ 'Ꞙ' => 'ꞙ',
+ 'Ꞛ' => 'ꞛ',
+ 'Ꞝ' => 'ꞝ',
+ 'Ꞟ' => 'ꞟ',
+ 'Ꞡ' => 'ꞡ',
+ 'Ꞣ' => 'ꞣ',
+ 'Ꞥ' => 'ꞥ',
+ 'Ꞧ' => 'ꞧ',
+ 'Ꞩ' => 'ꞩ',
+ 'Ɦ' => 'ɦ',
+ 'Ɜ' => 'ɜ',
+ 'Ɡ' => 'ɡ',
+ 'Ɬ' => 'ɬ',
+ 'Ʞ' => 'ʞ',
+ 'Ʇ' => 'ʇ',
+ 'A' => 'a',
+ 'B' => 'b',
+ 'C' => 'c',
+ 'D' => 'd',
+ 'E' => 'e',
+ 'F' => 'f',
+ 'G' => 'g',
+ 'H' => 'h',
+ 'I' => 'i',
+ 'J' => 'j',
+ 'K' => 'k',
+ 'L' => 'l',
+ 'M' => 'm',
+ 'N' => 'n',
+ 'O' => 'o',
+ 'P' => 'p',
+ 'Q' => 'q',
+ 'R' => 'r',
+ 'S' => 's',
+ 'T' => 't',
+ 'U' => 'u',
+ 'V' => 'v',
+ 'W' => 'w',
+ 'X' => 'x',
+ 'Y' => 'y',
+ 'Z' => 'z',
+ '𐐀' => '𐐨',
+ '𐐁' => '𐐩',
+ '𐐂' => '𐐪',
+ '𐐃' => '𐐫',
+ '𐐄' => '𐐬',
+ '𐐅' => '𐐭',
+ '𐐆' => '𐐮',
+ '𐐇' => '𐐯',
+ '𐐈' => '𐐰',
+ '𐐉' => '𐐱',
+ '𐐊' => '𐐲',
+ '𐐋' => '𐐳',
+ '𐐌' => '𐐴',
+ '𐐍' => '𐐵',
+ '𐐎' => '𐐶',
+ '𐐏' => '𐐷',
+ '𐐐' => '𐐸',
+ '𐐑' => '𐐹',
+ '𐐒' => '𐐺',
+ '𐐓' => '𐐻',
+ '𐐔' => '𐐼',
+ '𐐕' => '𐐽',
+ '𐐖' => '𐐾',
+ '𐐗' => '𐐿',
+ '𐐘' => '𐑀',
+ '𐐙' => '𐑁',
+ '𐐚' => '𐑂',
+ '𐐛' => '𐑃',
+ '𐐜' => '𐑄',
+ '𐐝' => '𐑅',
+ '𐐞' => '𐑆',
+ '𐐟' => '𐑇',
+ '𐐠' => '𐑈',
+ '𐐡' => '𐑉',
+ '𐐢' => '𐑊',
+ '𐐣' => '𐑋',
+ '𐐤' => '𐑌',
+ '𐐥' => '𐑍',
+ '𐐦' => '𐑎',
+ '𐐧' => '𐑏',
+ '𑢠' => '𑣀',
+ '𑢡' => '𑣁',
+ '𑢢' => '𑣂',
+ '𑢣' => '𑣃',
+ '𑢤' => '𑣄',
+ '𑢥' => '𑣅',
+ '𑢦' => '𑣆',
+ '𑢧' => '𑣇',
+ '𑢨' => '𑣈',
+ '𑢩' => '𑣉',
+ '𑢪' => '𑣊',
+ '𑢫' => '𑣋',
+ '𑢬' => '𑣌',
+ '𑢭' => '𑣍',
+ '𑢮' => '𑣎',
+ '𑢯' => '𑣏',
+ '𑢰' => '𑣐',
+ '𑢱' => '𑣑',
+ '𑢲' => '𑣒',
+ '𑢳' => '𑣓',
+ '𑢴' => '𑣔',
+ '𑢵' => '𑣕',
+ '𑢶' => '𑣖',
+ '𑢷' => '𑣗',
+ '𑢸' => '𑣘',
+ '𑢹' => '𑣙',
+ '𑢺' => '𑣚',
+ '𑢻' => '𑣛',
+ '𑢼' => '𑣜',
+ '𑢽' => '𑣝',
+ '𑢾' => '𑣞',
+ '𑢿' => '𑣟',
+);
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php b/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php
new file mode 100644
index 0000000..2a8f6e7
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php
@@ -0,0 +1,5 @@
+ 'A',
+ 'b' => 'B',
+ 'c' => 'C',
+ 'd' => 'D',
+ 'e' => 'E',
+ 'f' => 'F',
+ 'g' => 'G',
+ 'h' => 'H',
+ 'i' => 'I',
+ 'j' => 'J',
+ 'k' => 'K',
+ 'l' => 'L',
+ 'm' => 'M',
+ 'n' => 'N',
+ 'o' => 'O',
+ 'p' => 'P',
+ 'q' => 'Q',
+ 'r' => 'R',
+ 's' => 'S',
+ 't' => 'T',
+ 'u' => 'U',
+ 'v' => 'V',
+ 'w' => 'W',
+ 'x' => 'X',
+ 'y' => 'Y',
+ 'z' => 'Z',
+ 'µ' => 'Μ',
+ 'à' => 'À',
+ 'á' => 'Á',
+ 'â' => 'Â',
+ 'ã' => 'Ã',
+ 'ä' => 'Ä',
+ 'å' => 'Å',
+ 'æ' => 'Æ',
+ 'ç' => 'Ç',
+ 'è' => 'È',
+ 'é' => 'É',
+ 'ê' => 'Ê',
+ 'ë' => 'Ë',
+ 'ì' => 'Ì',
+ 'í' => 'Í',
+ 'î' => 'Î',
+ 'ï' => 'Ï',
+ 'ð' => 'Ð',
+ 'ñ' => 'Ñ',
+ 'ò' => 'Ò',
+ 'ó' => 'Ó',
+ 'ô' => 'Ô',
+ 'õ' => 'Õ',
+ 'ö' => 'Ö',
+ 'ø' => 'Ø',
+ 'ù' => 'Ù',
+ 'ú' => 'Ú',
+ 'û' => 'Û',
+ 'ü' => 'Ü',
+ 'ý' => 'Ý',
+ 'þ' => 'Þ',
+ 'ÿ' => 'Ÿ',
+ 'ā' => 'Ā',
+ 'ă' => 'Ă',
+ 'ą' => 'Ą',
+ 'ć' => 'Ć',
+ 'ĉ' => 'Ĉ',
+ 'ċ' => 'Ċ',
+ 'č' => 'Č',
+ 'ď' => 'Ď',
+ 'đ' => 'Đ',
+ 'ē' => 'Ē',
+ 'ĕ' => 'Ĕ',
+ 'ė' => 'Ė',
+ 'ę' => 'Ę',
+ 'ě' => 'Ě',
+ 'ĝ' => 'Ĝ',
+ 'ğ' => 'Ğ',
+ 'ġ' => 'Ġ',
+ 'ģ' => 'Ģ',
+ 'ĥ' => 'Ĥ',
+ 'ħ' => 'Ħ',
+ 'ĩ' => 'Ĩ',
+ 'ī' => 'Ī',
+ 'ĭ' => 'Ĭ',
+ 'į' => 'Į',
+ 'ı' => 'I',
+ 'ij' => 'IJ',
+ 'ĵ' => 'Ĵ',
+ 'ķ' => 'Ķ',
+ 'ĺ' => 'Ĺ',
+ 'ļ' => 'Ļ',
+ 'ľ' => 'Ľ',
+ 'ŀ' => 'Ŀ',
+ 'ł' => 'Ł',
+ 'ń' => 'Ń',
+ 'ņ' => 'Ņ',
+ 'ň' => 'Ň',
+ 'ŋ' => 'Ŋ',
+ 'ō' => 'Ō',
+ 'ŏ' => 'Ŏ',
+ 'ő' => 'Ő',
+ 'œ' => 'Œ',
+ 'ŕ' => 'Ŕ',
+ 'ŗ' => 'Ŗ',
+ 'ř' => 'Ř',
+ 'ś' => 'Ś',
+ 'ŝ' => 'Ŝ',
+ 'ş' => 'Ş',
+ 'š' => 'Š',
+ 'ţ' => 'Ţ',
+ 'ť' => 'Ť',
+ 'ŧ' => 'Ŧ',
+ 'ũ' => 'Ũ',
+ 'ū' => 'Ū',
+ 'ŭ' => 'Ŭ',
+ 'ů' => 'Ů',
+ 'ű' => 'Ű',
+ 'ų' => 'Ų',
+ 'ŵ' => 'Ŵ',
+ 'ŷ' => 'Ŷ',
+ 'ź' => 'Ź',
+ 'ż' => 'Ż',
+ 'ž' => 'Ž',
+ 'ſ' => 'S',
+ 'ƀ' => 'Ƀ',
+ 'ƃ' => 'Ƃ',
+ 'ƅ' => 'Ƅ',
+ 'ƈ' => 'Ƈ',
+ 'ƌ' => 'Ƌ',
+ 'ƒ' => 'Ƒ',
+ 'ƕ' => 'Ƕ',
+ 'ƙ' => 'Ƙ',
+ 'ƚ' => 'Ƚ',
+ 'ƞ' => 'Ƞ',
+ 'ơ' => 'Ơ',
+ 'ƣ' => 'Ƣ',
+ 'ƥ' => 'Ƥ',
+ 'ƨ' => 'Ƨ',
+ 'ƭ' => 'Ƭ',
+ 'ư' => 'Ư',
+ 'ƴ' => 'Ƴ',
+ 'ƶ' => 'Ƶ',
+ 'ƹ' => 'Ƹ',
+ 'ƽ' => 'Ƽ',
+ 'ƿ' => 'Ƿ',
+ 'Dž' => 'DŽ',
+ 'dž' => 'DŽ',
+ 'Lj' => 'LJ',
+ 'lj' => 'LJ',
+ 'Nj' => 'NJ',
+ 'nj' => 'NJ',
+ 'ǎ' => 'Ǎ',
+ 'ǐ' => 'Ǐ',
+ 'ǒ' => 'Ǒ',
+ 'ǔ' => 'Ǔ',
+ 'ǖ' => 'Ǖ',
+ 'ǘ' => 'Ǘ',
+ 'ǚ' => 'Ǚ',
+ 'ǜ' => 'Ǜ',
+ 'ǝ' => 'Ǝ',
+ 'ǟ' => 'Ǟ',
+ 'ǡ' => 'Ǡ',
+ 'ǣ' => 'Ǣ',
+ 'ǥ' => 'Ǥ',
+ 'ǧ' => 'Ǧ',
+ 'ǩ' => 'Ǩ',
+ 'ǫ' => 'Ǫ',
+ 'ǭ' => 'Ǭ',
+ 'ǯ' => 'Ǯ',
+ 'Dz' => 'DZ',
+ 'dz' => 'DZ',
+ 'ǵ' => 'Ǵ',
+ 'ǹ' => 'Ǹ',
+ 'ǻ' => 'Ǻ',
+ 'ǽ' => 'Ǽ',
+ 'ǿ' => 'Ǿ',
+ 'ȁ' => 'Ȁ',
+ 'ȃ' => 'Ȃ',
+ 'ȅ' => 'Ȅ',
+ 'ȇ' => 'Ȇ',
+ 'ȉ' => 'Ȉ',
+ 'ȋ' => 'Ȋ',
+ 'ȍ' => 'Ȍ',
+ 'ȏ' => 'Ȏ',
+ 'ȑ' => 'Ȑ',
+ 'ȓ' => 'Ȓ',
+ 'ȕ' => 'Ȕ',
+ 'ȗ' => 'Ȗ',
+ 'ș' => 'Ș',
+ 'ț' => 'Ț',
+ 'ȝ' => 'Ȝ',
+ 'ȟ' => 'Ȟ',
+ 'ȣ' => 'Ȣ',
+ 'ȥ' => 'Ȥ',
+ 'ȧ' => 'Ȧ',
+ 'ȩ' => 'Ȩ',
+ 'ȫ' => 'Ȫ',
+ 'ȭ' => 'Ȭ',
+ 'ȯ' => 'Ȯ',
+ 'ȱ' => 'Ȱ',
+ 'ȳ' => 'Ȳ',
+ 'ȼ' => 'Ȼ',
+ 'ȿ' => 'Ȿ',
+ 'ɀ' => 'Ɀ',
+ 'ɂ' => 'Ɂ',
+ 'ɇ' => 'Ɇ',
+ 'ɉ' => 'Ɉ',
+ 'ɋ' => 'Ɋ',
+ 'ɍ' => 'Ɍ',
+ 'ɏ' => 'Ɏ',
+ 'ɐ' => 'Ɐ',
+ 'ɑ' => 'Ɑ',
+ 'ɒ' => 'Ɒ',
+ 'ɓ' => 'Ɓ',
+ 'ɔ' => 'Ɔ',
+ 'ɖ' => 'Ɖ',
+ 'ɗ' => 'Ɗ',
+ 'ə' => 'Ə',
+ 'ɛ' => 'Ɛ',
+ 'ɜ' => 'Ɜ',
+ 'ɠ' => 'Ɠ',
+ 'ɡ' => 'Ɡ',
+ 'ɣ' => 'Ɣ',
+ 'ɥ' => 'Ɥ',
+ 'ɦ' => 'Ɦ',
+ 'ɨ' => 'Ɨ',
+ 'ɩ' => 'Ɩ',
+ 'ɫ' => 'Ɫ',
+ 'ɬ' => 'Ɬ',
+ 'ɯ' => 'Ɯ',
+ 'ɱ' => 'Ɱ',
+ 'ɲ' => 'Ɲ',
+ 'ɵ' => 'Ɵ',
+ 'ɽ' => 'Ɽ',
+ 'ʀ' => 'Ʀ',
+ 'ʃ' => 'Ʃ',
+ 'ʇ' => 'Ʇ',
+ 'ʈ' => 'Ʈ',
+ 'ʉ' => 'Ʉ',
+ 'ʊ' => 'Ʊ',
+ 'ʋ' => 'Ʋ',
+ 'ʌ' => 'Ʌ',
+ 'ʒ' => 'Ʒ',
+ 'ʞ' => 'Ʞ',
+ 'ͅ' => 'Ι',
+ 'ͱ' => 'Ͱ',
+ 'ͳ' => 'Ͳ',
+ 'ͷ' => 'Ͷ',
+ 'ͻ' => 'Ͻ',
+ 'ͼ' => 'Ͼ',
+ 'ͽ' => 'Ͽ',
+ 'ά' => 'Ά',
+ 'έ' => 'Έ',
+ 'ή' => 'Ή',
+ 'ί' => 'Ί',
+ 'α' => 'Α',
+ 'β' => 'Β',
+ 'γ' => 'Γ',
+ 'δ' => 'Δ',
+ 'ε' => 'Ε',
+ 'ζ' => 'Ζ',
+ 'η' => 'Η',
+ 'θ' => 'Θ',
+ 'ι' => 'Ι',
+ 'κ' => 'Κ',
+ 'λ' => 'Λ',
+ 'μ' => 'Μ',
+ 'ν' => 'Ν',
+ 'ξ' => 'Ξ',
+ 'ο' => 'Ο',
+ 'π' => 'Π',
+ 'ρ' => 'Ρ',
+ 'ς' => 'Σ',
+ 'σ' => 'Σ',
+ 'τ' => 'Τ',
+ 'υ' => 'Υ',
+ 'φ' => 'Φ',
+ 'χ' => 'Χ',
+ 'ψ' => 'Ψ',
+ 'ω' => 'Ω',
+ 'ϊ' => 'Ϊ',
+ 'ϋ' => 'Ϋ',
+ 'ό' => 'Ό',
+ 'ύ' => 'Ύ',
+ 'ώ' => 'Ώ',
+ 'ϐ' => 'Β',
+ 'ϑ' => 'Θ',
+ 'ϕ' => 'Φ',
+ 'ϖ' => 'Π',
+ 'ϗ' => 'Ϗ',
+ 'ϙ' => 'Ϙ',
+ 'ϛ' => 'Ϛ',
+ 'ϝ' => 'Ϝ',
+ 'ϟ' => 'Ϟ',
+ 'ϡ' => 'Ϡ',
+ 'ϣ' => 'Ϣ',
+ 'ϥ' => 'Ϥ',
+ 'ϧ' => 'Ϧ',
+ 'ϩ' => 'Ϩ',
+ 'ϫ' => 'Ϫ',
+ 'ϭ' => 'Ϭ',
+ 'ϯ' => 'Ϯ',
+ 'ϰ' => 'Κ',
+ 'ϱ' => 'Ρ',
+ 'ϲ' => 'Ϲ',
+ 'ϳ' => 'Ϳ',
+ 'ϵ' => 'Ε',
+ 'ϸ' => 'Ϸ',
+ 'ϻ' => 'Ϻ',
+ 'а' => 'А',
+ 'б' => 'Б',
+ 'в' => 'В',
+ 'г' => 'Г',
+ 'д' => 'Д',
+ 'е' => 'Е',
+ 'ж' => 'Ж',
+ 'з' => 'З',
+ 'и' => 'И',
+ 'й' => 'Й',
+ 'к' => 'К',
+ 'л' => 'Л',
+ 'м' => 'М',
+ 'н' => 'Н',
+ 'о' => 'О',
+ 'п' => 'П',
+ 'р' => 'Р',
+ 'с' => 'С',
+ 'т' => 'Т',
+ 'у' => 'У',
+ 'ф' => 'Ф',
+ 'х' => 'Х',
+ 'ц' => 'Ц',
+ 'ч' => 'Ч',
+ 'ш' => 'Ш',
+ 'щ' => 'Щ',
+ 'ъ' => 'Ъ',
+ 'ы' => 'Ы',
+ 'ь' => 'Ь',
+ 'э' => 'Э',
+ 'ю' => 'Ю',
+ 'я' => 'Я',
+ 'ѐ' => 'Ѐ',
+ 'ё' => 'Ё',
+ 'ђ' => 'Ђ',
+ 'ѓ' => 'Ѓ',
+ 'є' => 'Є',
+ 'ѕ' => 'Ѕ',
+ 'і' => 'І',
+ 'ї' => 'Ї',
+ 'ј' => 'Ј',
+ 'љ' => 'Љ',
+ 'њ' => 'Њ',
+ 'ћ' => 'Ћ',
+ 'ќ' => 'Ќ',
+ 'ѝ' => 'Ѝ',
+ 'ў' => 'Ў',
+ 'џ' => 'Џ',
+ 'ѡ' => 'Ѡ',
+ 'ѣ' => 'Ѣ',
+ 'ѥ' => 'Ѥ',
+ 'ѧ' => 'Ѧ',
+ 'ѩ' => 'Ѩ',
+ 'ѫ' => 'Ѫ',
+ 'ѭ' => 'Ѭ',
+ 'ѯ' => 'Ѯ',
+ 'ѱ' => 'Ѱ',
+ 'ѳ' => 'Ѳ',
+ 'ѵ' => 'Ѵ',
+ 'ѷ' => 'Ѷ',
+ 'ѹ' => 'Ѹ',
+ 'ѻ' => 'Ѻ',
+ 'ѽ' => 'Ѽ',
+ 'ѿ' => 'Ѿ',
+ 'ҁ' => 'Ҁ',
+ 'ҋ' => 'Ҋ',
+ 'ҍ' => 'Ҍ',
+ 'ҏ' => 'Ҏ',
+ 'ґ' => 'Ґ',
+ 'ғ' => 'Ғ',
+ 'ҕ' => 'Ҕ',
+ 'җ' => 'Җ',
+ 'ҙ' => 'Ҙ',
+ 'қ' => 'Қ',
+ 'ҝ' => 'Ҝ',
+ 'ҟ' => 'Ҟ',
+ 'ҡ' => 'Ҡ',
+ 'ң' => 'Ң',
+ 'ҥ' => 'Ҥ',
+ 'ҧ' => 'Ҧ',
+ 'ҩ' => 'Ҩ',
+ 'ҫ' => 'Ҫ',
+ 'ҭ' => 'Ҭ',
+ 'ү' => 'Ү',
+ 'ұ' => 'Ұ',
+ 'ҳ' => 'Ҳ',
+ 'ҵ' => 'Ҵ',
+ 'ҷ' => 'Ҷ',
+ 'ҹ' => 'Ҹ',
+ 'һ' => 'Һ',
+ 'ҽ' => 'Ҽ',
+ 'ҿ' => 'Ҿ',
+ 'ӂ' => 'Ӂ',
+ 'ӄ' => 'Ӄ',
+ 'ӆ' => 'Ӆ',
+ 'ӈ' => 'Ӈ',
+ 'ӊ' => 'Ӊ',
+ 'ӌ' => 'Ӌ',
+ 'ӎ' => 'Ӎ',
+ 'ӏ' => 'Ӏ',
+ 'ӑ' => 'Ӑ',
+ 'ӓ' => 'Ӓ',
+ 'ӕ' => 'Ӕ',
+ 'ӗ' => 'Ӗ',
+ 'ә' => 'Ә',
+ 'ӛ' => 'Ӛ',
+ 'ӝ' => 'Ӝ',
+ 'ӟ' => 'Ӟ',
+ 'ӡ' => 'Ӡ',
+ 'ӣ' => 'Ӣ',
+ 'ӥ' => 'Ӥ',
+ 'ӧ' => 'Ӧ',
+ 'ө' => 'Ө',
+ 'ӫ' => 'Ӫ',
+ 'ӭ' => 'Ӭ',
+ 'ӯ' => 'Ӯ',
+ 'ӱ' => 'Ӱ',
+ 'ӳ' => 'Ӳ',
+ 'ӵ' => 'Ӵ',
+ 'ӷ' => 'Ӷ',
+ 'ӹ' => 'Ӹ',
+ 'ӻ' => 'Ӻ',
+ 'ӽ' => 'Ӽ',
+ 'ӿ' => 'Ӿ',
+ 'ԁ' => 'Ԁ',
+ 'ԃ' => 'Ԃ',
+ 'ԅ' => 'Ԅ',
+ 'ԇ' => 'Ԇ',
+ 'ԉ' => 'Ԉ',
+ 'ԋ' => 'Ԋ',
+ 'ԍ' => 'Ԍ',
+ 'ԏ' => 'Ԏ',
+ 'ԑ' => 'Ԑ',
+ 'ԓ' => 'Ԓ',
+ 'ԕ' => 'Ԕ',
+ 'ԗ' => 'Ԗ',
+ 'ԙ' => 'Ԙ',
+ 'ԛ' => 'Ԛ',
+ 'ԝ' => 'Ԝ',
+ 'ԟ' => 'Ԟ',
+ 'ԡ' => 'Ԡ',
+ 'ԣ' => 'Ԣ',
+ 'ԥ' => 'Ԥ',
+ 'ԧ' => 'Ԧ',
+ 'ԩ' => 'Ԩ',
+ 'ԫ' => 'Ԫ',
+ 'ԭ' => 'Ԭ',
+ 'ԯ' => 'Ԯ',
+ 'ա' => 'Ա',
+ 'բ' => 'Բ',
+ 'գ' => 'Գ',
+ 'դ' => 'Դ',
+ 'ե' => 'Ե',
+ 'զ' => 'Զ',
+ 'է' => 'Է',
+ 'ը' => 'Ը',
+ 'թ' => 'Թ',
+ 'ժ' => 'Ժ',
+ 'ի' => 'Ի',
+ 'լ' => 'Լ',
+ 'խ' => 'Խ',
+ 'ծ' => 'Ծ',
+ 'կ' => 'Կ',
+ 'հ' => 'Հ',
+ 'ձ' => 'Ձ',
+ 'ղ' => 'Ղ',
+ 'ճ' => 'Ճ',
+ 'մ' => 'Մ',
+ 'յ' => 'Յ',
+ 'ն' => 'Ն',
+ 'շ' => 'Շ',
+ 'ո' => 'Ո',
+ 'չ' => 'Չ',
+ 'պ' => 'Պ',
+ 'ջ' => 'Ջ',
+ 'ռ' => 'Ռ',
+ 'ս' => 'Ս',
+ 'վ' => 'Վ',
+ 'տ' => 'Տ',
+ 'ր' => 'Ր',
+ 'ց' => 'Ց',
+ 'ւ' => 'Ւ',
+ 'փ' => 'Փ',
+ 'ք' => 'Ք',
+ 'օ' => 'Օ',
+ 'ֆ' => 'Ֆ',
+ 'ᵹ' => 'Ᵹ',
+ 'ᵽ' => 'Ᵽ',
+ 'ḁ' => 'Ḁ',
+ 'ḃ' => 'Ḃ',
+ 'ḅ' => 'Ḅ',
+ 'ḇ' => 'Ḇ',
+ 'ḉ' => 'Ḉ',
+ 'ḋ' => 'Ḋ',
+ 'ḍ' => 'Ḍ',
+ 'ḏ' => 'Ḏ',
+ 'ḑ' => 'Ḑ',
+ 'ḓ' => 'Ḓ',
+ 'ḕ' => 'Ḕ',
+ 'ḗ' => 'Ḗ',
+ 'ḙ' => 'Ḙ',
+ 'ḛ' => 'Ḛ',
+ 'ḝ' => 'Ḝ',
+ 'ḟ' => 'Ḟ',
+ 'ḡ' => 'Ḡ',
+ 'ḣ' => 'Ḣ',
+ 'ḥ' => 'Ḥ',
+ 'ḧ' => 'Ḧ',
+ 'ḩ' => 'Ḩ',
+ 'ḫ' => 'Ḫ',
+ 'ḭ' => 'Ḭ',
+ 'ḯ' => 'Ḯ',
+ 'ḱ' => 'Ḱ',
+ 'ḳ' => 'Ḳ',
+ 'ḵ' => 'Ḵ',
+ 'ḷ' => 'Ḷ',
+ 'ḹ' => 'Ḹ',
+ 'ḻ' => 'Ḻ',
+ 'ḽ' => 'Ḽ',
+ 'ḿ' => 'Ḿ',
+ 'ṁ' => 'Ṁ',
+ 'ṃ' => 'Ṃ',
+ 'ṅ' => 'Ṅ',
+ 'ṇ' => 'Ṇ',
+ 'ṉ' => 'Ṉ',
+ 'ṋ' => 'Ṋ',
+ 'ṍ' => 'Ṍ',
+ 'ṏ' => 'Ṏ',
+ 'ṑ' => 'Ṑ',
+ 'ṓ' => 'Ṓ',
+ 'ṕ' => 'Ṕ',
+ 'ṗ' => 'Ṗ',
+ 'ṙ' => 'Ṙ',
+ 'ṛ' => 'Ṛ',
+ 'ṝ' => 'Ṝ',
+ 'ṟ' => 'Ṟ',
+ 'ṡ' => 'Ṡ',
+ 'ṣ' => 'Ṣ',
+ 'ṥ' => 'Ṥ',
+ 'ṧ' => 'Ṧ',
+ 'ṩ' => 'Ṩ',
+ 'ṫ' => 'Ṫ',
+ 'ṭ' => 'Ṭ',
+ 'ṯ' => 'Ṯ',
+ 'ṱ' => 'Ṱ',
+ 'ṳ' => 'Ṳ',
+ 'ṵ' => 'Ṵ',
+ 'ṷ' => 'Ṷ',
+ 'ṹ' => 'Ṹ',
+ 'ṻ' => 'Ṻ',
+ 'ṽ' => 'Ṽ',
+ 'ṿ' => 'Ṿ',
+ 'ẁ' => 'Ẁ',
+ 'ẃ' => 'Ẃ',
+ 'ẅ' => 'Ẅ',
+ 'ẇ' => 'Ẇ',
+ 'ẉ' => 'Ẉ',
+ 'ẋ' => 'Ẋ',
+ 'ẍ' => 'Ẍ',
+ 'ẏ' => 'Ẏ',
+ 'ẑ' => 'Ẑ',
+ 'ẓ' => 'Ẓ',
+ 'ẕ' => 'Ẕ',
+ 'ẛ' => 'Ṡ',
+ 'ạ' => 'Ạ',
+ 'ả' => 'Ả',
+ 'ấ' => 'Ấ',
+ 'ầ' => 'Ầ',
+ 'ẩ' => 'Ẩ',
+ 'ẫ' => 'Ẫ',
+ 'ậ' => 'Ậ',
+ 'ắ' => 'Ắ',
+ 'ằ' => 'Ằ',
+ 'ẳ' => 'Ẳ',
+ 'ẵ' => 'Ẵ',
+ 'ặ' => 'Ặ',
+ 'ẹ' => 'Ẹ',
+ 'ẻ' => 'Ẻ',
+ 'ẽ' => 'Ẽ',
+ 'ế' => 'Ế',
+ 'ề' => 'Ề',
+ 'ể' => 'Ể',
+ 'ễ' => 'Ễ',
+ 'ệ' => 'Ệ',
+ 'ỉ' => 'Ỉ',
+ 'ị' => 'Ị',
+ 'ọ' => 'Ọ',
+ 'ỏ' => 'Ỏ',
+ 'ố' => 'Ố',
+ 'ồ' => 'Ồ',
+ 'ổ' => 'Ổ',
+ 'ỗ' => 'Ỗ',
+ 'ộ' => 'Ộ',
+ 'ớ' => 'Ớ',
+ 'ờ' => 'Ờ',
+ 'ở' => 'Ở',
+ 'ỡ' => 'Ỡ',
+ 'ợ' => 'Ợ',
+ 'ụ' => 'Ụ',
+ 'ủ' => 'Ủ',
+ 'ứ' => 'Ứ',
+ 'ừ' => 'Ừ',
+ 'ử' => 'Ử',
+ 'ữ' => 'Ữ',
+ 'ự' => 'Ự',
+ 'ỳ' => 'Ỳ',
+ 'ỵ' => 'Ỵ',
+ 'ỷ' => 'Ỷ',
+ 'ỹ' => 'Ỹ',
+ 'ỻ' => 'Ỻ',
+ 'ỽ' => 'Ỽ',
+ 'ỿ' => 'Ỿ',
+ 'ἀ' => 'Ἀ',
+ 'ἁ' => 'Ἁ',
+ 'ἂ' => 'Ἂ',
+ 'ἃ' => 'Ἃ',
+ 'ἄ' => 'Ἄ',
+ 'ἅ' => 'Ἅ',
+ 'ἆ' => 'Ἆ',
+ 'ἇ' => 'Ἇ',
+ 'ἐ' => 'Ἐ',
+ 'ἑ' => 'Ἑ',
+ 'ἒ' => 'Ἒ',
+ 'ἓ' => 'Ἓ',
+ 'ἔ' => 'Ἔ',
+ 'ἕ' => 'Ἕ',
+ 'ἠ' => 'Ἠ',
+ 'ἡ' => 'Ἡ',
+ 'ἢ' => 'Ἢ',
+ 'ἣ' => 'Ἣ',
+ 'ἤ' => 'Ἤ',
+ 'ἥ' => 'Ἥ',
+ 'ἦ' => 'Ἦ',
+ 'ἧ' => 'Ἧ',
+ 'ἰ' => 'Ἰ',
+ 'ἱ' => 'Ἱ',
+ 'ἲ' => 'Ἲ',
+ 'ἳ' => 'Ἳ',
+ 'ἴ' => 'Ἴ',
+ 'ἵ' => 'Ἵ',
+ 'ἶ' => 'Ἶ',
+ 'ἷ' => 'Ἷ',
+ 'ὀ' => 'Ὀ',
+ 'ὁ' => 'Ὁ',
+ 'ὂ' => 'Ὂ',
+ 'ὃ' => 'Ὃ',
+ 'ὄ' => 'Ὄ',
+ 'ὅ' => 'Ὅ',
+ 'ὑ' => 'Ὑ',
+ 'ὓ' => 'Ὓ',
+ 'ὕ' => 'Ὕ',
+ 'ὗ' => 'Ὗ',
+ 'ὠ' => 'Ὠ',
+ 'ὡ' => 'Ὡ',
+ 'ὢ' => 'Ὢ',
+ 'ὣ' => 'Ὣ',
+ 'ὤ' => 'Ὤ',
+ 'ὥ' => 'Ὥ',
+ 'ὦ' => 'Ὦ',
+ 'ὧ' => 'Ὧ',
+ 'ὰ' => 'Ὰ',
+ 'ά' => 'Ά',
+ 'ὲ' => 'Ὲ',
+ 'έ' => 'Έ',
+ 'ὴ' => 'Ὴ',
+ 'ή' => 'Ή',
+ 'ὶ' => 'Ὶ',
+ 'ί' => 'Ί',
+ 'ὸ' => 'Ὸ',
+ 'ό' => 'Ό',
+ 'ὺ' => 'Ὺ',
+ 'ύ' => 'Ύ',
+ 'ὼ' => 'Ὼ',
+ 'ώ' => 'Ώ',
+ 'ᾀ' => 'ᾈ',
+ 'ᾁ' => 'ᾉ',
+ 'ᾂ' => 'ᾊ',
+ 'ᾃ' => 'ᾋ',
+ 'ᾄ' => 'ᾌ',
+ 'ᾅ' => 'ᾍ',
+ 'ᾆ' => 'ᾎ',
+ 'ᾇ' => 'ᾏ',
+ 'ᾐ' => 'ᾘ',
+ 'ᾑ' => 'ᾙ',
+ 'ᾒ' => 'ᾚ',
+ 'ᾓ' => 'ᾛ',
+ 'ᾔ' => 'ᾜ',
+ 'ᾕ' => 'ᾝ',
+ 'ᾖ' => 'ᾞ',
+ 'ᾗ' => 'ᾟ',
+ 'ᾠ' => 'ᾨ',
+ 'ᾡ' => 'ᾩ',
+ 'ᾢ' => 'ᾪ',
+ 'ᾣ' => 'ᾫ',
+ 'ᾤ' => 'ᾬ',
+ 'ᾥ' => 'ᾭ',
+ 'ᾦ' => 'ᾮ',
+ 'ᾧ' => 'ᾯ',
+ 'ᾰ' => 'Ᾰ',
+ 'ᾱ' => 'Ᾱ',
+ 'ᾳ' => 'ᾼ',
+ 'ι' => 'Ι',
+ 'ῃ' => 'ῌ',
+ 'ῐ' => 'Ῐ',
+ 'ῑ' => 'Ῑ',
+ 'ῠ' => 'Ῠ',
+ 'ῡ' => 'Ῡ',
+ 'ῥ' => 'Ῥ',
+ 'ῳ' => 'ῼ',
+ 'ⅎ' => 'Ⅎ',
+ 'ⅰ' => 'Ⅰ',
+ 'ⅱ' => 'Ⅱ',
+ 'ⅲ' => 'Ⅲ',
+ 'ⅳ' => 'Ⅳ',
+ 'ⅴ' => 'Ⅴ',
+ 'ⅵ' => 'Ⅵ',
+ 'ⅶ' => 'Ⅶ',
+ 'ⅷ' => 'Ⅷ',
+ 'ⅸ' => 'Ⅸ',
+ 'ⅹ' => 'Ⅹ',
+ 'ⅺ' => 'Ⅺ',
+ 'ⅻ' => 'Ⅻ',
+ 'ⅼ' => 'Ⅼ',
+ 'ⅽ' => 'Ⅽ',
+ 'ⅾ' => 'Ⅾ',
+ 'ⅿ' => 'Ⅿ',
+ 'ↄ' => 'Ↄ',
+ 'ⓐ' => 'Ⓐ',
+ 'ⓑ' => 'Ⓑ',
+ 'ⓒ' => 'Ⓒ',
+ 'ⓓ' => 'Ⓓ',
+ 'ⓔ' => 'Ⓔ',
+ 'ⓕ' => 'Ⓕ',
+ 'ⓖ' => 'Ⓖ',
+ 'ⓗ' => 'Ⓗ',
+ 'ⓘ' => 'Ⓘ',
+ 'ⓙ' => 'Ⓙ',
+ 'ⓚ' => 'Ⓚ',
+ 'ⓛ' => 'Ⓛ',
+ 'ⓜ' => 'Ⓜ',
+ 'ⓝ' => 'Ⓝ',
+ 'ⓞ' => 'Ⓞ',
+ 'ⓟ' => 'Ⓟ',
+ 'ⓠ' => 'Ⓠ',
+ 'ⓡ' => 'Ⓡ',
+ 'ⓢ' => 'Ⓢ',
+ 'ⓣ' => 'Ⓣ',
+ 'ⓤ' => 'Ⓤ',
+ 'ⓥ' => 'Ⓥ',
+ 'ⓦ' => 'Ⓦ',
+ 'ⓧ' => 'Ⓧ',
+ 'ⓨ' => 'Ⓨ',
+ 'ⓩ' => 'Ⓩ',
+ 'ⰰ' => 'Ⰰ',
+ 'ⰱ' => 'Ⰱ',
+ 'ⰲ' => 'Ⰲ',
+ 'ⰳ' => 'Ⰳ',
+ 'ⰴ' => 'Ⰴ',
+ 'ⰵ' => 'Ⰵ',
+ 'ⰶ' => 'Ⰶ',
+ 'ⰷ' => 'Ⰷ',
+ 'ⰸ' => 'Ⰸ',
+ 'ⰹ' => 'Ⰹ',
+ 'ⰺ' => 'Ⰺ',
+ 'ⰻ' => 'Ⰻ',
+ 'ⰼ' => 'Ⰼ',
+ 'ⰽ' => 'Ⰽ',
+ 'ⰾ' => 'Ⰾ',
+ 'ⰿ' => 'Ⰿ',
+ 'ⱀ' => 'Ⱀ',
+ 'ⱁ' => 'Ⱁ',
+ 'ⱂ' => 'Ⱂ',
+ 'ⱃ' => 'Ⱃ',
+ 'ⱄ' => 'Ⱄ',
+ 'ⱅ' => 'Ⱅ',
+ 'ⱆ' => 'Ⱆ',
+ 'ⱇ' => 'Ⱇ',
+ 'ⱈ' => 'Ⱈ',
+ 'ⱉ' => 'Ⱉ',
+ 'ⱊ' => 'Ⱊ',
+ 'ⱋ' => 'Ⱋ',
+ 'ⱌ' => 'Ⱌ',
+ 'ⱍ' => 'Ⱍ',
+ 'ⱎ' => 'Ⱎ',
+ 'ⱏ' => 'Ⱏ',
+ 'ⱐ' => 'Ⱐ',
+ 'ⱑ' => 'Ⱑ',
+ 'ⱒ' => 'Ⱒ',
+ 'ⱓ' => 'Ⱓ',
+ 'ⱔ' => 'Ⱔ',
+ 'ⱕ' => 'Ⱕ',
+ 'ⱖ' => 'Ⱖ',
+ 'ⱗ' => 'Ⱗ',
+ 'ⱘ' => 'Ⱘ',
+ 'ⱙ' => 'Ⱙ',
+ 'ⱚ' => 'Ⱚ',
+ 'ⱛ' => 'Ⱛ',
+ 'ⱜ' => 'Ⱜ',
+ 'ⱝ' => 'Ⱝ',
+ 'ⱞ' => 'Ⱞ',
+ 'ⱡ' => 'Ⱡ',
+ 'ⱥ' => 'Ⱥ',
+ 'ⱦ' => 'Ⱦ',
+ 'ⱨ' => 'Ⱨ',
+ 'ⱪ' => 'Ⱪ',
+ 'ⱬ' => 'Ⱬ',
+ 'ⱳ' => 'Ⱳ',
+ 'ⱶ' => 'Ⱶ',
+ 'ⲁ' => 'Ⲁ',
+ 'ⲃ' => 'Ⲃ',
+ 'ⲅ' => 'Ⲅ',
+ 'ⲇ' => 'Ⲇ',
+ 'ⲉ' => 'Ⲉ',
+ 'ⲋ' => 'Ⲋ',
+ 'ⲍ' => 'Ⲍ',
+ 'ⲏ' => 'Ⲏ',
+ 'ⲑ' => 'Ⲑ',
+ 'ⲓ' => 'Ⲓ',
+ 'ⲕ' => 'Ⲕ',
+ 'ⲗ' => 'Ⲗ',
+ 'ⲙ' => 'Ⲙ',
+ 'ⲛ' => 'Ⲛ',
+ 'ⲝ' => 'Ⲝ',
+ 'ⲟ' => 'Ⲟ',
+ 'ⲡ' => 'Ⲡ',
+ 'ⲣ' => 'Ⲣ',
+ 'ⲥ' => 'Ⲥ',
+ 'ⲧ' => 'Ⲧ',
+ 'ⲩ' => 'Ⲩ',
+ 'ⲫ' => 'Ⲫ',
+ 'ⲭ' => 'Ⲭ',
+ 'ⲯ' => 'Ⲯ',
+ 'ⲱ' => 'Ⲱ',
+ 'ⲳ' => 'Ⲳ',
+ 'ⲵ' => 'Ⲵ',
+ 'ⲷ' => 'Ⲷ',
+ 'ⲹ' => 'Ⲹ',
+ 'ⲻ' => 'Ⲻ',
+ 'ⲽ' => 'Ⲽ',
+ 'ⲿ' => 'Ⲿ',
+ 'ⳁ' => 'Ⳁ',
+ 'ⳃ' => 'Ⳃ',
+ 'ⳅ' => 'Ⳅ',
+ 'ⳇ' => 'Ⳇ',
+ 'ⳉ' => 'Ⳉ',
+ 'ⳋ' => 'Ⳋ',
+ 'ⳍ' => 'Ⳍ',
+ 'ⳏ' => 'Ⳏ',
+ 'ⳑ' => 'Ⳑ',
+ 'ⳓ' => 'Ⳓ',
+ 'ⳕ' => 'Ⳕ',
+ 'ⳗ' => 'Ⳗ',
+ 'ⳙ' => 'Ⳙ',
+ 'ⳛ' => 'Ⳛ',
+ 'ⳝ' => 'Ⳝ',
+ 'ⳟ' => 'Ⳟ',
+ 'ⳡ' => 'Ⳡ',
+ 'ⳣ' => 'Ⳣ',
+ 'ⳬ' => 'Ⳬ',
+ 'ⳮ' => 'Ⳮ',
+ 'ⳳ' => 'Ⳳ',
+ 'ⴀ' => 'Ⴀ',
+ 'ⴁ' => 'Ⴁ',
+ 'ⴂ' => 'Ⴂ',
+ 'ⴃ' => 'Ⴃ',
+ 'ⴄ' => 'Ⴄ',
+ 'ⴅ' => 'Ⴅ',
+ 'ⴆ' => 'Ⴆ',
+ 'ⴇ' => 'Ⴇ',
+ 'ⴈ' => 'Ⴈ',
+ 'ⴉ' => 'Ⴉ',
+ 'ⴊ' => 'Ⴊ',
+ 'ⴋ' => 'Ⴋ',
+ 'ⴌ' => 'Ⴌ',
+ 'ⴍ' => 'Ⴍ',
+ 'ⴎ' => 'Ⴎ',
+ 'ⴏ' => 'Ⴏ',
+ 'ⴐ' => 'Ⴐ',
+ 'ⴑ' => 'Ⴑ',
+ 'ⴒ' => 'Ⴒ',
+ 'ⴓ' => 'Ⴓ',
+ 'ⴔ' => 'Ⴔ',
+ 'ⴕ' => 'Ⴕ',
+ 'ⴖ' => 'Ⴖ',
+ 'ⴗ' => 'Ⴗ',
+ 'ⴘ' => 'Ⴘ',
+ 'ⴙ' => 'Ⴙ',
+ 'ⴚ' => 'Ⴚ',
+ 'ⴛ' => 'Ⴛ',
+ 'ⴜ' => 'Ⴜ',
+ 'ⴝ' => 'Ⴝ',
+ 'ⴞ' => 'Ⴞ',
+ 'ⴟ' => 'Ⴟ',
+ 'ⴠ' => 'Ⴠ',
+ 'ⴡ' => 'Ⴡ',
+ 'ⴢ' => 'Ⴢ',
+ 'ⴣ' => 'Ⴣ',
+ 'ⴤ' => 'Ⴤ',
+ 'ⴥ' => 'Ⴥ',
+ 'ⴧ' => 'Ⴧ',
+ 'ⴭ' => 'Ⴭ',
+ 'ꙁ' => 'Ꙁ',
+ 'ꙃ' => 'Ꙃ',
+ 'ꙅ' => 'Ꙅ',
+ 'ꙇ' => 'Ꙇ',
+ 'ꙉ' => 'Ꙉ',
+ 'ꙋ' => 'Ꙋ',
+ 'ꙍ' => 'Ꙍ',
+ 'ꙏ' => 'Ꙏ',
+ 'ꙑ' => 'Ꙑ',
+ 'ꙓ' => 'Ꙓ',
+ 'ꙕ' => 'Ꙕ',
+ 'ꙗ' => 'Ꙗ',
+ 'ꙙ' => 'Ꙙ',
+ 'ꙛ' => 'Ꙛ',
+ 'ꙝ' => 'Ꙝ',
+ 'ꙟ' => 'Ꙟ',
+ 'ꙡ' => 'Ꙡ',
+ 'ꙣ' => 'Ꙣ',
+ 'ꙥ' => 'Ꙥ',
+ 'ꙧ' => 'Ꙧ',
+ 'ꙩ' => 'Ꙩ',
+ 'ꙫ' => 'Ꙫ',
+ 'ꙭ' => 'Ꙭ',
+ 'ꚁ' => 'Ꚁ',
+ 'ꚃ' => 'Ꚃ',
+ 'ꚅ' => 'Ꚅ',
+ 'ꚇ' => 'Ꚇ',
+ 'ꚉ' => 'Ꚉ',
+ 'ꚋ' => 'Ꚋ',
+ 'ꚍ' => 'Ꚍ',
+ 'ꚏ' => 'Ꚏ',
+ 'ꚑ' => 'Ꚑ',
+ 'ꚓ' => 'Ꚓ',
+ 'ꚕ' => 'Ꚕ',
+ 'ꚗ' => 'Ꚗ',
+ 'ꚙ' => 'Ꚙ',
+ 'ꚛ' => 'Ꚛ',
+ 'ꜣ' => 'Ꜣ',
+ 'ꜥ' => 'Ꜥ',
+ 'ꜧ' => 'Ꜧ',
+ 'ꜩ' => 'Ꜩ',
+ 'ꜫ' => 'Ꜫ',
+ 'ꜭ' => 'Ꜭ',
+ 'ꜯ' => 'Ꜯ',
+ 'ꜳ' => 'Ꜳ',
+ 'ꜵ' => 'Ꜵ',
+ 'ꜷ' => 'Ꜷ',
+ 'ꜹ' => 'Ꜹ',
+ 'ꜻ' => 'Ꜻ',
+ 'ꜽ' => 'Ꜽ',
+ 'ꜿ' => 'Ꜿ',
+ 'ꝁ' => 'Ꝁ',
+ 'ꝃ' => 'Ꝃ',
+ 'ꝅ' => 'Ꝅ',
+ 'ꝇ' => 'Ꝇ',
+ 'ꝉ' => 'Ꝉ',
+ 'ꝋ' => 'Ꝋ',
+ 'ꝍ' => 'Ꝍ',
+ 'ꝏ' => 'Ꝏ',
+ 'ꝑ' => 'Ꝑ',
+ 'ꝓ' => 'Ꝓ',
+ 'ꝕ' => 'Ꝕ',
+ 'ꝗ' => 'Ꝗ',
+ 'ꝙ' => 'Ꝙ',
+ 'ꝛ' => 'Ꝛ',
+ 'ꝝ' => 'Ꝝ',
+ 'ꝟ' => 'Ꝟ',
+ 'ꝡ' => 'Ꝡ',
+ 'ꝣ' => 'Ꝣ',
+ 'ꝥ' => 'Ꝥ',
+ 'ꝧ' => 'Ꝧ',
+ 'ꝩ' => 'Ꝩ',
+ 'ꝫ' => 'Ꝫ',
+ 'ꝭ' => 'Ꝭ',
+ 'ꝯ' => 'Ꝯ',
+ 'ꝺ' => 'Ꝺ',
+ 'ꝼ' => 'Ꝼ',
+ 'ꝿ' => 'Ꝿ',
+ 'ꞁ' => 'Ꞁ',
+ 'ꞃ' => 'Ꞃ',
+ 'ꞅ' => 'Ꞅ',
+ 'ꞇ' => 'Ꞇ',
+ 'ꞌ' => 'Ꞌ',
+ 'ꞑ' => 'Ꞑ',
+ 'ꞓ' => 'Ꞓ',
+ 'ꞗ' => 'Ꞗ',
+ 'ꞙ' => 'Ꞙ',
+ 'ꞛ' => 'Ꞛ',
+ 'ꞝ' => 'Ꞝ',
+ 'ꞟ' => 'Ꞟ',
+ 'ꞡ' => 'Ꞡ',
+ 'ꞣ' => 'Ꞣ',
+ 'ꞥ' => 'Ꞥ',
+ 'ꞧ' => 'Ꞧ',
+ 'ꞩ' => 'Ꞩ',
+ 'a' => 'A',
+ 'b' => 'B',
+ 'c' => 'C',
+ 'd' => 'D',
+ 'e' => 'E',
+ 'f' => 'F',
+ 'g' => 'G',
+ 'h' => 'H',
+ 'i' => 'I',
+ 'j' => 'J',
+ 'k' => 'K',
+ 'l' => 'L',
+ 'm' => 'M',
+ 'n' => 'N',
+ 'o' => 'O',
+ 'p' => 'P',
+ 'q' => 'Q',
+ 'r' => 'R',
+ 's' => 'S',
+ 't' => 'T',
+ 'u' => 'U',
+ 'v' => 'V',
+ 'w' => 'W',
+ 'x' => 'X',
+ 'y' => 'Y',
+ 'z' => 'Z',
+ '𐐨' => '𐐀',
+ '𐐩' => '𐐁',
+ '𐐪' => '𐐂',
+ '𐐫' => '𐐃',
+ '𐐬' => '𐐄',
+ '𐐭' => '𐐅',
+ '𐐮' => '𐐆',
+ '𐐯' => '𐐇',
+ '𐐰' => '𐐈',
+ '𐐱' => '𐐉',
+ '𐐲' => '𐐊',
+ '𐐳' => '𐐋',
+ '𐐴' => '𐐌',
+ '𐐵' => '𐐍',
+ '𐐶' => '𐐎',
+ '𐐷' => '𐐏',
+ '𐐸' => '𐐐',
+ '𐐹' => '𐐑',
+ '𐐺' => '𐐒',
+ '𐐻' => '𐐓',
+ '𐐼' => '𐐔',
+ '𐐽' => '𐐕',
+ '𐐾' => '𐐖',
+ '𐐿' => '𐐗',
+ '𐑀' => '𐐘',
+ '𐑁' => '𐐙',
+ '𐑂' => '𐐚',
+ '𐑃' => '𐐛',
+ '𐑄' => '𐐜',
+ '𐑅' => '𐐝',
+ '𐑆' => '𐐞',
+ '𐑇' => '𐐟',
+ '𐑈' => '𐐠',
+ '𐑉' => '𐐡',
+ '𐑊' => '𐐢',
+ '𐑋' => '𐐣',
+ '𐑌' => '𐐤',
+ '𐑍' => '𐐥',
+ '𐑎' => '𐐦',
+ '𐑏' => '𐐧',
+ '𑣀' => '𑢠',
+ '𑣁' => '𑢡',
+ '𑣂' => '𑢢',
+ '𑣃' => '𑢣',
+ '𑣄' => '𑢤',
+ '𑣅' => '𑢥',
+ '𑣆' => '𑢦',
+ '𑣇' => '𑢧',
+ '𑣈' => '𑢨',
+ '𑣉' => '𑢩',
+ '𑣊' => '𑢪',
+ '𑣋' => '𑢫',
+ '𑣌' => '𑢬',
+ '𑣍' => '𑢭',
+ '𑣎' => '𑢮',
+ '𑣏' => '𑢯',
+ '𑣐' => '𑢰',
+ '𑣑' => '𑢱',
+ '𑣒' => '𑢲',
+ '𑣓' => '𑢳',
+ '𑣔' => '𑢴',
+ '𑣕' => '𑢵',
+ '𑣖' => '𑢶',
+ '𑣗' => '𑢷',
+ '𑣘' => '𑢸',
+ '𑣙' => '𑢹',
+ '𑣚' => '𑢺',
+ '𑣛' => '𑢻',
+ '𑣜' => '𑢼',
+ '𑣝' => '𑢽',
+ '𑣞' => '𑢾',
+ '𑣟' => '𑢿',
+);
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-mbstring/bootstrap.php b/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-mbstring/bootstrap.php
new file mode 100644
index 0000000..b36a092
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-mbstring/bootstrap.php
@@ -0,0 +1,141 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Symfony\Polyfill\Mbstring as p;
+
+if (!function_exists('mb_convert_encoding')) {
+ function mb_convert_encoding($s, $to, $from = null) { return p\Mbstring::mb_convert_encoding($s, $to, $from); }
+}
+if (!function_exists('mb_decode_mimeheader')) {
+ function mb_decode_mimeheader($s) { return p\Mbstring::mb_decode_mimeheader($s); }
+}
+if (!function_exists('mb_encode_mimeheader')) {
+ function mb_encode_mimeheader($s, $charset = null, $transferEnc = null, $lf = null, $indent = null) { return p\Mbstring::mb_encode_mimeheader($s, $charset, $transferEnc, $lf, $indent); }
+}
+if (!function_exists('mb_decode_numericentity')) {
+ function mb_decode_numericentity($s, $convmap, $enc = null) { return p\Mbstring::mb_decode_numericentity($s, $convmap, $enc); }
+}
+if (!function_exists('mb_encode_numericentity')) {
+ function mb_encode_numericentity($s, $convmap, $enc = null, $is_hex = false) { return p\Mbstring::mb_encode_numericentity($s, $convmap, $enc, $is_hex); }
+}
+if (!function_exists('mb_convert_case')) {
+ function mb_convert_case($s, $mode, $enc = null) { return p\Mbstring::mb_convert_case($s, $mode, $enc); }
+}
+if (!function_exists('mb_internal_encoding')) {
+ function mb_internal_encoding($enc = null) { return p\Mbstring::mb_internal_encoding($enc); }
+}
+if (!function_exists('mb_language')) {
+ function mb_language($lang = null) { return p\Mbstring::mb_language($lang); }
+}
+if (!function_exists('mb_list_encodings')) {
+ function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); }
+}
+if (!function_exists('mb_encoding_aliases')) {
+ function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); }
+}
+if (!function_exists('mb_check_encoding')) {
+ function mb_check_encoding($var = null, $encoding = null) { return p\Mbstring::mb_check_encoding($var, $encoding); }
+}
+if (!function_exists('mb_detect_encoding')) {
+ function mb_detect_encoding($str, $encodingList = null, $strict = false) { return p\Mbstring::mb_detect_encoding($str, $encodingList, $strict); }
+}
+if (!function_exists('mb_detect_order')) {
+ function mb_detect_order($encodingList = null) { return p\Mbstring::mb_detect_order($encodingList); }
+}
+if (!function_exists('mb_parse_str')) {
+ function mb_parse_str($s, &$result = array()) { parse_str($s, $result); }
+}
+if (!function_exists('mb_strlen')) {
+ function mb_strlen($s, $enc = null) { return p\Mbstring::mb_strlen($s, $enc); }
+}
+if (!function_exists('mb_strpos')) {
+ function mb_strpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strpos($s, $needle, $offset, $enc); }
+}
+if (!function_exists('mb_strtolower')) {
+ function mb_strtolower($s, $enc = null) { return p\Mbstring::mb_strtolower($s, $enc); }
+}
+if (!function_exists('mb_strtoupper')) {
+ function mb_strtoupper($s, $enc = null) { return p\Mbstring::mb_strtoupper($s, $enc); }
+}
+if (!function_exists('mb_substitute_character')) {
+ function mb_substitute_character($char = null) { return p\Mbstring::mb_substitute_character($char); }
+}
+if (!function_exists('mb_substr')) {
+ function mb_substr($s, $start, $length = 2147483647, $enc = null) { return p\Mbstring::mb_substr($s, $start, $length, $enc); }
+}
+if (!function_exists('mb_stripos')) {
+ function mb_stripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_stripos($s, $needle, $offset, $enc); }
+}
+if (!function_exists('mb_stristr')) {
+ function mb_stristr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_stristr($s, $needle, $part, $enc); }
+}
+if (!function_exists('mb_strrchr')) {
+ function mb_strrchr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrchr($s, $needle, $part, $enc); }
+}
+if (!function_exists('mb_strrichr')) {
+ function mb_strrichr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrichr($s, $needle, $part, $enc); }
+}
+if (!function_exists('mb_strripos')) {
+ function mb_strripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strripos($s, $needle, $offset, $enc); }
+}
+if (!function_exists('mb_strrpos')) {
+ function mb_strrpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strrpos($s, $needle, $offset, $enc); }
+}
+if (!function_exists('mb_strstr')) {
+ function mb_strstr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strstr($s, $needle, $part, $enc); }
+}
+if (!function_exists('mb_get_info')) {
+ function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); }
+}
+if (!function_exists('mb_http_output')) {
+ function mb_http_output($enc = null) { return p\Mbstring::mb_http_output($enc); }
+}
+if (!function_exists('mb_strwidth')) {
+ function mb_strwidth($s, $enc = null) { return p\Mbstring::mb_strwidth($s, $enc); }
+}
+if (!function_exists('mb_substr_count')) {
+ function mb_substr_count($haystack, $needle, $enc = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $enc); }
+}
+if (!function_exists('mb_output_handler')) {
+ function mb_output_handler($contents, $status) { return p\Mbstring::mb_output_handler($contents, $status); }
+}
+if (!function_exists('mb_http_input')) {
+ function mb_http_input($type = '') { return p\Mbstring::mb_http_input($type); }
+}
+if (!function_exists('mb_convert_variables')) {
+ function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null) { return p\Mbstring::mb_convert_variables($toEncoding, $fromEncoding, $a, $b, $c, $d, $e, $f); }
+}
+if (!function_exists('mb_ord')) {
+ function mb_ord($s, $enc = null) { return p\Mbstring::mb_ord($s, $enc); }
+}
+if (!function_exists('mb_chr')) {
+ function mb_chr($code, $enc = null) { return p\Mbstring::mb_chr($code, $enc); }
+}
+if (!function_exists('mb_scrub')) {
+ function mb_scrub($s, $enc = null) { $enc = null === $enc ? mb_internal_encoding() : $enc; return mb_convert_encoding($s, $enc, $enc); }
+}
+if (!function_exists('mb_str_split')) {
+ function mb_str_split($string, $split_length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $split_length, $encoding); }
+}
+
+if (extension_loaded('mbstring')) {
+ return;
+}
+
+if (!defined('MB_CASE_UPPER')) {
+ define('MB_CASE_UPPER', 0);
+}
+if (!defined('MB_CASE_LOWER')) {
+ define('MB_CASE_LOWER', 1);
+}
+if (!defined('MB_CASE_TITLE')) {
+ define('MB_CASE_TITLE', 2);
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-php72/LICENSE b/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-php72/LICENSE
new file mode 100644
index 0000000..4cd8bdd
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-php72/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2015-2019 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-php72/Php72.php b/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-php72/Php72.php
new file mode 100644
index 0000000..9b3edc7
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/symfony/polyfill-php72/Php72.php
@@ -0,0 +1,217 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Polyfill\Php72;
+
+/**
+ * @author Nicolas Grekas
+ * @author Dariusz Rumiński ' .
+ __( 'Action Scheduler is a scalable, traceable job queue for background processing large sets of actions. Action Scheduler works by triggering an action hook to run at some time in the future. Scheduled actions can also be scheduled to run on a recurring schedule.', 'action-scheduler' ) .
+ ' ' . wp_kses_post( $notice ) . ' ' . wp_kses_post( $notice['message'] ) . ' %s' . sprintf( __( 'About Action Scheduler %s', 'action-scheduler' ), $as_version ) . '
' .
+ '' . __( 'Scheduled Action Columns', 'action-scheduler' ) . '
' .
+ '' .
+ sprintf( '
',
+ )
+ );
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.php
new file mode 100644
index 0000000..57706a2
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_AsyncRequest_QueueRunner.php
@@ -0,0 +1,97 @@
+store = $store;
+ }
+
+ /**
+ * Handle async requests
+ *
+ * Run a queue, and maybe dispatch another async request to run another queue
+ * if there are still pending actions after completing a queue in this request.
+ */
+ protected function handle() {
+ do_action( 'action_scheduler_run_queue', 'Async Request' ); // run a queue in the same way as WP Cron, but declare the Async Request context
+
+ $sleep_seconds = $this->get_sleep_seconds();
+
+ if ( $sleep_seconds ) {
+ sleep( $sleep_seconds );
+ }
+
+ $this->maybe_dispatch();
+ }
+
+ /**
+ * If the async request runner is needed and allowed to run, dispatch a request.
+ */
+ public function maybe_dispatch() {
+ if ( ! $this->allow() ) {
+ return;
+ }
+
+ $this->dispatch();
+ ActionScheduler_QueueRunner::instance()->unhook_dispatch_async_request();
+ }
+
+ /**
+ * Only allow async requests when needed.
+ *
+ * Also allow 3rd party code to disable running actions via async requests.
+ */
+ protected function allow() {
+
+ if ( ! has_action( 'action_scheduler_run_queue' ) || ActionScheduler::runner()->has_maximum_concurrent_batches() || ! $this->store->has_pending_actions_due() ) {
+ $allow = false;
+ } else {
+ $allow = true;
+ }
+
+ return apply_filters( 'action_scheduler_allow_async_request_runner', $allow );
+ }
+
+ /**
+ * Chaining async requests can crash MySQL. A brief sleep call in PHP prevents that.
+ */
+ protected function get_sleep_seconds() {
+ return apply_filters( 'action_scheduler_async_request_sleep_seconds', 5, $this );
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Compatibility.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Compatibility.php
new file mode 100644
index 0000000..c06e5a4
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Compatibility.php
@@ -0,0 +1,99 @@
+ $wp_max_limit_int && $filtered_limit_int > $current_limit_int ) ) {
+ if ( false !== @ini_set( 'memory_limit', $filtered_limit ) ) {
+ return $filtered_limit;
+ } else {
+ return false;
+ }
+ } elseif ( -1 === $wp_max_limit_int || $wp_max_limit_int > $current_limit_int ) {
+ if ( false !== @ini_set( 'memory_limit', $wp_max_limit ) ) {
+ return $wp_max_limit;
+ } else {
+ return false;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Attempts to raise the PHP timeout for time intensive processes.
+ *
+ * Only allows raising the existing limit and prevents lowering it. Wrapper for wc_set_time_limit(), when available.
+ *
+ * @param int The time limit in seconds.
+ */
+ public static function raise_time_limit( $limit = 0 ) {
+ if ( $limit < ini_get( 'max_execution_time' ) ) {
+ return;
+ }
+
+ if ( function_exists( 'wc_set_time_limit' ) ) {
+ wc_set_time_limit( $limit );
+ } elseif ( function_exists( 'set_time_limit' ) && false === strpos( ini_get( 'disable_functions' ), 'set_time_limit' ) && ! ini_get( 'safe_mode' ) ) {
+ @set_time_limit( $limit );
+ }
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php
new file mode 100644
index 0000000..eb69847
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DataController.php
@@ -0,0 +1,187 @@
+=' );
+ return $php_support && apply_filters( 'action_scheduler_migration_dependencies_met', true );
+ }
+
+ /**
+ * Get a flag indicating whether the migration is complete.
+ *
+ * @return bool Whether the flag has been set marking the migration as complete
+ */
+ public static function is_migration_complete() {
+ return get_option( self::STATUS_FLAG ) === self::STATUS_COMPLETE;
+ }
+
+ /**
+ * Mark the migration as complete.
+ */
+ public static function mark_migration_complete() {
+ update_option( self::STATUS_FLAG, self::STATUS_COMPLETE );
+ }
+
+ /**
+ * Unmark migration when a plugin is de-activated. Will not work in case of silent activation, for example in an update.
+ * We do this to mitigate the bug of lost actions which happens if there was an AS 2.x to AS 3.x migration in the past, but that plugin is now
+ * deactivated and the site was running on AS 2.x again.
+ */
+ public static function mark_migration_incomplete() {
+ delete_option( self::STATUS_FLAG );
+ }
+
+ /**
+ * Set the action store class name.
+ *
+ * @param string $class Classname of the store class.
+ *
+ * @return string
+ */
+ public static function set_store_class( $class ) {
+ return self::DATASTORE_CLASS;
+ }
+
+ /**
+ * Set the action logger class name.
+ *
+ * @param string $class Classname of the logger class.
+ *
+ * @return string
+ */
+ public static function set_logger_class( $class ) {
+ return self::LOGGER_CLASS;
+ }
+
+ /**
+ * Set the sleep time in seconds.
+ *
+ * @param integer $sleep_time The number of seconds to pause before resuming operation.
+ */
+ public static function set_sleep_time( $sleep_time ) {
+ self::$sleep_time = (int) $sleep_time;
+ }
+
+ /**
+ * Set the tick count required for freeing memory.
+ *
+ * @param integer $free_ticks The number of ticks to free memory on.
+ */
+ public static function set_free_ticks( $free_ticks ) {
+ self::$free_ticks = (int) $free_ticks;
+ }
+
+ /**
+ * Free memory if conditions are met.
+ *
+ * @param int $ticks Current tick count.
+ */
+ public static function maybe_free_memory( $ticks ) {
+ if ( self::$free_ticks && 0 === $ticks % self::$free_ticks ) {
+ self::free_memory();
+ }
+ }
+
+ /**
+ * Reduce memory footprint by clearing the database query and object caches.
+ */
+ public static function free_memory() {
+ if ( 0 < self::$sleep_time ) {
+ /* translators: %d: amount of time */
+ \WP_CLI::warning( sprintf( _n( 'Stopped the insanity for %d second', 'Stopped the insanity for %d seconds', self::$sleep_time, 'action-scheduler' ), self::$sleep_time ) );
+ sleep( self::$sleep_time );
+ }
+
+ \WP_CLI::warning( __( 'Attempting to reduce used memory...', 'action-scheduler' ) );
+
+ /**
+ * @var $wpdb \wpdb
+ * @var $wp_object_cache \WP_Object_Cache
+ */
+ global $wpdb, $wp_object_cache;
+
+ $wpdb->queries = array();
+
+ if ( ! is_a( $wp_object_cache, 'WP_Object_Cache' ) ) {
+ return;
+ }
+
+ $wp_object_cache->group_ops = array();
+ $wp_object_cache->stats = array();
+ $wp_object_cache->memcache_debug = array();
+ $wp_object_cache->cache = array();
+
+ if ( is_callable( array( $wp_object_cache, '__remoteset' ) ) ) {
+ call_user_func( array( $wp_object_cache, '__remoteset' ) ); // important
+ }
+ }
+
+ /**
+ * Connect to table datastores if migration is complete.
+ * Otherwise, proceed with the migration if the dependencies have been met.
+ */
+ public static function init() {
+ if ( self::is_migration_complete() ) {
+ add_filter( 'action_scheduler_store_class', array( 'ActionScheduler_DataController', 'set_store_class' ), 100 );
+ add_filter( 'action_scheduler_logger_class', array( 'ActionScheduler_DataController', 'set_logger_class' ), 100 );
+ add_action( 'deactivate_plugin', array( 'ActionScheduler_DataController', 'mark_migration_incomplete' ) );
+ } elseif ( self::dependencies_met() ) {
+ Controller::init();
+ }
+
+ add_action( 'action_scheduler/progress_tick', array( 'ActionScheduler_DataController', 'maybe_free_memory' ) );
+ }
+
+ /**
+ * Singleton factory.
+ */
+ public static function instance() {
+ if ( ! isset( self::$instance ) ) {
+ self::$instance = new static();
+ }
+
+ return self::$instance;
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DateTime.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DateTime.php
new file mode 100644
index 0000000..5e8743c
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_DateTime.php
@@ -0,0 +1,76 @@
+format( 'U' );
+ }
+
+ /**
+ * Set the UTC offset.
+ *
+ * This represents a fixed offset instead of a timezone setting.
+ *
+ * @param $offset
+ */
+ public function setUtcOffset( $offset ) {
+ $this->utcOffset = intval( $offset );
+ }
+
+ /**
+ * Returns the timezone offset.
+ *
+ * @return int
+ * @link http://php.net/manual/en/datetime.getoffset.php
+ */
+ public function getOffset() {
+ return $this->utcOffset ? $this->utcOffset : parent::getOffset();
+ }
+
+ /**
+ * Set the TimeZone associated with the DateTime
+ *
+ * @param DateTimeZone $timezone
+ *
+ * @return static
+ * @link http://php.net/manual/en/datetime.settimezone.php
+ */
+ public function setTimezone( $timezone ) {
+ $this->utcOffset = 0;
+ parent::setTimezone( $timezone );
+
+ return $this;
+ }
+
+ /**
+ * Get the timestamp with the WordPress timezone offset added or subtracted.
+ *
+ * @since 3.0.0
+ * @return int
+ */
+ public function getOffsetTimestamp() {
+ return $this->getTimestamp() + $this->getOffset();
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Exception.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Exception.php
new file mode 100644
index 0000000..353d3c0
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Exception.php
@@ -0,0 +1,11 @@
+store = $store;
+ }
+
+ public function attach( ActionScheduler_ActionClaim $claim ) {
+ $this->claim = $claim;
+ add_action( 'shutdown', array( $this, 'handle_unexpected_shutdown' ) );
+ add_action( 'action_scheduler_before_execute', array( $this, 'track_current_action' ), 0, 1 );
+ add_action( 'action_scheduler_after_execute', array( $this, 'untrack_action' ), 0, 0 );
+ add_action( 'action_scheduler_execution_ignored', array( $this, 'untrack_action' ), 0, 0 );
+ add_action( 'action_scheduler_failed_execution', array( $this, 'untrack_action' ), 0, 0 );
+ }
+
+ public function detach() {
+ $this->claim = NULL;
+ $this->untrack_action();
+ remove_action( 'shutdown', array( $this, 'handle_unexpected_shutdown' ) );
+ remove_action( 'action_scheduler_before_execute', array( $this, 'track_current_action' ), 0 );
+ remove_action( 'action_scheduler_after_execute', array( $this, 'untrack_action' ), 0 );
+ remove_action( 'action_scheduler_execution_ignored', array( $this, 'untrack_action' ), 0 );
+ remove_action( 'action_scheduler_failed_execution', array( $this, 'untrack_action' ), 0 );
+ }
+
+ public function track_current_action( $action_id ) {
+ $this->action_id = $action_id;
+ }
+
+ public function untrack_action() {
+ $this->action_id = 0;
+ }
+
+ public function handle_unexpected_shutdown() {
+ if ( $error = error_get_last() ) {
+ if ( in_array( $error['type'], array( E_ERROR, E_PARSE, E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR ) ) ) {
+ if ( !empty($this->action_id) ) {
+ $this->store->mark_failure( $this->action_id );
+ do_action( 'action_scheduler_unexpected_shutdown', $this->action_id, $error );
+ }
+ }
+ $this->store->release_claim( $this->claim );
+ }
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_InvalidActionException.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_InvalidActionException.php
new file mode 100644
index 0000000..40b4559
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_InvalidActionException.php
@@ -0,0 +1,47 @@
+ label).
+ *
+ * @var array
+ */
+ protected $columns = array();
+
+ /**
+ * Actions (name => label).
+ *
+ * @var array
+ */
+ protected $row_actions = array();
+
+ /**
+ * The active data stores
+ *
+ * @var ActionScheduler_Store
+ */
+ protected $store;
+
+ /**
+ * A logger to use for getting action logs to display
+ *
+ * @var ActionScheduler_Logger
+ */
+ protected $logger;
+
+ /**
+ * A ActionScheduler_QueueRunner runner instance (or child class)
+ *
+ * @var ActionScheduler_QueueRunner
+ */
+ protected $runner;
+
+ /**
+ * Bulk actions. The key of the array is the method name of the implementation:
+ *
+ * bulk_';
+ foreach ( $row['args'] as $key => $value ) {
+ $row_html .= sprintf( '
';
+
+ return apply_filters( 'action_scheduler_list_table_column_args', $row_html, $row );
+ }
+
+ /**
+ * Prints the logs entries inline. We do so to avoid loading Javascript and other hacks to show it in a modal.
+ *
+ * @param array $row Action array.
+ * @return string
+ */
+ public function column_log_entries( array $row ) {
+
+ $log_entries_html = '%s => %s
';
+
+ $timezone = new DateTimezone( 'UTC' );
+
+ foreach ( $row['log_entries'] as $log_entry ) {
+ $log_entries_html .= $this->get_log_entry_html( $log_entry, $timezone );
+ }
+
+ $log_entries_html .= '
';
+
+ return $log_entries_html;
+ }
+
+ /**
+ * Prints the logs entries inline. We do so to avoid loading Javascript and other hacks to show it in a modal.
+ *
+ * @param ActionScheduler_LogEntry $log_entry
+ * @param DateTimezone $timezone
+ * @return string
+ */
+ protected function get_log_entry_html( ActionScheduler_LogEntry $log_entry, DateTimezone $timezone ) {
+ $date = $log_entry->get_date();
+ $date->setTimezone( $timezone );
+ return sprintf( '
%s' . $action->get_hook() . '
';
+ if ( 1 == $notification['success'] ) {
+ $class = 'updated';
+ switch ( $notification['row_action_type'] ) {
+ case 'run' :
+ /* translators: %s: action HTML */
+ $action_message_html = sprintf( __( 'Successfully executed action: %s', 'action-scheduler' ), $action_hook_html );
+ break;
+ case 'cancel' :
+ /* translators: %s: action HTML */
+ $action_message_html = sprintf( __( 'Successfully canceled action: %s', 'action-scheduler' ), $action_hook_html );
+ break;
+ default :
+ /* translators: %s: action HTML */
+ $action_message_html = sprintf( __( 'Successfully processed change for action: %s', 'action-scheduler' ), $action_hook_html );
+ break;
+ }
+ } else {
+ $class = 'error';
+ /* translators: 1: action HTML 2: action ID 3: error message */
+ $action_message_html = sprintf( __( 'Could not process change for action: "%1$s" (ID: %2$d). Error: %3$s', 'action-scheduler' ), $action_hook_html, esc_html( $notification['action_id'] ), esc_html( $notification['error_message'] ) );
+ }
+
+ $action_message_html = apply_filters( 'action_scheduler_admin_notice_html', $action_message_html, $action, $notification );
+
+ $this->admin_notices[] = array(
+ 'class' => $class,
+ 'message' => $action_message_html,
+ );
+ }
+
+ parent::display_admin_notices();
+ }
+
+ /**
+ * Prints the scheduled date in a human friendly format.
+ *
+ * @param array $row The array representation of the current row of the table
+ *
+ * @return string
+ */
+ public function column_schedule( $row ) {
+ return $this->get_schedule_display_string( $row['schedule'] );
+ }
+
+ /**
+ * Get the scheduled date in a human friendly format.
+ *
+ * @param ActionScheduler_Schedule $schedule
+ * @return string
+ */
+ protected function get_schedule_display_string( ActionScheduler_Schedule $schedule ) {
+
+ $schedule_display_string = '';
+
+ if ( ! $schedule->get_date() ) {
+ return '0000-00-00 00:00:00';
+ }
+
+ $next_timestamp = $schedule->get_date()->getTimestamp();
+
+ $schedule_display_string .= $schedule->get_date()->format( 'Y-m-d H:i:s O' );
+ $schedule_display_string .= '
';
+
+ if ( gmdate( 'U' ) > $next_timestamp ) {
+ /* translators: %s: date interval */
+ $schedule_display_string .= sprintf( __( ' (%s ago)', 'action-scheduler' ), self::human_interval( gmdate( 'U' ) - $next_timestamp ) );
+ } else {
+ /* translators: %s: date interval */
+ $schedule_display_string .= sprintf( __( ' (%s)', 'action-scheduler' ), self::human_interval( $next_timestamp - gmdate( 'U' ) ) );
+ }
+
+ return $schedule_display_string;
+ }
+
+ /**
+ * Bulk delete
+ *
+ * Deletes actions based on their ID. This is the handler for the bulk delete. It assumes the data
+ * properly validated by the callee and it will delete the actions without any extra validation.
+ *
+ * @param array $ids
+ * @param string $ids_sql Inherited and unused
+ */
+ protected function bulk_delete( array $ids, $ids_sql ) {
+ foreach ( $ids as $id ) {
+ $this->store->delete_action( $id );
+ }
+ }
+
+ /**
+ * Implements the logic behind running an action. ActionScheduler_Abstract_ListTable validates the request and their
+ * parameters are valid.
+ *
+ * @param int $action_id
+ */
+ protected function row_action_cancel( $action_id ) {
+ $this->process_row_action( $action_id, 'cancel' );
+ }
+
+ /**
+ * Implements the logic behind running an action. ActionScheduler_Abstract_ListTable validates the request and their
+ * parameters are valid.
+ *
+ * @param int $action_id
+ */
+ protected function row_action_run( $action_id ) {
+ $this->process_row_action( $action_id, 'run' );
+ }
+
+ /**
+ * Force the data store schema updates.
+ */
+ protected function recreate_tables() {
+ if ( is_a( $this->store, 'ActionScheduler_HybridStore' ) ) {
+ $store = $this->store;
+ } else {
+ $store = new ActionScheduler_HybridStore();
+ }
+ add_action( 'action_scheduler/created_table', array( $store, 'set_autoincrement' ), 10, 2 );
+
+ $store_schema = new ActionScheduler_StoreSchema();
+ $logger_schema = new ActionScheduler_LoggerSchema();
+ $store_schema->register_tables( true );
+ $logger_schema->register_tables( true );
+
+ remove_action( 'action_scheduler/created_table', array( $store, 'set_autoincrement' ), 10 );
+ }
+ /**
+ * Implements the logic behind processing an action once an action link is clicked on the list table.
+ *
+ * @param int $action_id
+ * @param string $row_action_type The type of action to perform on the action.
+ */
+ protected function process_row_action( $action_id, $row_action_type ) {
+ try {
+ switch ( $row_action_type ) {
+ case 'run' :
+ $this->runner->process_action( $action_id, 'Admin List Table' );
+ break;
+ case 'cancel' :
+ $this->store->cancel_action( $action_id );
+ break;
+ }
+ $success = 1;
+ $error_message = '';
+ } catch ( Exception $e ) {
+ $success = 0;
+ $error_message = $e->getMessage();
+ }
+
+ set_transient( 'action_scheduler_admin_notice', compact( 'action_id', 'success', 'error_message', 'row_action_type' ), 30 );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public function prepare_items() {
+ $this->prepare_column_headers();
+
+ $per_page = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
+ $query = array(
+ 'per_page' => $per_page,
+ 'offset' => $this->get_items_offset(),
+ 'status' => $this->get_request_status(),
+ 'orderby' => $this->get_request_orderby(),
+ 'order' => $this->get_request_order(),
+ 'search' => $this->get_request_search_query(),
+ );
+
+ $this->items = array();
+
+ $total_items = $this->store->query_actions( $query, 'count' );
+
+ $status_labels = $this->store->get_status_labels();
+
+ foreach ( $this->store->query_actions( $query ) as $action_id ) {
+ try {
+ $action = $this->store->fetch_action( $action_id );
+ } catch ( Exception $e ) {
+ continue;
+ }
+ if ( is_a( $action, 'ActionScheduler_NullAction' ) ) {
+ continue;
+ }
+ $this->items[ $action_id ] = array(
+ 'ID' => $action_id,
+ 'hook' => $action->get_hook(),
+ 'status_name' => $this->store->get_status( $action_id ),
+ 'status' => $status_labels[ $this->store->get_status( $action_id ) ],
+ 'args' => $action->get_args(),
+ 'group' => $action->get_group(),
+ 'log_entries' => $this->logger->get_logs( $action_id ),
+ 'claim_id' => $this->store->get_claim_id( $action_id ),
+ 'recurrence' => $this->get_recurrence( $action ),
+ 'schedule' => $action->get_schedule(),
+ );
+ }
+
+ $this->set_pagination_args( array(
+ 'total_items' => $total_items,
+ 'per_page' => $per_page,
+ 'total_pages' => ceil( $total_items / $per_page ),
+ ) );
+ }
+
+ /**
+ * Prints the available statuses so the user can click to filter.
+ */
+ protected function display_filter_by_status() {
+ $this->status_counts = $this->store->action_counts();
+ parent::display_filter_by_status();
+ }
+
+ /**
+ * Get the text to display in the search box on the list table.
+ */
+ protected function get_search_box_button_text() {
+ return __( 'Search hook, args and claim ID', 'action-scheduler' );
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_LogEntry.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_LogEntry.php
new file mode 100644
index 0000000..649636d
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_LogEntry.php
@@ -0,0 +1,67 @@
+comment_type
+ * to ActionScheduler_LogEntry::__construct(), goodness knows why, and the Follow-up Emails plugin
+ * hard-codes loading its own version of ActionScheduler_wpCommentLogger with that out-dated method,
+ * goodness knows why, so we need to guard against that here instead of using a DateTime type declaration
+ * for the constructor's 3rd param of $date and causing a fatal error with older versions of FUE.
+ */
+ if ( null !== $date && ! is_a( $date, 'DateTime' ) ) {
+ _doing_it_wrong( __METHOD__, 'The third parameter must be a valid DateTime instance, or null.', '2.0.0' );
+ $date = null;
+ }
+
+ $this->action_id = $action_id;
+ $this->message = $message;
+ $this->date = $date ? $date : new Datetime;
+ }
+
+ /**
+ * Returns the date when this log entry was created
+ *
+ * @return Datetime
+ */
+ public function get_date() {
+ return $this->date;
+ }
+
+ public function get_action_id() {
+ return $this->action_id;
+ }
+
+ public function get_message() {
+ return $this->message;
+ }
+}
+
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_NullLogEntry.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_NullLogEntry.php
new file mode 100644
index 0000000..6f8f218
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_NullLogEntry.php
@@ -0,0 +1,11 @@
+maybe_dispatch_async_request() uses a lock to avoid
+ * calling ActionScheduler_QueueRunner->has_maximum_concurrent_batches() every time the 'shutdown',
+ * hook is triggered, because that method calls ActionScheduler_QueueRunner->store->get_claim_count()
+ * to find the current number of claims in the database.
+ *
+ * @param string $lock_type A string to identify different lock types.
+ * @bool True if lock value has changed, false if not or if set failed.
+ */
+ public function set( $lock_type ) {
+ return update_option( $this->get_key( $lock_type ), time() + $this->get_duration( $lock_type ) );
+ }
+
+ /**
+ * If a lock is set, return the timestamp it was set to expiry.
+ *
+ * @param string $lock_type A string to identify different lock types.
+ * @return bool|int False if no lock is set, otherwise the timestamp for when the lock is set to expire.
+ */
+ public function get_expiration( $lock_type ) {
+ return get_option( $this->get_key( $lock_type ) );
+ }
+
+ /**
+ * Get the key to use for storing the lock in the transient
+ *
+ * @param string $lock_type A string to identify different lock types.
+ * @return string
+ */
+ protected function get_key( $lock_type ) {
+ return sprintf( 'action_scheduler_lock_%s', $lock_type );
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueCleaner.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueCleaner.php
new file mode 100644
index 0000000..1da13ab
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueCleaner.php
@@ -0,0 +1,155 @@
+store = $store ? $store : ActionScheduler_Store::instance();
+ $this->batch_size = $batch_size;
+ }
+
+ public function delete_old_actions() {
+ $lifespan = apply_filters( 'action_scheduler_retention_period', $this->month_in_seconds );
+ $cutoff = as_get_datetime_object($lifespan.' seconds ago');
+
+ $statuses_to_purge = array(
+ ActionScheduler_Store::STATUS_COMPLETE,
+ ActionScheduler_Store::STATUS_CANCELED,
+ );
+
+ foreach ( $statuses_to_purge as $status ) {
+ $actions_to_delete = $this->store->query_actions( array(
+ 'status' => $status,
+ 'modified' => $cutoff,
+ 'modified_compare' => '<=',
+ 'per_page' => $this->get_batch_size(),
+ ) );
+
+ foreach ( $actions_to_delete as $action_id ) {
+ try {
+ $this->store->delete_action( $action_id );
+ } catch ( Exception $e ) {
+
+ /**
+ * Notify 3rd party code of exceptions when deleting a completed action older than the retention period
+ *
+ * This hook provides a way for 3rd party code to log or otherwise handle exceptions relating to their
+ * actions.
+ *
+ * @since 2.0.0
+ *
+ * @param int $action_id The scheduled actions ID in the data store
+ * @param Exception $e The exception thrown when attempting to delete the action from the data store
+ * @param int $lifespan The retention period, in seconds, for old actions
+ * @param int $count_of_actions_to_delete The number of old actions being deleted in this batch
+ */
+ do_action( 'action_scheduler_failed_old_action_deletion', $action_id, $e, $lifespan, count( $actions_to_delete ) );
+ }
+ }
+ }
+ }
+
+ /**
+ * Unclaim pending actions that have not been run within a given time limit.
+ *
+ * When called by ActionScheduler_Abstract_QueueRunner::run_cleanup(), the time limit passed
+ * as a parameter is 10x the time limit used for queue processing.
+ *
+ * @param int $time_limit The number of seconds to allow a queue to run before unclaiming its pending actions. Default 300 (5 minutes).
+ */
+ public function reset_timeouts( $time_limit = 300 ) {
+ $timeout = apply_filters( 'action_scheduler_timeout_period', $time_limit );
+ if ( $timeout < 0 ) {
+ return;
+ }
+ $cutoff = as_get_datetime_object($timeout.' seconds ago');
+ $actions_to_reset = $this->store->query_actions( array(
+ 'status' => ActionScheduler_Store::STATUS_PENDING,
+ 'modified' => $cutoff,
+ 'modified_compare' => '<=',
+ 'claimed' => true,
+ 'per_page' => $this->get_batch_size(),
+ ) );
+
+ foreach ( $actions_to_reset as $action_id ) {
+ $this->store->unclaim_action( $action_id );
+ do_action( 'action_scheduler_reset_action', $action_id );
+ }
+ }
+
+ /**
+ * Mark actions that have been running for more than a given time limit as failed, based on
+ * the assumption some uncatachable and unloggable fatal error occurred during processing.
+ *
+ * When called by ActionScheduler_Abstract_QueueRunner::run_cleanup(), the time limit passed
+ * as a parameter is 10x the time limit used for queue processing.
+ *
+ * @param int $time_limit The number of seconds to allow an action to run before it is considered to have failed. Default 300 (5 minutes).
+ */
+ public function mark_failures( $time_limit = 300 ) {
+ $timeout = apply_filters( 'action_scheduler_failure_period', $time_limit );
+ if ( $timeout < 0 ) {
+ return;
+ }
+ $cutoff = as_get_datetime_object($timeout.' seconds ago');
+ $actions_to_reset = $this->store->query_actions( array(
+ 'status' => ActionScheduler_Store::STATUS_RUNNING,
+ 'modified' => $cutoff,
+ 'modified_compare' => '<=',
+ 'per_page' => $this->get_batch_size(),
+ ) );
+
+ foreach ( $actions_to_reset as $action_id ) {
+ $this->store->mark_failure( $action_id );
+ do_action( 'action_scheduler_failed_action', $action_id, $timeout );
+ }
+ }
+
+ /**
+ * Do all of the cleaning actions.
+ *
+ * @param int $time_limit The number of seconds to use as the timeout and failure period. Default 300 (5 minutes).
+ * @author Jeremy Pry
+ */
+ public function clean( $time_limit = 300 ) {
+ $this->delete_old_actions();
+ $this->reset_timeouts( $time_limit );
+ $this->mark_failures( $time_limit );
+ }
+
+ /**
+ * Get the batch size for cleaning the queue.
+ *
+ * @author Jeremy Pry
+ * @return int
+ */
+ protected function get_batch_size() {
+ /**
+ * Filter the batch size when cleaning the queue.
+ *
+ * @param int $batch_size The number of actions to clean in one batch.
+ */
+ return absint( apply_filters( 'action_scheduler_cleanup_batch_size', $this->batch_size ) );
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueRunner.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueRunner.php
new file mode 100644
index 0000000..cd76807
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_QueueRunner.php
@@ -0,0 +1,197 @@
+store );
+ }
+
+ $this->async_request = $async_request;
+ }
+
+ /**
+ * @codeCoverageIgnore
+ */
+ public function init() {
+
+ add_filter( 'cron_schedules', array( self::instance(), 'add_wp_cron_schedule' ) );
+
+ // Check for and remove any WP Cron hook scheduled by Action Scheduler < 3.0.0, which didn't include the $context param
+ $next_timestamp = wp_next_scheduled( self::WP_CRON_HOOK );
+ if ( $next_timestamp ) {
+ wp_unschedule_event( $next_timestamp, self::WP_CRON_HOOK );
+ }
+
+ $cron_context = array( 'WP Cron' );
+
+ if ( ! wp_next_scheduled( self::WP_CRON_HOOK, $cron_context ) ) {
+ $schedule = apply_filters( 'action_scheduler_run_schedule', self::WP_CRON_SCHEDULE );
+ wp_schedule_event( time(), $schedule, self::WP_CRON_HOOK, $cron_context );
+ }
+
+ add_action( self::WP_CRON_HOOK, array( self::instance(), 'run' ) );
+ $this->hook_dispatch_async_request();
+ }
+
+ /**
+ * Hook check for dispatching an async request.
+ */
+ public function hook_dispatch_async_request() {
+ add_action( 'shutdown', array( $this, 'maybe_dispatch_async_request' ) );
+ }
+
+ /**
+ * Unhook check for dispatching an async request.
+ */
+ public function unhook_dispatch_async_request() {
+ remove_action( 'shutdown', array( $this, 'maybe_dispatch_async_request' ) );
+ }
+
+ /**
+ * Check if we should dispatch an async request to process actions.
+ *
+ * This method is attached to 'shutdown', so is called frequently. To avoid slowing down
+ * the site, it mitigates the work performed in each request by:
+ * 1. checking if it's in the admin context and then
+ * 2. haven't run on the 'shutdown' hook within the lock time (60 seconds by default)
+ * 3. haven't exceeded the number of allowed batches.
+ *
+ * The order of these checks is important, because they run from a check on a value:
+ * 1. in memory - is_admin() maps to $GLOBALS or the WP_ADMIN constant
+ * 2. in memory - transients use autoloaded options by default
+ * 3. from a database query - has_maximum_concurrent_batches() run the query
+ * $this->store->get_claim_count() to find the current number of claims in the DB.
+ *
+ * If all of these conditions are met, then we request an async runner check whether it
+ * should dispatch a request to process pending actions.
+ */
+ public function maybe_dispatch_async_request() {
+ if ( is_admin() && ! ActionScheduler::lock()->is_locked( 'async-request-runner' ) ) {
+ // Only start an async queue at most once every 60 seconds
+ ActionScheduler::lock()->set( 'async-request-runner' );
+ $this->async_request->maybe_dispatch();
+ }
+ }
+
+ /**
+ * Process actions in the queue. Attached to self::WP_CRON_HOOK i.e. 'action_scheduler_run_queue'
+ *
+ * The $context param of this method defaults to 'WP Cron', because prior to Action Scheduler 3.0.0
+ * that was the only context in which this method was run, and the self::WP_CRON_HOOK hook had no context
+ * passed along with it. New code calling this method directly, or by triggering the self::WP_CRON_HOOK,
+ * should set a context as the first parameter. For an example of this, refer to the code seen in
+ * @see ActionScheduler_AsyncRequest_QueueRunner::handle()
+ *
+ * @param string $context Optional identifer for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron'
+ * Generally, this should be capitalised and not localised as it's a proper noun.
+ * @return int The number of actions processed.
+ */
+ public function run( $context = 'WP Cron' ) {
+ ActionScheduler_Compatibility::raise_memory_limit();
+ ActionScheduler_Compatibility::raise_time_limit( $this->get_time_limit() );
+ do_action( 'action_scheduler_before_process_queue' );
+ $this->run_cleanup();
+ $processed_actions = 0;
+ if ( false === $this->has_maximum_concurrent_batches() ) {
+ $batch_size = apply_filters( 'action_scheduler_queue_runner_batch_size', 25 );
+ do {
+ $processed_actions_in_batch = $this->do_batch( $batch_size, $context );
+ $processed_actions += $processed_actions_in_batch;
+ } while ( $processed_actions_in_batch > 0 && ! $this->batch_limits_exceeded( $processed_actions ) ); // keep going until we run out of actions, time, or memory
+ }
+
+ do_action( 'action_scheduler_after_process_queue' );
+ return $processed_actions;
+ }
+
+ /**
+ * Process a batch of actions pending in the queue.
+ *
+ * Actions are processed by claiming a set of pending actions then processing each one until either the batch
+ * size is completed, or memory or time limits are reached, defined by @see $this->batch_limits_exceeded().
+ *
+ * @param int $size The maximum number of actions to process in the batch.
+ * @param string $context Optional identifer for the context in which this action is being processed, e.g. 'WP CLI' or 'WP Cron'
+ * Generally, this should be capitalised and not localised as it's a proper noun.
+ * @return int The number of actions processed.
+ */
+ protected function do_batch( $size = 100, $context = '' ) {
+ $claim = $this->store->stake_claim($size);
+ $this->monitor->attach($claim);
+ $processed_actions = 0;
+
+ foreach ( $claim->get_actions() as $action_id ) {
+ // bail if we lost the claim
+ if ( ! in_array( $action_id, $this->store->find_actions_by_claim_id( $claim->get_id() ) ) ) {
+ break;
+ }
+ $this->process_action( $action_id, $context );
+ $processed_actions++;
+
+ if ( $this->batch_limits_exceeded( $processed_actions ) ) {
+ break;
+ }
+ }
+ $this->store->release_claim($claim);
+ $this->monitor->detach();
+ $this->clear_caches();
+ return $processed_actions;
+ }
+
+ /**
+ * Running large batches can eat up memory, as WP adds data to its object cache.
+ *
+ * If using a persistent object store, this has the side effect of flushing that
+ * as well, so this is disabled by default. To enable:
+ *
+ * add_filter( 'action_scheduler_queue_runner_flush_cache', '__return_true' );
+ */
+ protected function clear_caches() {
+ if ( ! wp_using_ext_object_cache() || apply_filters( 'action_scheduler_queue_runner_flush_cache', false ) ) {
+ wp_cache_flush();
+ }
+ }
+
+ public function add_wp_cron_schedule( $schedules ) {
+ $schedules['every_minute'] = array(
+ 'interval' => 60, // in seconds
+ 'display' => __( 'Every minute', 'action-scheduler' ),
+ );
+
+ return $schedules;
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Versions.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Versions.php
new file mode 100644
index 0000000..915c2e6
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_Versions.php
@@ -0,0 +1,62 @@
+versions[$version_string]) ) {
+ return FALSE;
+ }
+ $this->versions[$version_string] = $initialization_callback;
+ return TRUE;
+ }
+
+ public function get_versions() {
+ return $this->versions;
+ }
+
+ public function latest_version() {
+ $keys = array_keys($this->versions);
+ if ( empty($keys) ) {
+ return false;
+ }
+ uasort( $keys, 'version_compare' );
+ return end($keys);
+ }
+
+ public function latest_version_callback() {
+ $latest = $this->latest_version();
+ if ( empty($latest) || !isset($this->versions[$latest]) ) {
+ return '__return_null';
+ }
+ return $this->versions[$latest];
+ }
+
+ /**
+ * @return ActionScheduler_Versions
+ * @codeCoverageIgnore
+ */
+ public static function instance() {
+ if ( empty(self::$instance) ) {
+ self::$instance = new self();
+ }
+ return self::$instance;
+ }
+
+ /**
+ * @codeCoverageIgnore
+ */
+ public static function initialize_latest_version() {
+ $self = self::instance();
+ call_user_func($self->latest_version_callback());
+ }
+}
+
\ No newline at end of file
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_WPCommentCleaner.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_WPCommentCleaner.php
new file mode 100644
index 0000000..1ba552c
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/ActionScheduler_WPCommentCleaner.php
@@ -0,0 +1,115 @@
+ Status administration screen
+ add_action( 'load-tools_page_action-scheduler', array( __CLASS__, 'register_admin_notice' ) );
+ add_action( 'load-woocommerce_page_wc-status', array( __CLASS__, 'register_admin_notice' ) );
+ }
+
+ /**
+ * Determines if there are log entries in the wp comments table.
+ *
+ * Uses the flag set on migration completion set by @see self::maybe_schedule_cleanup().
+ *
+ * @return boolean Whether there are scheduled action comments in the comments table.
+ */
+ public static function has_logs() {
+ return 'yes' === get_option( self::$has_logs_option_key );
+ }
+
+ /**
+ * Schedules the WP Post comment table cleanup to run in 6 months if it's not already scheduled.
+ * Attached to the migration complete hook 'action_scheduler/migration_complete'.
+ */
+ public static function maybe_schedule_cleanup() {
+ if ( (bool) get_comments( array( 'type' => ActionScheduler_wpCommentLogger::TYPE, 'number' => 1, 'fields' => 'ids' ) ) ) {
+ update_option( self::$has_logs_option_key, 'yes' );
+
+ if ( ! as_next_scheduled_action( self::$cleanup_hook ) ) {
+ as_schedule_single_action( gmdate( 'U' ) + ( 6 * MONTH_IN_SECONDS ), self::$cleanup_hook );
+ }
+ }
+ }
+
+ /**
+ * Delete all action comments from the WP Comments table.
+ */
+ public static function delete_all_action_comments() {
+ global $wpdb;
+ $wpdb->delete( $wpdb->comments, array( 'comment_type' => ActionScheduler_wpCommentLogger::TYPE, 'comment_agent' => ActionScheduler_wpCommentLogger::AGENT ) );
+ delete_option( self::$has_logs_option_key );
+ }
+
+ /**
+ * Registers admin notices about the orphaned action logs.
+ */
+ public static function register_admin_notice() {
+ add_action( 'admin_notices', array( __CLASS__, 'print_admin_notice' ) );
+ }
+
+ /**
+ * Prints details about the orphaned action logs and includes information on where to learn more.
+ */
+ public static function print_admin_notice() {
+ $next_cleanup_message = '';
+ $next_scheduled_cleanup_hook = as_next_scheduled_action( self::$cleanup_hook );
+
+ if ( $next_scheduled_cleanup_hook ) {
+ /* translators: %s: date interval */
+ $next_cleanup_message = sprintf( __( 'This data will be deleted in %s.', 'action-scheduler' ), human_time_diff( gmdate( 'U' ), $next_scheduled_cleanup_hook ) );
+ }
+
+ $notice = sprintf(
+ /* translators: 1: next cleanup message 2: github issue URL */
+ __( 'Action Scheduler has migrated data to custom tables; however, orphaned log entries exist in the WordPress Comments table. %1$s Learn more »', 'action-scheduler' ),
+ $next_cleanup_message,
+ 'https://github.com/woocommerce/action-scheduler/issues/368'
+ );
+
+ echo '
+
+
+
+ run_cleanup();
+ $this->add_hooks();
+
+ // Check to make sure there aren't too many concurrent processes running.
+ if ( $this->has_maximum_concurrent_batches() ) {
+ if ( $force ) {
+ WP_CLI::warning( __( 'There are too many concurrent batches, but the run is forced to continue.', 'action-scheduler' ) );
+ } else {
+ WP_CLI::error( __( 'There are too many concurrent batches.', 'action-scheduler' ) );
+ }
+ }
+
+ // Stake a claim and store it.
+ $this->claim = $this->store->stake_claim( $batch_size, null, $hooks, $group );
+ $this->monitor->attach( $this->claim );
+ $this->actions = $this->claim->get_actions();
+
+ return count( $this->actions );
+ }
+
+ /**
+ * Add our hooks to the appropriate actions.
+ *
+ * @author Jeremy Pry
+ */
+ protected function add_hooks() {
+ add_action( 'action_scheduler_before_execute', array( $this, 'before_execute' ) );
+ add_action( 'action_scheduler_after_execute', array( $this, 'after_execute' ), 10, 2 );
+ add_action( 'action_scheduler_failed_execution', array( $this, 'action_failed' ), 10, 2 );
+ }
+
+ /**
+ * Set up the WP CLI progress bar.
+ *
+ * @author Jeremy Pry
+ */
+ protected function setup_progress_bar() {
+ $count = count( $this->actions );
+ $this->progress_bar = new ProgressBar(
+ /* translators: %d: amount of actions */
+ sprintf( _n( 'Running %d action', 'Running %d actions', $count, 'action-scheduler' ), number_format_i18n( $count ) ),
+ $count
+ );
+ }
+
+ /**
+ * Process actions in the queue.
+ *
+ * @author Jeremy Pry
+ *
+ * @param string $context Optional runner context. Default 'WP CLI'.
+ *
+ * @return int The number of actions processed.
+ */
+ public function run( $context = 'WP CLI' ) {
+ do_action( 'action_scheduler_before_process_queue' );
+ $this->setup_progress_bar();
+ foreach ( $this->actions as $action_id ) {
+ // Error if we lost the claim.
+ if ( ! in_array( $action_id, $this->store->find_actions_by_claim_id( $this->claim->get_id() ) ) ) {
+ WP_CLI::warning( __( 'The claim has been lost. Aborting current batch.', 'action-scheduler' ) );
+ break;
+ }
+
+ $this->process_action( $action_id, $context );
+ $this->progress_bar->tick();
+ }
+
+ $completed = $this->progress_bar->current();
+ $this->progress_bar->finish();
+ $this->store->release_claim( $this->claim );
+ do_action( 'action_scheduler_after_process_queue' );
+
+ return $completed;
+ }
+
+ /**
+ * Handle WP CLI message when the action is starting.
+ *
+ * @author Jeremy Pry
+ *
+ * @param $action_id
+ */
+ public function before_execute( $action_id ) {
+ /* translators: %s refers to the action ID */
+ WP_CLI::log( sprintf( __( 'Started processing action %s', 'action-scheduler' ), $action_id ) );
+ }
+
+ /**
+ * Handle WP CLI message when the action has completed.
+ *
+ * @author Jeremy Pry
+ *
+ * @param int $action_id
+ * @param null|ActionScheduler_Action $action The instance of the action. Default to null for backward compatibility.
+ */
+ public function after_execute( $action_id, $action = null ) {
+ // backward compatibility
+ if ( null === $action ) {
+ $action = $this->store->fetch_action( $action_id );
+ }
+ /* translators: 1: action ID 2: hook name */
+ WP_CLI::log( sprintf( __( 'Completed processing action %1$s with hook: %2$s', 'action-scheduler' ), $action_id, $action->get_hook() ) );
+ }
+
+ /**
+ * Handle WP CLI message when the action has failed.
+ *
+ * @author Jeremy Pry
+ *
+ * @param int $action_id
+ * @param Exception $exception
+ * @throws \WP_CLI\ExitException With failure message.
+ */
+ public function action_failed( $action_id, $exception ) {
+ WP_CLI::error(
+ /* translators: 1: action ID 2: exception message */
+ sprintf( __( 'Error processing action %1$s: %2$s', 'action-scheduler' ), $action_id, $exception->getMessage() ),
+ false
+ );
+ }
+
+ /**
+ * Sleep and help avoid hitting memory limit
+ *
+ * @param int $sleep_time Amount of seconds to sleep
+ * @deprecated 3.0.0
+ */
+ protected function stop_the_insanity( $sleep_time = 0 ) {
+ _deprecated_function( 'ActionScheduler_WPCLI_QueueRunner::stop_the_insanity', '3.0.0', 'ActionScheduler_DataController::free_memory' );
+
+ ActionScheduler_DataController::free_memory();
+ }
+
+ /**
+ * Maybe trigger the stop_the_insanity() method to free up memory.
+ */
+ protected function maybe_stop_the_insanity() {
+ // The value returned by progress_bar->current() might be padded. Remove padding, and convert to int.
+ $current_iteration = intval( trim( $this->progress_bar->current() ) );
+ if ( 0 === $current_iteration % 50 ) {
+ $this->stop_the_insanity();
+ }
+ }
+}
diff --git a/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php
new file mode 100644
index 0000000..6cf27d4
--- /dev/null
+++ b/wp-content/plugins/wp-mail-smtp/vendor/woocommerce/action-scheduler/classes/WP_CLI/ActionScheduler_WPCLI_Scheduler_command.php
@@ -0,0 +1,158 @@
+]
+ * : The maximum number of actions to run. Defaults to 100.
+ *
+ * [--batches=
+
+
+
+
+
+
+
+
+
+
+ $count ) {
+ // WC uses the 3rd column for export, so we need to display more data in that (hidden when viewed as part of the table) and add an empty 2nd column.
+ printf(
+ '
+
+
+
+
+ ',
+ esc_html( $status_labels[ $status ] ),
+ number_format_i18n( $count ),
+ $oldest_and_newest[ $status ]['oldest'],
+ $oldest_and_newest[ $status ]['newest']
+ );
+ }
+ ?>
+
+ %1$s %2$s %3$s %4$s element above the able.
+ */
+ protected $table_header;
+
+ /**
+ * Enables bulk actions. It must be an array where the key is the action name
+ * and the value is the label (which is translated automatically). It is important
+ * to notice that it will check that the method exists (`bulk_$name`) and will throw
+ * an exception if it does not exists.
+ *
+ * This class will automatically check if the current request has a bulk action, will do the
+ * validations and afterwards will execute the bulk method, with two arguments. The first argument
+ * is the array with primary keys, the second argument is a string with a list of the primary keys,
+ * escaped and ready to use (with `IN`).
+ */
+ protected $bulk_actions = array();
+
+ /**
+ * Makes translation easier, it basically just wraps
+ * `_x` with some default (the package name).
+ *
+ * @deprecated 3.0.0
+ */
+ protected function translate( $text, $context = '' ) {
+ return $text;
+ }
+
+ /**
+ * Reads `$this->bulk_actions` and returns an array that WP_List_Table understands. It
+ * also validates that the bulk method handler exists. It throws an exception because
+ * this is a library meant for developers and missing a bulk method is a development-time error.
+ */
+ protected function get_bulk_actions() {
+ $actions = array();
+
+ foreach ( $this->bulk_actions as $action => $label ) {
+ if ( ! is_callable( array( $this, 'bulk_' . $action ) ) ) {
+ throw new RuntimeException( "The bulk action $action does not have a callback method" );
+ }
+
+ $actions[ $action ] = $label;
+ }
+
+ return $actions;
+ }
+
+ /**
+ * Checks if the current request has a bulk action. If that is the case it will validate and will
+ * execute the bulk method handler. Regardless if the action is valid or not it will redirect to
+ * the previous page removing the current arguments that makes this request a bulk action.
+ */
+ protected function process_bulk_action() {
+ global $wpdb;
+ // Detect when a bulk action is being triggered.
+ $action = $this->current_action();
+ if ( ! $action ) {
+ return;
+ }
+
+ check_admin_referer( 'bulk-' . $this->_args['plural'] );
+
+ $method = 'bulk_' . $action;
+ if ( array_key_exists( $action, $this->bulk_actions ) && is_callable( array( $this, $method ) ) && ! empty( $_GET['ID'] ) && is_array( $_GET['ID'] ) ) {
+ $ids_sql = '(' . implode( ',', array_fill( 0, count( $_GET['ID'] ), '%s' ) ) . ')';
+ $this->$method( $_GET['ID'], $wpdb->prepare( $ids_sql, $_GET['ID'] ) );
+ }
+
+ wp_redirect( remove_query_arg(
+ array( '_wp_http_referer', '_wpnonce', 'ID', 'action', 'action2' ),
+ wp_unslash( $_SERVER['REQUEST_URI'] )
+ ) );
+ exit;
+ }
+
+ /**
+ * Default code for deleting entries.
+ * validated already by process_bulk_action()
+ */
+ protected function bulk_delete( array $ids, $ids_sql ) {
+ $store = ActionScheduler::store();
+ foreach ( $ids as $action_id ) {
+ $store->delete( $action_id );
+ }
+ }
+
+ /**
+ * Prepares the _column_headers property which is used by WP_Table_List at rendering.
+ * It merges the columns and the sortable columns.
+ */
+ protected function prepare_column_headers() {
+ $this->_column_headers = array(
+ $this->get_columns(),
+ array(),
+ $this->get_sortable_columns(),
+ );
+ }
+
+ /**
+ * Reads $this->sort_by and returns the columns name in a format that WP_Table_List
+ * expects
+ */
+ public function get_sortable_columns() {
+ $sort_by = array();
+ foreach ( $this->sort_by as $column ) {
+ $sort_by[ $column ] = array( $column, true );
+ }
+ return $sort_by;
+ }
+
+ /**
+ * Returns the columns names for rendering. It adds a checkbox for selecting everything
+ * as the first column
+ */
+ public function get_columns() {
+ $columns = array_merge(
+ array( 'cb' => '' ),
+ $this->columns
+ );
+
+ return $columns;
+ }
+
+ /**
+ * Get prepared LIMIT clause for items query
+ *
+ * @global wpdb $wpdb
+ *
+ * @return string Prepared LIMIT clause for items query.
+ */
+ protected function get_items_query_limit() {
+ global $wpdb;
+
+ $per_page = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
+ return $wpdb->prepare( 'LIMIT %d', $per_page );
+ }
+
+ /**
+ * Returns the number of items to offset/skip for this current view.
+ *
+ * @return int
+ */
+ protected function get_items_offset() {
+ $per_page = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
+ $current_page = $this->get_pagenum();
+ if ( 1 < $current_page ) {
+ $offset = $per_page * ( $current_page - 1 );
+ } else {
+ $offset = 0;
+ }
+
+ return $offset;
+ }
+
+ /**
+ * Get prepared OFFSET clause for items query
+ *
+ * @global wpdb $wpdb
+ *
+ * @return string Prepared OFFSET clause for items query.
+ */
+ protected function get_items_query_offset() {
+ global $wpdb;
+
+ return $wpdb->prepare( 'OFFSET %d', $this->get_items_offset() );
+ }
+
+ /**
+ * Prepares the ORDER BY sql statement. It uses `$this->sort_by` to know which
+ * columns are sortable. This requests validates the orderby $_GET parameter is a valid
+ * column and sortable. It will also use order (ASC|DESC) using DESC by default.
+ */
+ protected function get_items_query_order() {
+ if ( empty( $this->sort_by ) ) {
+ return '';
+ }
+
+ $orderby = esc_sql( $this->get_request_orderby() );
+ $order = esc_sql( $this->get_request_order() );
+
+ return "ORDER BY {$orderby} {$order}";
+ }
+
+ /**
+ * Return the sortable column specified for this request to order the results by, if any.
+ *
+ * @return string
+ */
+ protected function get_request_orderby() {
+
+ $valid_sortable_columns = array_values( $this->sort_by );
+
+ if ( ! empty( $_GET['orderby'] ) && in_array( $_GET['orderby'], $valid_sortable_columns ) ) {
+ $orderby = sanitize_text_field( $_GET['orderby'] );
+ } else {
+ $orderby = $valid_sortable_columns[0];
+ }
+
+ return $orderby;
+ }
+
+ /**
+ * Return the sortable column order specified for this request.
+ *
+ * @return string
+ */
+ protected function get_request_order() {
+
+ if ( ! empty( $_GET['order'] ) && 'desc' === strtolower( $_GET['order'] ) ) {
+ $order = 'DESC';
+ } else {
+ $order = 'ASC';
+ }
+
+ return $order;
+ }
+
+ /**
+ * Return the status filter for this request, if any.
+ *
+ * @return string
+ */
+ protected function get_request_status() {
+ $status = ( ! empty( $_GET['status'] ) ) ? $_GET['status'] : '';
+ return $status;
+ }
+
+ /**
+ * Return the search filter for this request, if any.
+ *
+ * @return string
+ */
+ protected function get_request_search_query() {
+ $search_query = ( ! empty( $_GET['s'] ) ) ? $_GET['s'] : '';
+ return $search_query;
+ }
+
+ /**
+ * Process and return the columns name. This is meant for using with SQL, this means it
+ * always includes the primary key.
+ *
+ * @return array
+ */
+ protected function get_table_columns() {
+ $columns = array_keys( $this->columns );
+ if ( ! in_array( $this->ID, $columns ) ) {
+ $columns[] = $this->ID;
+ }
+
+ return $columns;
+ }
+
+ /**
+ * Check if the current request is doing a "full text" search. If that is the case
+ * prepares the SQL to search texts using LIKE.
+ *
+ * If the current request does not have any search or if this list table does not support
+ * that feature it will return an empty string.
+ *
+ * TODO:
+ * - Improve search doing LIKE by word rather than by phrases.
+ *
+ * @return string
+ */
+ protected function get_items_query_search() {
+ global $wpdb;
+
+ if ( empty( $_GET['s'] ) || empty( $this->search_by ) ) {
+ return '';
+ }
+
+ $filter = array();
+ foreach ( $this->search_by as $column ) {
+ $filter[] = $wpdb->prepare('`' . $column . '` like "%%s%"', $wpdb->esc_like( $_GET['s'] ));
+ }
+ return implode( ' OR ', $filter );
+ }
+
+ /**
+ * Prepares the SQL to filter rows by the options defined at `$this->filter_by`. Before trusting
+ * any data sent by the user it validates that it is a valid option.
+ */
+ protected function get_items_query_filters() {
+ global $wpdb;
+
+ if ( ! $this->filter_by || empty( $_GET['filter_by'] ) || ! is_array( $_GET['filter_by'] ) ) {
+ return '';
+ }
+
+ $filter = array();
+
+ foreach ( $this->filter_by as $column => $options ) {
+ if ( empty( $_GET['filter_by'][ $column ] ) || empty( $options[ $_GET['filter_by'][ $column ] ] ) ) {
+ continue;
+ }
+
+ $filter[] = $wpdb->prepare( "`$column` = %s", $_GET['filter_by'][ $column ] );
+ }
+
+ return implode( ' AND ', $filter );
+
+ }
+
+ /**
+ * Prepares the data to feed WP_Table_List.
+ *
+ * This has the core for selecting, sorting and filting data. To keep the code simple
+ * its logic is split among many methods (get_items_query_*).
+ *
+ * Beside populating the items this function will also count all the records that matches
+ * the filtering criteria and will do fill the pagination variables.
+ */
+ public function prepare_items() {
+ global $wpdb;
+
+ $this->process_bulk_action();
+
+ $this->process_row_actions();
+
+ if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {
+ // _wp_http_referer is used only on bulk actions, we remove it to keep the $_GET shorter
+ wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
+ exit;
+ }
+
+ $this->prepare_column_headers();
+
+ $limit = $this->get_items_query_limit();
+ $offset = $this->get_items_query_offset();
+ $order = $this->get_items_query_order();
+ $where = array_filter(array(
+ $this->get_items_query_search(),
+ $this->get_items_query_filters(),
+ ));
+ $columns = '`' . implode( '`, `', $this->get_table_columns() ) . '`';
+
+ if ( ! empty( $where ) ) {
+ $where = 'WHERE ('. implode( ') AND (', $where ) . ')';
+ } else {
+ $where = '';
+ }
+
+ $sql = "SELECT $columns FROM {$this->table_name} {$where} {$order} {$limit} {$offset}";
+
+ $this->set_items( $wpdb->get_results( $sql, ARRAY_A ) );
+
+ $query_count = "SELECT COUNT({$this->ID}) FROM {$this->table_name} {$where}";
+ $total_items = $wpdb->get_var( $query_count );
+ $per_page = $this->get_items_per_page( $this->package . '_items_per_page', $this->items_per_page );
+ $this->set_pagination_args( array(
+ 'total_items' => $total_items,
+ 'per_page' => $per_page,
+ 'total_pages' => ceil( $total_items / $per_page ),
+ ) );
+ }
+
+ public function extra_tablenav( $which ) {
+ if ( ! $this->filter_by || 'top' !== $which ) {
+ return;
+ }
+
+ echo '
' . esc_attr( $this->table_header ) . '
';
+ if ( $this->get_request_search_query() ) {
+ /* translators: %s: search query */
+ echo '' . esc_attr( sprintf( __( 'Search results for "%s"', 'action-scheduler' ), $this->get_request_search_query() ) ) . '';
+ }
+ echo '
';
+ }
+
+ /**
+ * Display the table heading and search query, if any
+ */
+ protected function display_admin_notices() {
+ foreach ( $this->admin_notices as $notice ) {
+ echo '';
+ echo implode( " | \n", $status_list_items );
+ echo '
';
+ }
+ }
+
+ /**
+ * Renders the table list, we override the original class to render the table inside a form
+ * and to render any needed HTML (like the search box). By doing so the callee of a function can simple
+ * forget about any extra HTML.
+ */
+ protected function display_table() {
+ echo '';
+ }
+
+ /**
+ * Process any pending actions.
+ */
+ public function process_actions() {
+ $this->process_bulk_action();
+ $this->process_row_actions();
+
+ if ( ! empty( $_REQUEST['_wp_http_referer'] ) ) {
+ // _wp_http_referer is used only on bulk actions, we remove it to keep the $_GET shorter
+ wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) );
+ exit;
+ }
+ }
+
+ /**
+ * Render the list table page, including header, notices, status filters and table.
+ */
+ public function display_page() {
+ $this->prepare_items();
+
+ echo 'mail()
and creates an options page to manage the settings.
* Author: WPForms
@@ -203,7 +203,7 @@ if ( ! function_exists( 'wp_mail_smtp_insecure_php_version_notice' ) ) {
}
if ( ! defined( 'WPMS_PLUGIN_VER' ) ) {
- define( 'WPMS_PLUGIN_VER', '2.0.1' );
+ define( 'WPMS_PLUGIN_VER', '2.1.1' );
}
if ( ! defined( 'WPMS_PHP_VER' ) ) {
define( 'WPMS_PHP_VER', '5.5.0' );