plugin updates

This commit is contained in:
Tony Volpe
2024-03-01 15:36:30 +00:00
parent ac0ffd7543
commit ed1533dc69
223 changed files with 7575 additions and 2953 deletions

View File

@@ -1 +1 @@
#wpadminbar .wp-mail-smtp-admin-bar-menu-notification-counter,#wpadminbar .wp-mail-smtp-admin-bar-menu-error{display:inline-block !important;vertical-align:top !important;box-sizing:border-box !important;margin:7px 0 0 2px !important;padding:0 5px !important;min-width:18px !important;height:18px !important;border-radius:9px !important;background-color:#d63638 !important;color:#fff !important;font-size:11px !important;line-height:1.6 !important;text-align:center !important}#wpadminbar .wp-mail-smtp-admin-bar-menu-notification-counter span,#wpadminbar .wp-mail-smtp-admin-bar-menu-error span{line-height:1 !important;font-size:11px !important}body.wp-admin #adminmenu #toplevel_page_wp-mail-smtp .wp-menu-image.svg{background-position-x:11px}body.wp-admin.folded #adminmenu #toplevel_page_wp-mail-smtp .wp-menu-image.svg{background-position-x:9px}
#wpadminbar .wp-mail-smtp-admin-bar-menu-notification-counter,#wpadminbar .wp-mail-smtp-admin-bar-menu-error{display:inline-block !important;vertical-align:top !important;box-sizing:border-box !important;margin:7px 0 0 2px !important;padding:0 5px !important;min-width:18px !important;height:18px !important;border-radius:9px !important;background-color:#d63638 !important;color:#fff !important;font-size:11px !important;line-height:1.6 !important;text-align:center !important}#wpadminbar .wp-mail-smtp-admin-bar-menu-notification-counter span,#wpadminbar .wp-mail-smtp-admin-bar-menu-error span{line-height:1 !important;font-size:11px !important}body.wp-admin #adminmenu #toplevel_page_wp-mail-smtp .wp-menu-image.svg{background-position-x:10px;background-position-y:8px}@media screen and (max-width: 782px){body.wp-admin #adminmenu #toplevel_page_wp-mail-smtp .wp-menu-image.svg{background-position-x:9px}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
#wp-mail-smtp .wp-mail-smtp-smart-routing-header{padding-bottom:0 !important;border-bottom:none !important}#wp-mail-smtp .wp-mail-smtp-smart-routing-header__heading{display:flex;align-items:center}#wp-mail-smtp .wp-mail-smtp-smart-routing-header__heading>a{margin-left:15px;font-weight:600;font-size:14px;line-height:22px}#wp-mail-smtp .wp-mail-smtp-smart-routing-notice-top{max-width:1000px;margin:10px 0 0 !important;border:1px solid #bbb}#wp-mail-smtp .wp-mail-smtp-smart-routing-notice-top--no-connections~.wp-mail-smtp-setting-row,#wp-mail-smtp .wp-mail-smtp-smart-routing-notice-top--no-connections~.wp-mail-smtp-submit{opacity:.5;pointer-events:none}#wp-mail-smtp .wp-mail-smtp-smart-routing-toggle .wp-mail-smtp-toggle__label{font-weight:500;font-size:14px;text-transform:capitalize}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes{max-width:1000px;margin-bottom:30px}#wp-mail-smtp .wp-mail-smtp-smart-routing-route{background:#fff;box-shadow:0px 2px 4px rgba(0,0,0,.07);border-radius:6px}#wp-mail-smtp .wp-mail-smtp-smart-routing-route+.wp-mail-smtp-smart-routing-route{margin-top:30px}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header{display:flex;align-items:center;padding:20px;border-bottom:1px solid #f1f1f1}@media(max-width: 600px){#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header{flex-direction:column;align-items:flex-start}}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header>span{margin-right:10px;font-size:14px;line-height:17px;font-style:italic;color:#646970}@media(max-width: 600px){#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header>span{margin-right:0;margin-top:10px}}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header>select{margin-right:10px !important}@media(max-width: 600px){#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header>select{margin-right:0;margin-top:10px !important}}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__connection{max-width:273px;width:100%}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__connection--invalid{border-color:#d63638 !important}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__actions{display:flex;align-items:center;margin-left:auto}@media(max-width: 600px){#wp-mail-smtp .wp-mail-smtp-smart-routing-route__actions{order:-1}}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__order{margin-right:23px;white-space:nowrap}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__order-btn{background-color:transparent;border:none;padding:0;vertical-align:middle;cursor:pointer}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__order-btn--down{margin-left:13px;transform:rotate(-180deg)}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__order-btn img{display:block}#wp-mail-smtp .wp-mail-smtp-smart-routing-route:first-child .wp-mail-smtp-smart-routing-route__order-btn--up,#wp-mail-smtp .wp-mail-smtp-smart-routing-route:last-child .wp-mail-smtp-smart-routing-route__order-btn--down{opacity:.25;cursor:not-allowed;pointer-events:none}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__delete{background-color:transparent;border:none;color:#999;padding:0;vertical-align:middle;cursor:pointer}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__delete:hover:not(:disabled){color:#d63638}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__delete:disabled{opacity:.25;cursor:not-allowed}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__main{padding:20px}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__notice{margin-top:0 !important;margin-bottom:20px !important;border:1px solid #bbb}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__notice p{margin:6px 0 !important;font-size:13px !important}#wp-mail-smtp .wp-mail-smtp-smart-routing-route .wp-mail-smtp-btn-grey{font-weight:500}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note{display:flex;align-items:center;margin-bottom:5px;font-size:14px;line-height:20px;color:#646970}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note img{margin-right:10px}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note p{margin:0 !important}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note a{color:inherit}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note a:hover,#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note a:active{color:#555}
#wp-mail-smtp .wp-mail-smtp-smart-routing-header{padding-bottom:0 !important;border-bottom:none !important}#wp-mail-smtp .wp-mail-smtp-smart-routing-header__heading{display:flex;align-items:center}#wp-mail-smtp .wp-mail-smtp-smart-routing-header__heading>a{margin-left:15px;font-weight:600;font-size:14px;line-height:22px}#wp-mail-smtp .wp-mail-smtp-smart-routing-notice-top{max-width:1000px;margin:10px 0 0 !important;border:1px solid #bbb}#wp-mail-smtp .wp-mail-smtp-smart-routing-notice-top--no-connections~.wp-mail-smtp-setting-row,#wp-mail-smtp .wp-mail-smtp-smart-routing-notice-top--no-connections~.wp-mail-smtp-submit{opacity:.5;pointer-events:none}#wp-mail-smtp .wp-mail-smtp-smart-routing-toggle .wp-mail-smtp-toggle__label{font-weight:500;font-size:14px;text-transform:capitalize}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes{max-width:1000px;margin-bottom:30px}#wp-mail-smtp .wp-mail-smtp-smart-routing-route{background:#fff;box-shadow:0px 2px 4px rgba(0,0,0,.07);border-radius:6px}#wp-mail-smtp .wp-mail-smtp-smart-routing-route+.wp-mail-smtp-smart-routing-route{margin-top:30px}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header{display:flex;align-items:center;padding:20px;border-bottom:1px solid #f1f1f1}@media(max-width: 600px){#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header{flex-direction:column;align-items:flex-start}}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header>span{margin-right:10px;font-size:14px;line-height:17px;font-style:italic;color:#646970}@media(max-width: 600px){#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header>span{margin-right:0;margin-top:10px}}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header>select{margin-right:10px !important}@media(max-width: 600px){#wp-mail-smtp .wp-mail-smtp-smart-routing-route__header>select{margin-right:0;margin-top:10px !important}}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__connection{max-width:273px;width:100%}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__connection--invalid{border-color:#d63638 !important}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__actions{display:flex;align-items:center;margin-left:auto}@media(max-width: 600px){#wp-mail-smtp .wp-mail-smtp-smart-routing-route__actions{order:-1}}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__order{margin-right:23px;white-space:nowrap}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__order-btn{background-color:rgba(0,0,0,0);border:none;padding:0;vertical-align:middle;cursor:pointer}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__order-btn--down{margin-left:13px;transform:rotate(-180deg)}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__order-btn img{display:block}#wp-mail-smtp .wp-mail-smtp-smart-routing-route:first-child .wp-mail-smtp-smart-routing-route__order-btn--up,#wp-mail-smtp .wp-mail-smtp-smart-routing-route:last-child .wp-mail-smtp-smart-routing-route__order-btn--down{opacity:.25;cursor:not-allowed;pointer-events:none}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__delete{background-color:rgba(0,0,0,0);border:none;color:#999;padding:0;vertical-align:middle;cursor:pointer}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__delete:hover:not(:disabled){color:#d63638}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__delete:disabled{opacity:.25;cursor:not-allowed}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__main{padding:20px}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__notice{margin-top:0 !important;margin-bottom:20px !important;border:1px solid #bbb}#wp-mail-smtp .wp-mail-smtp-smart-routing-route__notice p{margin:6px 0 !important;font-size:13px !important}#wp-mail-smtp .wp-mail-smtp-smart-routing-route .wp-mail-smtp-btn-grey{font-weight:500}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note{display:flex;align-items:center;margin-bottom:5px;font-size:14px;line-height:20px;color:#646970}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note img{margin-right:10px}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note p{margin:0 !important}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note a{color:inherit}#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note a:hover,#wp-mail-smtp .wp-mail-smtp-smart-routing-routes-note a:active{color:#555}

View File

@@ -1 +1 @@
<svg viewBox="0 0 37 28" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41"><path d="M12.29 26.46c.33.38.75.56 1.27.56s.93-.18 1.26-.56L35.56 5.8c.33-.33.5-.75.5-1.27 0-.51-.17-.93-.5-1.26L32.96.73a1.57 1.57 0 00-1.23-.57c-.5 0-.92.2-1.3.57L13.56 17.6 5.68 9.73c-.37-.38-.8-.57-1.3-.57s-.9.2-1.23.57l-2.6 2.53c-.33.33-.5.75-.5 1.26 0 .52.17.94.5 1.27l11.74 11.67z" fill="#6ab255" fill-rule="nonzero"/></svg>
<svg viewBox="0 0 37 28" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41"><path d="M12.29 26.46c.33.38.75.56 1.27.56s.93-.18 1.26-.56L35.56 5.8c.33-.33.5-.75.5-1.27 0-.51-.17-.93-.5-1.26L32.96.73a1.57 1.57 0 0 0-1.23-.57c-.5 0-.92.2-1.3.57L13.56 17.6 5.68 9.73c-.37-.38-.8-.57-1.3-.57s-.9.2-1.23.57l-2.6 2.53c-.33.33-.5.75-.5 1.26 0 .52.17.94.5 1.27l11.74 11.67z" fill="#6ab255" fill-rule="nonzero"/></svg>

Before

Width:  |  Height:  |  Size: 480 B

After

Width:  |  Height:  |  Size: 481 B

View File

@@ -1 +1 @@
<svg viewBox="0 0 33 33" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41"><path d="M27.6 32.36a1.93 1.93 0 01-1.43.58 1.93 1.93 0 01-1.41-.58l-8.09-8.08-8.08 8.08a1.93 1.93 0 01-1.42.58 1.93 1.93 0 01-1.41-.58l-4.5-4.5a1.93 1.93 0 01-.59-1.42c0-.55.2-1.03.59-1.42l8.08-8.08-8.08-8.08a1.93 1.93 0 01-.59-1.42c0-.55.2-1.03.59-1.42l4.5-4.5A1.93 1.93 0 017.18.95c.55 0 1.02.2 1.41.58l8.09 8.09 8.08-8.08a1.93 1.93 0 011.41-.59c.56 0 1.03.2 1.42.59l4.5 4.5c.4.38.58.86.58 1.41 0 .56-.19 1.03-.58 1.42l-8.08 8.08 8.08 8.08c.4.4.58.87.58 1.42 0 .56-.19 1.03-.58 1.42l-4.5 4.5z" fill="#d83638" fill-rule="nonzero"/></svg>
<svg viewBox="0 0 33 33" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.41"><path d="M27.6 32.36a1.93 1.93 0 0 1-1.43.58 1.93 1.93 0 0 1-1.41-.58l-8.09-8.08-8.08 8.08a1.93 1.93 0 0 1-1.42.58 1.93 1.93 0 0 1-1.41-.58l-4.5-4.5a1.93 1.93 0 0 1-.59-1.42c0-.55.2-1.03.59-1.42l8.08-8.08-8.08-8.08a1.93 1.93 0 0 1-.59-1.42c0-.55.2-1.03.59-1.42l4.5-4.5A1.93 1.93 0 0 1 7.18.95c.55 0 1.02.2 1.41.58l8.09 8.09 8.08-8.08a1.93 1.93 0 0 1 1.41-.59c.56 0 1.03.2 1.42.59l4.5 4.5c.4.38.58.86.58 1.41 0 .56-.19 1.03-.58 1.42l-8.08 8.08 8.08 8.08c.4.4.58.87.58 1.42 0 .56-.19 1.03-.58 1.42l-4.5 4.5z" fill="#d83638" fill-rule="nonzero"/></svg>

Before

Width:  |  Height:  |  Size: 688 B

After

Width:  |  Height:  |  Size: 698 B

View File

@@ -1 +1 @@
<svg viewBox="0 0 53 53" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-miterlimit="10"><path d="M37.6 42.36a1.93 1.93 0 01-1.43.58 1.93 1.93 0 01-1.41-.58l-8.08-8.08-8.09 8.08a1.93 1.93 0 01-1.42.58 1.93 1.93 0 01-1.41-.58l-4.5-4.5a1.93 1.93 0 01-.59-1.42c0-.55.2-1.03.59-1.41l8.08-8.09-8.08-8.08a1.93 1.93 0 01-.59-1.42c0-.55.2-1.03.59-1.41l4.5-4.5a1.93 1.93 0 011.41-.59 1.93 1.93 0 011.42.59l8.09 8.08 8.08-8.08a1.93 1.93 0 011.42-.59 1.93 1.93 0 011.41.59l4.5 4.5c.4.38.58.86.58 1.41 0 .56-.19 1.03-.58 1.42l-8.08 8.08 8.08 8.09c.4.38.58.86.58 1.41s-.19 1.03-.58 1.42l-4.5 4.5z" fill="none" stroke="#d83638" stroke-width="2" stroke-dasharray="4,2"/></svg>
<svg viewBox="0 0 53 53" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-miterlimit="10"><path d="M37.6 42.36a1.93 1.93 0 0 1-1.43.58 1.93 1.93 0 0 1-1.41-.58l-8.08-8.08-8.09 8.08a1.93 1.93 0 0 1-1.42.58 1.93 1.93 0 0 1-1.41-.58l-4.5-4.5a1.93 1.93 0 0 1-.59-1.42c0-.55.2-1.03.59-1.41l8.08-8.09-8.08-8.08a1.93 1.93 0 0 1-.59-1.42c0-.55.2-1.03.59-1.41l4.5-4.5a1.93 1.93 0 0 1 1.41-.59 1.93 1.93 0 0 1 1.42.59l8.09 8.08 8.08-8.08a1.93 1.93 0 0 1 1.42-.59 1.93 1.93 0 0 1 1.41.59l4.5 4.5c.4.38.58.86.58 1.41 0 .56-.19 1.03-.58 1.42l-8.08 8.08 8.08 8.09c.4.38.58.86.58 1.41s-.19 1.03-.58 1.42l-4.5 4.5z" fill="none" stroke="#d83638" stroke-width="2" stroke-dasharray="4,2"/></svg>

Before

Width:  |  Height:  |  Size: 695 B

After

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 92 KiB

View File

@@ -1,3 +1 @@
<svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17 0.984375C19.9167 0.984375 22.599 1.71354 25.0469 3.17188C27.4948 4.57812 29.4219 6.50521 30.8281 8.95312C32.2865 11.401 33.0156 14.0833 33.0156 17C33.0156 19.9167 32.2865 22.599 30.8281 25.0469C29.4219 27.4948 27.4948 29.4479 25.0469 30.9062C22.599 32.3125 19.9167 33.0156 17 33.0156C14.0833 33.0156 11.401 32.3125 8.95312 30.9062C6.50521 29.4479 4.55208 27.4948 3.09375 25.0469C1.6875 22.599 0.984375 19.9167 0.984375 17C0.984375 14.0833 1.6875 11.401 3.09375 8.95312C4.55208 6.50521 6.50521 4.57812 8.95312 3.17188C11.401 1.71354 14.0833 0.984375 17 0.984375ZM19.2656 19.7344L19.9688 6.84375H14.0312L14.7344 19.7344H19.2656ZM19.1094 26.4531C19.5781 25.9844 19.8125 25.3594 19.8125 24.5781C19.8125 23.7448 19.5781 23.0938 19.1094 22.625C18.6406 22.1562 17.9375 21.9219 17 21.9219C16.0625 21.9219 15.3333 22.1562 14.8125 22.625C14.3438 23.0938 14.1094 23.7448 14.1094 24.5781C14.1094 25.3594 14.3438 25.9844 14.8125 26.4531C15.3333 26.9219 16.0365 27.1562 16.9219 27.1562C17.8594 27.1562 18.5885 26.9219 19.1094 26.4531Z" fill="#D63638"/>
</svg>
<svg width="34" height="34" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17 .984c2.917 0 5.599.73 8.047 2.188a15.401 15.401 0 0 1 5.781 5.781c1.458 2.448 2.188 5.13 2.188 8.047 0 2.917-.73 5.599-2.188 8.047-1.406 2.448-3.333 4.4-5.781 5.86-2.448 1.405-5.13 2.109-8.047 2.109-2.917 0-5.599-.703-8.047-2.11a16.617 16.617 0 0 1-5.86-5.86C1.689 22.6.985 19.917.985 17s.704-5.599 2.11-8.047c1.458-2.448 3.411-4.375 5.86-5.781C11.4 1.714 14.083.984 17 .984Zm2.266 18.75.703-12.89H14.03l.703 12.89h4.532Zm-.157 6.72c.47-.47.703-1.095.703-1.876 0-.833-.234-1.484-.703-1.953-.468-.469-1.172-.703-2.109-.703-.938 0-1.667.234-2.188.703-.468.469-.703 1.12-.703 1.953 0 .781.235 1.406.704 1.875.52.469 1.223.703 2.109.703.937 0 1.666-.234 2.187-.703Z" fill="#D63638"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 773 B

View File

@@ -1 +1 @@
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .5a7.71 7.71 0 00-4.02 1.093A7.988 7.988 0 001.054 4.48C.35 5.703 0 7.043 0 8.5c0 1.457.351 2.797 1.054 4.02a8.3 8.3 0 002.926 2.926C5.203 16.15 6.543 16.5 8 16.5c1.457 0 2.797-.351 4.02-1.054a7.986 7.986 0 002.887-2.926A7.709 7.709 0 0016 8.5a7.709 7.709 0 00-1.093-4.02 7.693 7.693 0 00-2.887-2.887A7.71 7.71 0 008 .5zm-.624 12.644H6.049l-3.24-4.527 1.328-1.249 2.575 2.42 5.151-5.932 1.327.937-5.814 8.35z" fill="#6AA08B"/></svg>
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .5a7.71 7.71 0 0 0-4.02 1.093A7.988 7.988 0 0 0 1.054 4.48C.35 5.703 0 7.043 0 8.5c0 1.457.351 2.797 1.054 4.02a8.3 8.3 0 0 0 2.926 2.926C5.203 16.15 6.543 16.5 8 16.5c1.457 0 2.797-.351 4.02-1.054a7.986 7.986 0 0 0 2.887-2.926A7.709 7.709 0 0 0 16 8.5a7.709 7.709 0 0 0-1.093-4.02 7.693 7.693 0 0 0-2.887-2.887A7.71 7.71 0 0 0 8 .5zm-.624 12.644H6.049l-3.24-4.527 1.328-1.249 2.575 2.42 5.151-5.932 1.327.937-5.814 8.35z" fill="#6AA08B"/></svg>

Before

Width:  |  Height:  |  Size: 519 B

After

Width:  |  Height:  |  Size: 532 B

View File

@@ -1 +1 @@
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .5a7.71 7.71 0 00-4.02 1.093A7.988 7.988 0 001.054 4.48C.35 5.703 0 7.043 0 8.5c0 1.457.351 2.797 1.054 4.02a8.3 8.3 0 002.926 2.926C5.203 16.15 6.543 16.5 8 16.5c1.457 0 2.797-.351 4.02-1.054a7.986 7.986 0 002.887-2.926A7.709 7.709 0 0016 8.5a7.709 7.709 0 00-1.093-4.02 7.693 7.693 0 00-2.887-2.887A7.71 7.71 0 008 .5zm-.624 12.644H6.049l-3.24-4.527 1.328-1.249 2.575 2.42 5.151-5.932 1.327.937-5.814 8.35z" fill="#A7AAAD"/></svg>
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .5a7.71 7.71 0 0 0-4.02 1.093A7.988 7.988 0 0 0 1.054 4.48C.35 5.703 0 7.043 0 8.5c0 1.457.351 2.797 1.054 4.02a8.3 8.3 0 0 0 2.926 2.926C5.203 16.15 6.543 16.5 8 16.5c1.457 0 2.797-.351 4.02-1.054a7.986 7.986 0 0 0 2.887-2.926A7.709 7.709 0 0 0 16 8.5a7.709 7.709 0 0 0-1.093-4.02 7.693 7.693 0 0 0-2.887-2.887A7.71 7.71 0 0 0 8 .5zm-.624 12.644H6.049l-3.24-4.527 1.328-1.249 2.575 2.42 5.151-5.932 1.327.937-5.814 8.35z" fill="#A7AAAD"/></svg>

Before

Width:  |  Height:  |  Size: 519 B

After

Width:  |  Height:  |  Size: 532 B

View File

@@ -1 +1 @@
<svg width="17" height="13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.87.5h13.208c1.247 0 1.87.597 1.87 1.792v8.416c0 1.195-.623 1.792-1.87 1.792H1.87C.623 12.5 0 11.903 0 10.708V2.292C0 1.097.623.5 1.87.5zm6.624 8.61l6.7-5.532a.83.83 0 00.273-.468c.053-.207 0-.402-.155-.584a.71.71 0 00-.546-.35.937.937 0 00-.623.155l-5.65 3.857-5.688-3.857a.87.87 0 00-.623-.156.71.71 0 00-.546.351.805.805 0 00-.155.584c.051.208.142.364.272.468l6.74 5.532z" fill="#809EB0"/></svg>
<svg width="17" height="13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.87.5h13.208c1.247 0 1.87.597 1.87 1.792v8.416c0 1.195-.623 1.792-1.87 1.792H1.87C.623 12.5 0 11.903 0 10.708V2.292C0 1.097.623.5 1.87.5zm6.624 8.61 6.7-5.532a.83.83 0 0 0 .273-.468c.053-.207 0-.402-.155-.584a.71.71 0 0 0-.546-.35.937.937 0 0 0-.623.155l-5.65 3.857-5.688-3.857a.87.87 0 0 0-.623-.156.71.71 0 0 0-.546.351.805.805 0 0 0-.155.584c.051.208.142.364.272.468l6.74 5.532z" fill="#809EB0"/></svg>

Before

Width:  |  Height:  |  Size: 484 B

After

Width:  |  Height:  |  Size: 491 B

View File

@@ -1 +1 @@
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .5a7.71 7.71 0 014.02 1.093 7.693 7.693 0 012.887 2.887A7.709 7.709 0 0116 8.5a7.709 7.709 0 01-1.093 4.02 7.986 7.986 0 01-2.887 2.926C10.796 16.15 9.457 16.5 8 16.5c-1.457 0-2.797-.351-4.02-1.054a8.3 8.3 0 01-2.926-2.926C.35 11.296 0 9.957 0 8.5c0-1.457.351-2.797 1.054-4.02A7.988 7.988 0 013.98 1.593 7.71 7.71 0 018 .5zm4.995 11.005L9.99 8.5l3.005-3.005-1.99-1.99L8 6.51 4.995 3.505l-1.99 1.99L6.01 8.5l-3.005 3.005 1.99 1.99L8 10.49l3.005 3.005 1.99-1.99z" fill="#D63638"/></svg>
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .5a7.71 7.71 0 0 1 4.02 1.093 7.693 7.693 0 0 1 2.887 2.887A7.709 7.709 0 0 1 16 8.5a7.709 7.709 0 0 1-1.093 4.02 7.986 7.986 0 0 1-2.887 2.926C10.796 16.15 9.457 16.5 8 16.5c-1.457 0-2.797-.351-4.02-1.054a8.3 8.3 0 0 1-2.926-2.926C.35 11.296 0 9.957 0 8.5c0-1.457.351-2.797 1.054-4.02A7.988 7.988 0 0 1 3.98 1.593 7.71 7.71 0 0 1 8 .5zm4.995 11.005L9.99 8.5l3.005-3.005-1.99-1.99L8 6.51 4.995 3.505l-1.99 1.99L6.01 8.5l-3.005 3.005 1.99 1.99L8 10.49l3.005 3.005 1.99-1.99z" fill="#D63638"/></svg>

Before

Width:  |  Height:  |  Size: 571 B

After

Width:  |  Height:  |  Size: 584 B

View File

@@ -1 +1 @@
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .5a7.71 7.71 0 00-4.02 1.093A7.988 7.988 0 001.054 4.48C.35 5.703 0 7.043 0 8.5c0 1.457.351 2.797 1.054 4.02a8.3 8.3 0 002.926 2.926C5.203 16.15 6.543 16.5 8 16.5c1.457 0 2.797-.351 4.02-1.054a7.986 7.986 0 002.887-2.926A7.709 7.709 0 0016 8.5a7.709 7.709 0 00-1.093-4.02 7.693 7.693 0 00-2.887-2.887A7.71 7.71 0 008 .5zm-.624 12.644H6.049l-3.24-4.527 1.328-1.249 2.575 2.42 5.151-5.932 1.327.937-5.814 8.35z" fill="#2271B1"/></svg>
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .5a7.71 7.71 0 0 0-4.02 1.093A7.988 7.988 0 0 0 1.054 4.48C.35 5.703 0 7.043 0 8.5c0 1.457.351 2.797 1.054 4.02a8.3 8.3 0 0 0 2.926 2.926C5.203 16.15 6.543 16.5 8 16.5c1.457 0 2.797-.351 4.02-1.054a7.986 7.986 0 0 0 2.887-2.926A7.709 7.709 0 0 0 16 8.5a7.709 7.709 0 0 0-1.093-4.02 7.693 7.693 0 0 0-2.887-2.887A7.71 7.71 0 0 0 8 .5zm-.624 12.644H6.049l-3.24-4.527 1.328-1.249 2.575 2.42 5.151-5.932 1.327.937-5.814 8.35z" fill="#2271B1"/></svg>

Before

Width:  |  Height:  |  Size: 519 B

After

Width:  |  Height:  |  Size: 532 B

View File

@@ -1 +1 @@
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .5a7.71 7.71 0 00-4.02 1.093A7.988 7.988 0 001.054 4.48C.35 5.703 0 7.043 0 8.5c0 1.457.351 2.797 1.054 4.02a8.3 8.3 0 002.926 2.926C5.203 16.15 6.543 16.5 8 16.5c1.457 0 2.797-.351 4.02-1.054a7.986 7.986 0 002.887-2.926A7.709 7.709 0 0016 8.5a7.709 7.709 0 00-1.093-4.02 7.693 7.693 0 00-2.887-2.887A7.71 7.71 0 008 .5zm-.624 12.644H6.049l-3.24-4.527 1.328-1.249 2.575 2.42 5.151-5.932 1.327.937-5.814 8.35z" fill="#A7AAAD"/></svg>
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .5a7.71 7.71 0 0 0-4.02 1.093A7.988 7.988 0 0 0 1.054 4.48C.35 5.703 0 7.043 0 8.5c0 1.457.351 2.797 1.054 4.02a8.3 8.3 0 0 0 2.926 2.926C5.203 16.15 6.543 16.5 8 16.5c1.457 0 2.797-.351 4.02-1.054a7.986 7.986 0 0 0 2.887-2.926A7.709 7.709 0 0 0 16 8.5a7.709 7.709 0 0 0-1.093-4.02 7.693 7.693 0 0 0-2.887-2.887A7.71 7.71 0 0 0 8 .5zm-.624 12.644H6.049l-3.24-4.527 1.328-1.249 2.575 2.42 5.151-5.932 1.327.937-5.814 8.35z" fill="#A7AAAD"/></svg>

Before

Width:  |  Height:  |  Size: 519 B

After

Width:  |  Height:  |  Size: 532 B

View File

@@ -1 +1 @@
<svg width="17" height="13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.87.5h13.208c1.247 0 1.87.597 1.87 1.792v8.416c0 1.195-.623 1.792-1.87 1.792H1.87C.623 12.5 0 11.903 0 10.708V2.292C0 1.097.623.5 1.87.5zm6.624 8.61l6.7-5.532a.83.83 0 00.273-.468c.053-.207 0-.402-.155-.584a.71.71 0 00-.546-.35.937.937 0 00-.623.155l-5.65 3.857-5.688-3.857a.87.87 0 00-.623-.156.71.71 0 00-.546.351.805.805 0 00-.155.584c.051.208.142.364.272.468l6.74 5.532z" fill="#646970"/></svg>
<svg width="17" height="13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.87.5h13.208c1.247 0 1.87.597 1.87 1.792v8.416c0 1.195-.623 1.792-1.87 1.792H1.87C.623 12.5 0 11.903 0 10.708V2.292C0 1.097.623.5 1.87.5zm6.624 8.61 6.7-5.532a.83.83 0 0 0 .273-.468c.053-.207 0-.402-.155-.584a.71.71 0 0 0-.546-.35.937.937 0 0 0-.623.155l-5.65 3.857-5.688-3.857a.87.87 0 0 0-.623-.156.71.71 0 0 0-.546.351.805.805 0 0 0-.155.584c.051.208.142.364.272.468l6.74 5.532z" fill="#646970"/></svg>

Before

Width:  |  Height:  |  Size: 484 B

After

Width:  |  Height:  |  Size: 491 B

View File

@@ -1 +1 @@
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .5a7.71 7.71 0 014.02 1.093 7.693 7.693 0 012.887 2.887A7.709 7.709 0 0116 8.5a7.709 7.709 0 01-1.093 4.02 7.986 7.986 0 01-2.887 2.926C10.796 16.15 9.457 16.5 8 16.5c-1.457 0-2.797-.351-4.02-1.054a8.3 8.3 0 01-2.926-2.926C.35 11.296 0 9.957 0 8.5c0-1.457.351-2.797 1.054-4.02A7.988 7.988 0 013.98 1.593 7.71 7.71 0 018 .5zm4.995 11.005L9.99 8.5l3.005-3.005-1.99-1.99L8 6.51 4.995 3.505l-1.99 1.99L6.01 8.5l-3.005 3.005 1.99 1.99L8 10.49l3.005 3.005 1.99-1.99z" fill="#D63638"/></svg>
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .5a7.71 7.71 0 0 1 4.02 1.093 7.693 7.693 0 0 1 2.887 2.887A7.709 7.709 0 0 1 16 8.5a7.709 7.709 0 0 1-1.093 4.02 7.986 7.986 0 0 1-2.887 2.926C10.796 16.15 9.457 16.5 8 16.5c-1.457 0-2.797-.351-4.02-1.054a8.3 8.3 0 0 1-2.926-2.926C.35 11.296 0 9.957 0 8.5c0-1.457.351-2.797 1.054-4.02A7.988 7.988 0 0 1 3.98 1.593 7.71 7.71 0 0 1 8 .5zm4.995 11.005L9.99 8.5l3.005-3.005-1.99-1.99L8 6.51 4.995 3.505l-1.99 1.99L6.01 8.5l-3.005 3.005 1.99 1.99L8 10.49l3.005 3.005 1.99-1.99z" fill="#D63638"/></svg>

Before

Width:  |  Height:  |  Size: 571 B

After

Width:  |  Height:  |  Size: 584 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -1 +1 @@
<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 0C4.476 0 0 4.516 0 10c0 5.524 4.476 10 10 10 5.484 0 10-4.476 10-10 0-5.484-4.516-10-10-10zm6.976 4.839l-2.54 2.54a5.574 5.574 0 00-1.815-1.814l2.54-2.54c.565.402 1.412 1.25 1.815 1.814zM10 13.87c-2.177 0-3.871-1.694-3.871-3.871A3.846 3.846 0 0110 6.129 3.872 3.872 0 0113.871 10 3.846 3.846 0 0110 13.871zM4.798 3.024l2.54 2.54A5.574 5.574 0 005.525 7.38l-2.54-2.54c.403-.565 1.25-1.412 1.814-1.815zM2.984 15.202l2.54-2.54a5.573 5.573 0 001.815 1.814l-2.54 2.54c-.565-.403-1.412-1.25-1.815-1.814zm12.177 1.814l-2.54-2.54a5.574 5.574 0 001.814-1.815l2.54 2.54c-.402.565-1.25 1.412-1.814 1.815z" fill="#fff"/></svg>
<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 0C4.476 0 0 4.516 0 10c0 5.524 4.476 10 10 10 5.484 0 10-4.476 10-10 0-5.484-4.516-10-10-10zm6.976 4.839-2.54 2.54a5.574 5.574 0 0 0-1.815-1.814l2.54-2.54c.565.402 1.412 1.25 1.815 1.814zM10 13.87c-2.177 0-3.871-1.694-3.871-3.871A3.846 3.846 0 0 1 10 6.129 3.872 3.872 0 0 1 13.871 10 3.846 3.846 0 0 1 10 13.871zM4.798 3.024l2.54 2.54A5.574 5.574 0 0 0 5.525 7.38l-2.54-2.54c.403-.565 1.25-1.412 1.814-1.815zM2.984 15.202l2.54-2.54a5.573 5.573 0 0 0 1.815 1.814l-2.54 2.54c-.565-.403-1.412-1.25-1.815-1.814zm12.177 1.814-2.54-2.54a5.574 5.574 0 0 0 1.814-1.815l2.54 2.54c-.402.565-1.25 1.412-1.814 1.815z" fill="#fff"/></svg>

Before

Width:  |  Height:  |  Size: 703 B

After

Width:  |  Height:  |  Size: 714 B

View File

@@ -1 +1 @@
<svg width="14" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3.818 17.739c0 .234.04.468.2.701l.675.975c.2.312.676.585 1.074.585h2.426c.398 0 .875-.273 1.074-.585l.676-.974c.12-.195.199-.507.199-.702v-1.52H3.818v1.52zM0 6.862a6.73 6.73 0 001.71 4.522c.676.74 1.67 2.3 2.068 3.587v.039h6.404v-.04c.397-1.286 1.392-2.845 2.068-3.586C13.324 10.175 14 8.616 14 6.862 14 3.08 10.818 0 6.96 0 2.903.039 0 3.236 0 6.862zm7-3.12c-1.79 0-3.182 1.404-3.182 3.12 0 .35-.318.623-.636.623a.622.622 0 01-.637-.623c0-2.379 1.99-4.367 4.455-4.367.318 0 .636.312.636.624 0 .35-.318.624-.636.624z" fill="#fff"/></svg>
<svg width="14" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3.818 17.739c0 .234.04.468.2.701l.675.975c.2.312.676.585 1.074.585h2.426c.398 0 .875-.273 1.074-.585l.676-.974c.12-.195.199-.507.199-.702v-1.52H3.818v1.52zM0 6.862a6.73 6.73 0 0 0 1.71 4.522c.676.74 1.67 2.3 2.068 3.587v.039h6.404v-.04c.397-1.286 1.392-2.845 2.068-3.586C13.324 10.175 14 8.616 14 6.862 14 3.08 10.818 0 6.96 0 2.903.039 0 3.236 0 6.862zm7-3.12c-1.79 0-3.182 1.404-3.182 3.12 0 .35-.318.623-.636.623a.622.622 0 0 1-.637-.623c0-2.379 1.99-4.367 4.455-4.367.318 0 .636.312.636.624 0 .35-.318.624-.636.624z" fill="#fff"/></svg>

Before

Width:  |  Height:  |  Size: 622 B

After

Width:  |  Height:  |  Size: 625 B

View File

@@ -1 +1 @@
<svg width="55" height="55" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0)"><path fill-rule="evenodd" clip-rule="evenodd" d="M39.126 21.427c1.601-.069 2.987 1.788 3.095 4.147.11 2.359-1.1 4.327-2.7 4.396-1.602.07-2.987-1.787-3.096-4.146-.108-2.36 1.1-4.328 2.701-4.397zm-23.386.214c1.581 0 2.863 1.893 2.863 4.227 0 2.335-1.282 4.228-2.862 4.228-1.581 0-2.863-1.893-2.863-4.227 0-2.335 1.282-4.228 2.863-4.228z" fill="#395360"/><path d="M33.795 26.785H21.833v13.658h11.962V26.785z" fill="#FBAA6F"/><path d="M29.708 33.81l-.1-.098c-.598-.488-.797-1.269-.298-1.951.498-.586 1.296-.78 1.993-.293-.398.098-.897.293-1.196.78a1.88 1.88 0 00-.399 1.561zm-4.486 0c.1-.391 0-.976-.399-1.464-.299-.488-.797-.683-1.196-.78.598-.488 1.496-.293 1.994.292s.3 1.463-.299 1.951c0-.097 0 0-.1 0zm7.278-3.123h.498l-1.096 4.683-2.094 6.244h-4.287l-3.19-5.268 1.097-3.122a200.504 200.504 0 012.093 2.634c.499.488 2.692.488 3.789-.488.697-.683 1.694-2.244 3.19-4.682z" fill="#DC7F3C"/><path d="M13.658 29.712h5.284v-8.78h-4.087c.598-4.39 3.588-8 7.476-9.755.798-3.317 1.695-5.463 2.692-6.634l.2-.195.1-.098c.298-.195.697-.39 1.096-.487 1.296-.195 2.492.683 2.691 1.853.1.683-.1 1.268-.498 1.756l-.1.098-.299.292c-.498.488-.897.976-1.396 1.464 1.197-.976 2.194-1.464 2.991-1.464.2 0 .399.098.698.195.598.39.897 1.171.498 1.756a4.203 4.203 0 01-.598.683c5.284 1.073 9.371 5.366 10.069 10.731l.1.78h-3.789v7.805h4.785l1.795 13.072c-4.187 2.537-9.47 3.805-15.751 3.805-6.28 0-11.564-1.268-15.751-3.805l1.794-13.072zm15.054 9.17c2.591-4.195 3.887-6.634 3.887-7.414 0-2.146-3.19-4-4.884-4-1.695 0-4.885 1.756-4.885 4 0 .78 1.296 3.317 3.788 7.414.3.39.598.585 1.097.585.498 0 .797-.195.997-.585z" fill="#BDCFC8"/><path d="M45.26 59.2c-3.587 5.528-11.08.223-17.655.223-6.575 0-12.354-3.61-15.94-9.024l.92-7.24c.3.112.574.585.873.585 1.395 0 2.59-1.24 2.79-2.707v1.354c0 1.804 1.295 3.158 2.789 3.158 1.494 0 2.79-1.466 2.79-3.158v-1.354 3.158c0 1.805 1.295 3.159 2.79 3.159 1.494 0 2.789-1.467 2.789-3.159 0 1.805 1.295 3.159 2.79 3.159 1.593 0 2.789-1.467 2.789-3.159v-3.158 1.354c0 1.804 1.295 3.158 2.79 3.158 1.594 0 2.79-1.466 2.79-3.158v-1.354c.198 1.58 1.394 2.707 2.789 2.707.398 0 .697-.113.996-.225L45.26 59.2z" fill="#809EB0"/><path d="M12.367 45.016l.19-1.886c.298.097.695.194.992.194 1.39 0 2.581-1.069 2.78-2.331v1.165c0 1.554 1.29 2.72 2.779 2.72 1.489 0 2.78-1.263 2.78-2.72v-1.165 2.72c0 1.553 1.29 2.72 2.778 2.72 1.49 0 2.78-1.264 2.78-2.72 0 1.553 1.29 2.72 2.779 2.72 1.588 0 2.78-1.264 2.78-2.72v-2.72 1.165c0 1.554 1.29 2.72 2.778 2.72 1.589 0 2.78-1.263 2.78-2.72v-1.165c.198 1.36 1.39 2.33 2.779 2.33.397 0 .695-.096.992-.193l.298 1.845a2.796 2.796 0 01-1.29.291c-1.39 0-2.58-1.068-2.78-2.33V44.1c0 1.554-1.29 2.72-2.779 2.72-1.588 0-2.779-1.263-2.779-2.72v-1.166 2.72c0 1.554-1.29 2.72-2.779 2.72-1.588 0-2.78-1.263-2.78-2.72 0 1.554-1.29 2.72-2.779 2.72-1.488 0-2.779-1.263-2.779-2.72v-2.72V44.1c0 1.554-1.29 2.72-2.779 2.72-1.489 0-2.78-1.263-2.78-2.72v-1.166c-.198 1.36-1.389 2.331-2.778 2.331-.497 0-.885-.153-1.183-.25z" fill="#738E9E"/><path d="M41.571 23.273c-.997-2.829-2.99-4.585-4.685-4.39-2.193.196-2.692 3.707-2.293 7.805.399 4.097 1.695 7.414 3.888 7.121 2.093-.195 3.987-3.804 3.688-7.804-.1 1.17-.498 2.244-1.395 2.341-1.097.098-1.396-1.17-1.595-2.731-.1-1.561-.1-2.927.997-3.024.598-.098 1.096.195 1.395.682z" fill="#86A196"/><path d="M40.774 22.688c-.598-1.17-1.495-1.854-2.393-1.854-1.495.196-1.894 2.537-1.595 5.366.3 2.83 1.197 5.073 2.692 4.878 1.097-.098 1.894-1.464 2.193-3.317-.2.293-.498.488-.897.585-1.097.098-1.396-1.17-1.595-2.731-.1-1.561-.1-2.927.997-3.024.2 0 .399 0 .598.097z" fill="#fff"/><path d="M13.459 23.273c.997-2.829 2.99-4.585 4.685-4.39 2.194.196 2.692 3.707 2.293 7.805-.399 4.097-1.695 7.414-3.888 7.121-2.093-.195-3.987-3.804-3.688-7.804.1 1.17.498 2.244 1.396 2.341 1.096.098 1.395-1.17 1.595-2.731.1-1.561.1-2.927-.997-3.024-.499-.098-.997.195-1.396.682z" fill="#86A196"/><path d="M14.121 22.653c.598-1.171 1.495-1.854 2.393-1.854 1.495.195 1.894 2.537 1.595 5.366-.3 2.829-1.197 5.072-2.692 4.877-1.097-.097-1.894-1.463-2.094-3.317.2.293.499.488.898.586 1.096.097 1.395-1.17 1.595-2.732.1-1.56.1-2.926-.997-3.024-.3 0-.499 0-.698.098z" fill="#fff"/><path d="M22.83 29.322c0-.195-.1-.488-.1-.683 0-2.439 1.196-5.17 4.885-5.17 3.688 0 4.884 2.731 4.884 5.17 0 .39 0 .683-.1.975-.797-1.268-2.292-2.146-4.784-2.146-2.293.098-3.888.78-4.785 1.854z" fill="#F4F8FF"/><path d="M30.486 10.396c-1.794-.097-2.89-.195-3.19-.195l3.888-1.17c0 .585-.2.975-.698 1.365zm-3.589-1.229l-1.296.975c.898-1.17 1.595-2.439 1.994-3.61.3-.682.399-1.56.3-2.536.896.39 1.295 1.171 1.295 2.147 0 .39-.299 1.073-.797 1.463-.3.293-.798.78-1.496 1.56z" fill="#86A196"/></g><defs><clipPath id="clip0"><rect width="55" height="55" rx="27.5" fill="#fff"/></clipPath></defs></svg>
<svg width="55" height="55" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M39.126 21.427c1.601-.069 2.987 1.788 3.095 4.147.11 2.359-1.1 4.327-2.7 4.396-1.602.07-2.987-1.787-3.096-4.146-.108-2.36 1.1-4.328 2.701-4.397zm-23.386.214c1.581 0 2.863 1.893 2.863 4.227 0 2.335-1.282 4.228-2.862 4.228-1.581 0-2.863-1.893-2.863-4.227 0-2.335 1.282-4.228 2.863-4.228z" fill="#395360"/><path d="M33.795 26.785H21.833v13.658h11.962V26.785z" fill="#FBAA6F"/><path d="m29.708 33.81-.1-.098c-.598-.488-.797-1.269-.298-1.951.498-.586 1.296-.78 1.993-.293-.398.098-.897.293-1.196.78a1.88 1.88 0 0 0-.399 1.561zm-4.486 0c.1-.391 0-.976-.399-1.464-.299-.488-.797-.683-1.196-.78.598-.488 1.496-.293 1.994.292s.3 1.463-.299 1.951c0-.097 0 0-.1 0zm7.278-3.123h.498l-1.096 4.683-2.094 6.244h-4.287l-3.19-5.268 1.097-3.122a200.504 200.504 0 0 1 2.093 2.634c.499.488 2.692.488 3.789-.488.697-.683 1.694-2.244 3.19-4.682z" fill="#DC7F3C"/><path d="M13.658 29.712h5.284v-8.78h-4.087c.598-4.39 3.588-8 7.476-9.755.798-3.317 1.695-5.463 2.692-6.634l.2-.195.1-.098c.298-.195.697-.39 1.096-.487 1.296-.195 2.492.683 2.691 1.853.1.683-.1 1.268-.498 1.756l-.1.098-.299.292c-.498.488-.897.976-1.396 1.464 1.197-.976 2.194-1.464 2.991-1.464.2 0 .399.098.698.195.598.39.897 1.171.498 1.756a4.203 4.203 0 0 1-.598.683c5.284 1.073 9.371 5.366 10.069 10.731l.1.78h-3.789v7.805h4.785l1.795 13.072c-4.187 2.537-9.47 3.805-15.751 3.805-6.28 0-11.564-1.268-15.751-3.805l1.794-13.072zm15.054 9.17c2.591-4.195 3.887-6.634 3.887-7.414 0-2.146-3.19-4-4.884-4-1.695 0-4.885 1.756-4.885 4 0 .78 1.296 3.317 3.788 7.414.3.39.598.585 1.097.585.498 0 .797-.195.997-.585z" fill="#BDCFC8"/><path d="M45.26 59.2c-3.587 5.528-11.08.223-17.655.223-6.575 0-12.354-3.61-15.94-9.024l.92-7.24c.3.112.574.585.873.585 1.395 0 2.59-1.24 2.79-2.707v1.354c0 1.804 1.295 3.158 2.789 3.158 1.494 0 2.79-1.466 2.79-3.158v-1.354 3.158c0 1.805 1.295 3.159 2.79 3.159 1.494 0 2.789-1.467 2.789-3.159 0 1.805 1.295 3.159 2.79 3.159 1.593 0 2.789-1.467 2.789-3.159v-3.158 1.354c0 1.804 1.295 3.158 2.79 3.158 1.594 0 2.79-1.466 2.79-3.158v-1.354c.198 1.58 1.394 2.707 2.789 2.707.398 0 .697-.113.996-.225L45.26 59.2z" fill="#809EB0"/><path d="m12.367 45.016.19-1.886c.298.097.695.194.992.194 1.39 0 2.581-1.069 2.78-2.331v1.165c0 1.554 1.29 2.72 2.779 2.72 1.489 0 2.78-1.263 2.78-2.72v-1.165 2.72c0 1.553 1.29 2.72 2.778 2.72 1.49 0 2.78-1.264 2.78-2.72 0 1.553 1.29 2.72 2.779 2.72 1.588 0 2.78-1.264 2.78-2.72v-2.72 1.165c0 1.554 1.29 2.72 2.778 2.72 1.589 0 2.78-1.263 2.78-2.72v-1.165c.198 1.36 1.39 2.33 2.779 2.33.397 0 .695-.096.992-.193l.298 1.845a2.796 2.796 0 0 1-1.29.291c-1.39 0-2.58-1.068-2.78-2.33V44.1c0 1.554-1.29 2.72-2.779 2.72-1.588 0-2.779-1.263-2.779-2.72v-1.166 2.72c0 1.554-1.29 2.72-2.779 2.72-1.588 0-2.78-1.263-2.78-2.72 0 1.554-1.29 2.72-2.779 2.72-1.488 0-2.779-1.263-2.779-2.72v-2.72V44.1c0 1.554-1.29 2.72-2.779 2.72-1.489 0-2.78-1.263-2.78-2.72v-1.166c-.198 1.36-1.389 2.331-2.778 2.331-.497 0-.885-.153-1.183-.25z" fill="#738E9E"/><path d="M41.571 23.273c-.997-2.829-2.99-4.585-4.685-4.39-2.193.196-2.692 3.707-2.293 7.805.399 4.097 1.695 7.414 3.888 7.121 2.093-.195 3.987-3.804 3.688-7.804-.1 1.17-.498 2.244-1.395 2.341-1.097.098-1.396-1.17-1.595-2.731-.1-1.561-.1-2.927.997-3.024.598-.098 1.096.195 1.395.682z" fill="#86A196"/><path d="M40.774 22.688c-.598-1.17-1.495-1.854-2.393-1.854-1.495.196-1.894 2.537-1.595 5.366.3 2.83 1.197 5.073 2.692 4.878 1.097-.098 1.894-1.464 2.193-3.317-.2.293-.498.488-.897.585-1.097.098-1.396-1.17-1.595-2.731-.1-1.561-.1-2.927.997-3.024.2 0 .399 0 .598.097z" fill="#fff"/><path d="M13.459 23.273c.997-2.829 2.99-4.585 4.685-4.39 2.194.196 2.692 3.707 2.293 7.805-.399 4.097-1.695 7.414-3.888 7.121-2.093-.195-3.987-3.804-3.688-7.804.1 1.17.498 2.244 1.396 2.341 1.096.098 1.395-1.17 1.595-2.731.1-1.561.1-2.927-.997-3.024-.499-.098-.997.195-1.396.682z" fill="#86A196"/><path d="M14.121 22.653c.598-1.171 1.495-1.854 2.393-1.854 1.495.195 1.894 2.537 1.595 5.366-.3 2.829-1.197 5.072-2.692 4.877-1.097-.097-1.894-1.463-2.094-3.317.2.293.499.488.898.586 1.096.097 1.395-1.17 1.595-2.732.1-1.56.1-2.926-.997-3.024-.3 0-.499 0-.698.098z" fill="#fff"/><path d="M22.83 29.322c0-.195-.1-.488-.1-.683 0-2.439 1.196-5.17 4.885-5.17 3.688 0 4.884 2.731 4.884 5.17 0 .39 0 .683-.1.975-.797-1.268-2.292-2.146-4.784-2.146-2.293.098-3.888.78-4.785 1.854z" fill="#F4F8FF"/><path d="M30.486 10.396c-1.794-.097-2.89-.195-3.19-.195l3.888-1.17c0 .585-.2.975-.698 1.365zm-3.589-1.229-1.296.975c.898-1.17 1.595-2.439 1.994-3.61.3-.682.399-1.56.3-2.536.896.39 1.295 1.171 1.295 2.147 0 .39-.299 1.073-.797 1.463-.3.293-.798.78-1.496 1.56z" fill="#86A196"/></g><defs><clipPath id="a"><rect width="55" height="55" rx="27.5" fill="#fff"/></clipPath></defs></svg>

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -1 +1 @@
<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.934.688L6.503 5.882l-5.499.82C.032 6.858-.342 8.107.37 8.849l3.927 4.022-.935 5.662c-.15 1.015.898 1.796 1.758 1.328l4.9-2.695 4.862 2.695c.86.468 1.908-.313 1.758-1.328l-.935-5.662 3.927-4.022c.711-.742.337-1.991-.635-2.147l-5.461-.82-2.47-5.194a1.17 1.17 0 00-2.132 0z" fill="#fff"/></svg>
<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8.934.688 6.503 5.882l-5.499.82C.032 6.858-.342 8.107.37 8.849l3.927 4.022-.935 5.662c-.15 1.015.898 1.796 1.758 1.328l4.9-2.695 4.862 2.695c.86.468 1.908-.313 1.758-1.328l-.935-5.662 3.927-4.022c.711-.742.337-1.991-.635-2.147l-5.461-.82-2.47-5.194a1.17 1.17 0 0 0-2.132 0z" fill="#fff"/></svg>

Before

Width:  |  Height:  |  Size: 378 B

After

Width:  |  Height:  |  Size: 379 B

View File

@@ -1 +1 @@
<svg aria-hidden="true" data-prefix="fas" data-icon="check-circle" class="svg-inline--fa fa-check-circle fa-w-16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#00A32A" d="M504 256a248 248 0 11-496 0 248 248 0 01496 0zM227 387l184-184c7-6 7-16 0-22l-22-23c-7-6-17-6-23 0L216 308l-70-70c-6-6-16-6-23 0l-22 23c-7 6-7 16 0 22l104 104c6 7 16 7 22 0z"/></svg>
<svg aria-hidden="true" data-prefix="fas" data-icon="check-circle" class="svg-inline--fa fa-check-circle fa-w-16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#00A32A" d="M504 256a248 248 0 1 1-496 0 248 248 0 0 1 496 0zM227 387l184-184c7-6 7-16 0-22l-22-23c-7-6-17-6-23 0L216 308l-70-70c-6-6-16-6-23 0l-22 23c-7 6-7 16 0 22l104 104c6 7 16 7 22 0z"/></svg>

Before

Width:  |  Height:  |  Size: 377 B

After

Width:  |  Height:  |  Size: 380 B

View File

@@ -1 +1 @@
<svg aria-hidden="true" data-prefix="far" data-icon="exclamation-circle" class="svg-inline--fa fa-exclamation-circle fa-w-16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#D63638" d="M256 8a248 248 0 100 496 248 248 0 000-496zm0 448a200 200 0 11-.1-400.1A200 200 0 01256 456zm42-104a42 42 0 11-84 0 42 42 0 0184 0zm-81.4-211.4l6.8 136a12 12 0 0012 11.4h41.2a12 12 0 0012-11.4l6.8-136a12 12 0 00-12-12.6h-54.8a12 12 0 00-12 12.6z"/></svg>
<svg aria-hidden="true" data-prefix="far" data-icon="exclamation-circle" class="svg-inline--fa fa-exclamation-circle fa-w-16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#D63638" d="M256 8a248 248 0 1 0 0 496 248 248 0 0 0 0-496zm0 448a200 200 0 1 1-.1-400.1A200 200 0 0 1 256 456zm42-104a42 42 0 1 1-84 0 42 42 0 0 1 84 0zm-81.4-211.4 6.8 136a12 12 0 0 0 12 11.4h41.2a12 12 0 0 0 12-11.4l6.8-136a12 12 0 0 0-12-12.6h-54.8a12 12 0 0 0-12 12.6z"/></svg>

Before

Width:  |  Height:  |  Size: 461 B

After

Width:  |  Height:  |  Size: 477 B

View File

@@ -1 +1 @@
<svg aria-hidden="true" data-prefix="fas" data-icon="exclamation-circle" class="svg-inline--fa fa-exclamation-circle fa-w-16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#E27730" d="M504 256a248 248 0 11-496 0 248 248 0 01496 0zm-248 50a46 46 0 100 92 46 46 0 000-92zm-43.7-165.3l7.4 136a12 12 0 0012 11.3h48.6a12 12 0 0012-11.3l7.4-136a12 12 0 00-12-12.7h-63.4a12 12 0 00-12 12.7z"/></svg>
<svg aria-hidden="true" data-prefix="fas" data-icon="exclamation-circle" class="svg-inline--fa fa-exclamation-circle fa-w-16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#E27730" d="M504 256a248 248 0 1 1-496 0 248 248 0 0 1 496 0zm-248 50a46 46 0 1 0 0 92 46 46 0 0 0 0-92zm-43.7-165.3 7.4 136a12 12 0 0 0 12 11.3h48.6a12 12 0 0 0 12-11.3l7.4-136a12 12 0 0 0-12-12.7h-63.4a12 12 0 0 0-12 12.7z"/></svg>

Before

Width:  |  Height:  |  Size: 415 B

After

Width:  |  Height:  |  Size: 428 B

View File

@@ -1 +1 @@
<svg aria-hidden="true" data-prefix="fas" data-icon="exclamation-circle" class="svg-inline--fa fa-exclamation-circle fa-w-16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#D63638" d="M504 256a248 248 0 11-496 0 248 248 0 01496 0zm-248 50a46 46 0 100 92 46 46 0 000-92zm-43.7-165.3l7.4 136a12 12 0 0012 11.3h48.6a12 12 0 0012-11.3l7.4-136a12 12 0 00-12-12.7h-63.4a12 12 0 00-12 12.7z"/></svg>
<svg aria-hidden="true" data-prefix="fas" data-icon="exclamation-circle" class="svg-inline--fa fa-exclamation-circle fa-w-16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#D63638" d="M504 256a248 248 0 1 1-496 0 248 248 0 0 1 496 0zm-248 50a46 46 0 1 0 0 92 46 46 0 0 0 0-92zm-43.7-165.3 7.4 136a12 12 0 0 0 12 11.3h48.6a12 12 0 0 0 12-11.3l7.4-136a12 12 0 0 0-12-12.7h-63.4a12 12 0 0 0-12 12.7z"/></svg>

Before

Width:  |  Height:  |  Size: 415 B

After

Width:  |  Height:  |  Size: 428 B

View File

@@ -1 +1 @@
<svg width="14" height="9" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 8.484l-5-5-5 5-1.992-.976L7 .516l6.992 6.992L12 8.484z" fill="#999"/></svg>
<svg width="14" height="9" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="m12 8.484-5-5-5 5-1.992-.976L7 .516l6.992 6.992L12 8.484z" fill="#999"/></svg>

Before

Width:  |  Height:  |  Size: 162 B

After

Width:  |  Height:  |  Size: 161 B

View File

@@ -1 +1 @@
<svg width="16" height="13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15.657 3.04a.98.98 0 00-.283-.688L14 .98a.98.98 0 00-1.374 0L6 7.615l-2.97-2.98a.98.98 0 00-1.373 0L.283 6.01a.98.98 0 000 1.374l5.03 5.03a.98.98 0 001.374 0l8.687-8.687a.98.98 0 00.283-.687z" fill="#00A32A"/></svg>
<svg width="16" height="13" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15.657 3.04a.98.98 0 0 0-.283-.688L14 .98a.98.98 0 0 0-1.374 0L6 7.615l-2.97-2.98a.98.98 0 0 0-1.373 0L.283 6.01a.98.98 0 0 0 0 1.374l5.03 5.03a.98.98 0 0 0 1.374 0l8.687-8.687a.98.98 0 0 0 .283-.687z" fill="#00A32A"/></svg>

Before

Width:  |  Height:  |  Size: 300 B

After

Width:  |  Height:  |  Size: 309 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="#999DA0"><path fill="none" d="M0 0h20v20H0z"/><style/><path d="M5.8 14H5v1h.8c.3 0 .5-.2.5-.5s-.2-.5-.5-.5zM11 2H3v16h13V7l-5-5zM7.2 14.6c0 .8-.6 1.4-1.4 1.4H5v1H4v-4h1.8c.8 0 1.4.6 1.4 1.4v.2zm4.1.5c0 1-.8 1.9-1.9 1.9H8v-4h1.4c1 0 1.9.8 1.9 1.9v.2zM15 14h-2v1h1.5v1H13v1h-1v-4h3v1zm0-2H4V3h7v4h4v5zm-5.6 2H9v2h.4c.6 0 1-.4 1-1s-.5-1-1-1z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="#999DA0"><path fill="none" d="M0 0h20v20H0z"/><path d="M5.8 14H5v1h.8c.3 0 .5-.2.5-.5s-.2-.5-.5-.5zM11 2H3v16h13V7l-5-5zM7.2 14.6c0 .8-.6 1.4-1.4 1.4H5v1H4v-4h1.8c.8 0 1.4.6 1.4 1.4v.2zm4.1.5c0 1-.8 1.9-1.9 1.9H8v-4h1.4c1 0 1.9.8 1.9 1.9v.2zM15 14h-2v1h1.5v1H13v1h-1v-4h3v1zm0-2H4V3h7v4h4v5zm-5.6 2H9v2h.4c.6 0 1-.4 1-1s-.5-1-1-1z"/></svg>

Before

Width:  |  Height:  |  Size: 413 B

After

Width:  |  Height:  |  Size: 405 B

View File

@@ -1 +1 @@
<svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .25A7.749 7.749 0 00.25 8 7.749 7.749 0 008 15.75 7.749 7.749 0 0015.75 8 7.749 7.749 0 008 .25zm3.781 9.813c.156.124.156.374 0 .53l-1.219 1.22c-.156.156-.406.156-.53 0L8 9.75l-2.063 2.063c-.125.156-.375.156-.53 0l-1.22-1.25c-.156-.126-.156-.376 0-.532L6.25 8 4.187 5.969c-.156-.125-.156-.375 0-.532l1.25-1.218c.125-.157.375-.157.532 0L8 6.25l2.031-2.031c.125-.157.375-.157.531 0l1.22 1.218c.155.157.155.407 0 .532L9.75 8l2.031 2.063z" fill="#d63638"/></svg>
<svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 .25A7.749 7.749 0 0 0 .25 8 7.749 7.749 0 0 0 8 15.75 7.749 7.749 0 0 0 15.75 8 7.749 7.749 0 0 0 8 .25zm3.781 9.813c.156.124.156.374 0 .53l-1.219 1.22c-.156.156-.406.156-.53 0L8 9.75l-2.063 2.063c-.125.156-.375.156-.53 0l-1.22-1.25c-.156-.126-.156-.376 0-.532L6.25 8 4.187 5.969c-.156-.125-.156-.375 0-.532l1.25-1.218c.125-.157.375-.157.532 0L8 6.25l2.031-2.031c.125-.157.375-.157.531 0l1.22 1.218c.155.157.155.407 0 .532L9.75 8l2.031 2.063z" fill="#d63638"/></svg>

Before

Width:  |  Height:  |  Size: 545 B

After

Width:  |  Height:  |  Size: 553 B

View File

@@ -1 +1 @@
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M16 8.5C16 4.25 12.5.75 8.25.75 3.969.75.5 4.25.5 8.5a7.749 7.749 0 007.75 7.75c4.25 0 7.75-3.469 7.75-7.75zm-7.75 1.563c.781 0 1.438.656 1.438 1.437 0 .813-.657 1.438-1.438 1.438A1.414 1.414 0 016.812 11.5c0-.781.625-1.438 1.438-1.438zM6.875 4.905c-.031-.218.156-.406.375-.406h1.969c.219 0 .406.188.375.406l-.219 4.25c-.031.219-.188.344-.375.344H7.469c-.188 0-.344-.125-.375-.344l-.219-4.25z" fill="#D63637"/></svg>
<svg width="16" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M16 8.5C16 4.25 12.5.75 8.25.75 3.969.75.5 4.25.5 8.5a7.749 7.749 0 0 0 7.75 7.75c4.25 0 7.75-3.469 7.75-7.75zm-7.75 1.563c.781 0 1.438.656 1.438 1.437 0 .813-.657 1.438-1.438 1.438A1.414 1.414 0 0 1 6.812 11.5c0-.781.625-1.438 1.438-1.438zM6.875 4.905c-.031-.218.156-.406.375-.406h1.969c.219 0 .406.188.375.406l-.219 4.25c-.031.219-.188.344-.375.344H7.469c-.188 0-.344-.125-.375-.344l-.219-4.25z" fill="#D63637"/></svg>

Before

Width:  |  Height:  |  Size: 500 B

After

Width:  |  Height:  |  Size: 504 B

View File

@@ -1 +1 @@
<svg width="18" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5.75 19.969c0 .117 0 .234.078.351l.977 1.407a.57.57 0 00.508.273h3.085a.569.569 0 00.508-.273l.977-1.407a1.14 1.14 0 00.078-.351V18.25H5.75v1.719zM8.875 14.5c.664 0 1.25-.547 1.25-1.25 0-.664-.586-1.25-1.25-1.25-.703 0-1.25.586-1.25 1.25 0 .703.547 1.25 1.25 1.25zm0-12.5C4.852 2 2 5.242 2 8.875a6.82 6.82 0 001.68 4.531c.664.742 1.68 2.305 2.03 3.594h1.876c0-.156 0-.352-.078-.547-.196-.703-.86-2.5-2.422-4.258a5.186 5.186 0 01-1.211-3.32c-.04-2.852 2.305-5 5-5 2.734 0 5 2.266 5 5 0 1.21-.469 2.383-1.25 3.32-1.523 1.72-2.227 3.555-2.422 4.258-.078.195-.078.352-.078.547H12c.352-1.29 1.367-2.852 2.031-3.594 1.055-1.21 1.719-2.773 1.719-4.531C15.75 5.085 12.664 2 8.875 2zm-.39 8.75h.742a.632.632 0 00.625-.547l.507-3.75c.04-.351-.273-.703-.625-.703H7.977c-.352 0-.665.352-.625.703l.507 3.75c.04.313.313.547.625.547z" fill="#888"/></svg>
<svg width="18" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5.75 19.969c0 .117 0 .234.078.351l.977 1.407a.57.57 0 0 0 .508.273h3.085a.569.569 0 0 0 .508-.273l.977-1.407a1.14 1.14 0 0 0 .078-.351V18.25H5.75v1.719zM8.875 14.5c.664 0 1.25-.547 1.25-1.25 0-.664-.586-1.25-1.25-1.25-.703 0-1.25.586-1.25 1.25 0 .703.547 1.25 1.25 1.25zm0-12.5C4.852 2 2 5.242 2 8.875a6.82 6.82 0 0 0 1.68 4.531c.664.742 1.68 2.305 2.03 3.594h1.876c0-.156 0-.352-.078-.547-.196-.703-.86-2.5-2.422-4.258a5.186 5.186 0 0 1-1.211-3.32c-.04-2.852 2.305-5 5-5 2.734 0 5 2.266 5 5 0 1.21-.469 2.383-1.25 3.32-1.523 1.72-2.227 3.555-2.422 4.258-.078.195-.078.352-.078.547H12c.352-1.29 1.367-2.852 2.031-3.594 1.055-1.21 1.719-2.773 1.719-4.531C15.75 5.085 12.664 2 8.875 2zm-.39 8.75h.742a.632.632 0 0 0 .625-.547l.507-3.75c.04-.351-.273-.703-.625-.703H7.977c-.352 0-.665.352-.625.703l.507 3.75c.04.313.313.547.625.547z" fill="#888"/></svg>

Before

Width:  |  Height:  |  Size: 924 B

After

Width:  |  Height:  |  Size: 935 B

View File

@@ -1 +1 @@
<svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15.75 8c0-4.25-3.5-7.75-7.75-7.75C3.719.25.25 3.75.25 8A7.749 7.749 0 008 15.75c4.25 0 7.75-3.469 7.75-7.75zm-8.656 4.125a.53.53 0 01-.719 0l-3.25-3.25a.53.53 0 010-.719l.719-.687a.442.442 0 01.687 0L6.75 9.656l4.688-4.687a.442.442 0 01.687 0l.719.687a.53.53 0 010 .719l-5.75 5.75z" fill="#00A32A"/></svg>
<svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15.75 8c0-4.25-3.5-7.75-7.75-7.75C3.719.25.25 3.75.25 8A7.749 7.749 0 0 0 8 15.75c4.25 0 7.75-3.469 7.75-7.75zm-8.656 4.125a.53.53 0 0 1-.719 0l-3.25-3.25a.53.53 0 0 1 0-.719l.719-.687a.442.442 0 0 1 .687 0L6.75 9.656l4.688-4.687a.442.442 0 0 1 .687 0l.719.687a.53.53 0 0 1 0 .719l-5.75 5.75z" fill="#00A32A"/></svg>

Before

Width:  |  Height:  |  Size: 390 B

After

Width:  |  Height:  |  Size: 401 B

View File

@@ -1 +1 @@
<svg width="19" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18.781 13.781L11.281.75c-.562-.969-2.031-1-2.594 0l-7.5 13.031C.625 14.75 1.344 16 2.5 16h14.969c1.156 0 1.875-1.219 1.312-2.219zM10 11.062c.781 0 1.438.657 1.438 1.438 0 .813-.657 1.438-1.438 1.438A1.414 1.414 0 018.562 12.5c0-.781.625-1.438 1.438-1.438zM8.625 5.907c-.031-.22.156-.407.375-.407h1.969c.219 0 .406.187.375.406l-.219 4.25c-.031.219-.188.344-.375.344H9.219c-.188 0-.344-.125-.375-.344l-.219-4.25z" fill="#E27730"/></svg>
<svg width="19" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18.781 13.781 11.281.75c-.562-.969-2.031-1-2.594 0l-7.5 13.031C.625 14.75 1.344 16 2.5 16h14.969c1.156 0 1.875-1.219 1.312-2.219zM10 11.062c.781 0 1.438.657 1.438 1.438 0 .813-.657 1.438-1.438 1.438A1.414 1.414 0 0 1 8.562 12.5c0-.781.625-1.438 1.438-1.438zM8.625 5.907c-.031-.22.156-.407.375-.407h1.969c.219 0 .406.187.375.406l-.219 4.25c-.031.219-.188.344-.375.344H9.219c-.188 0-.344-.125-.375-.344l-.219-4.25z" fill="#E27730"/></svg>

Before

Width:  |  Height:  |  Size: 519 B

After

Width:  |  Height:  |  Size: 521 B

View File

@@ -1 +1 @@
<svg style="background-color:#ffffff00" xmlns="http://www.w3.org/2000/svg" width="100" height="100"><path d="M50 0c27.614 0 50 22.386 50 50s-22.386 50-50 50S0 77.614 0 50 22.386 0 50 0z" fill="#1685b7"/><path d="M73.023 67.067l-9.344-9.344a2.247 2.247 0 00-1.593-.656h-1.528a19.399 19.399 0 004.124-11.996c0-10.77-8.725-19.495-19.494-19.495-10.768 0-19.494 8.726-19.494 19.495 0 10.768 8.726 19.493 19.494 19.493a19.4 19.4 0 0011.997-4.123v1.527c0 .6.234 1.172.655 1.594l9.344 9.344a2.24 2.24 0 003.178 0l2.652-2.653a2.26 2.26 0 00.01-3.186zm-27.835-10c-6.626 0-11.996-5.361-11.996-11.996 0-6.627 5.36-11.997 11.996-11.997 6.626 0 11.997 5.361 11.997 11.997 0 6.626-5.361 11.996-11.997 11.996z" fill="#fff"/></svg>
<svg style="background-color:#ffffff00" xmlns="http://www.w3.org/2000/svg" width="100" height="100"><path d="M50 0c27.614 0 50 22.386 50 50s-22.386 50-50 50S0 77.614 0 50 22.386 0 50 0z" fill="#1685b7"/><path d="m73.023 67.067-9.344-9.344a2.247 2.247 0 0 0-1.593-.656h-1.528a19.399 19.399 0 0 0 4.124-11.996c0-10.77-8.725-19.495-19.494-19.495-10.768 0-19.494 8.726-19.494 19.495 0 10.768 8.726 19.493 19.494 19.493a19.4 19.4 0 0 0 11.997-4.123v1.527c0 .6.234 1.172.655 1.594l9.344 9.344a2.24 2.24 0 0 0 3.178 0l2.652-2.653a2.26 2.26 0 0 0 .01-3.186zm-27.835-10c-6.626 0-11.996-5.361-11.996-11.996 0-6.627 5.36-11.997 11.996-11.997 6.626 0 11.997 5.361 11.997 11.997 0 6.626-5.361 11.996-11.997 11.996z" fill="#fff"/></svg>

Before

Width:  |  Height:  |  Size: 714 B

After

Width:  |  Height:  |  Size: 722 B

View File

@@ -1 +1 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 232.7 60" xml:space="preserve"><style>.st1{fill:none}.st8,.st9{fill-rule:evenodd;clip-rule:evenodd;fill:#86a196}.st9{fill:#fff}</style><path d="M69.1 21.4l-4.4 12.4h-.1l-1.9-6.6-2-6.1h-3.1v.4l6 17.9h1.7l4.4-11.7h.1l4.4 11.7h1.6l6.1-17.9v-.4h-3.2l-1.9 6.1-1.8 6.5h-.1l-4.3-12.4h-1.5zm18.6 17.9h-3V21.1h7.5c3.4-.1 6.3 2.5 6.4 5.9v.5c.1 3.4-2.6 6.2-6 6.3h-5l.1 5.5zm-.1-8.1h4.6c2 0 3.5-1.6 3.5-3.6v-.2c.1-1.9-1.3-3.6-3.3-3.7h-4.8v7.5zm29-.7l-7.4-9.4h-1.1v18.2h3V27.9l5.3 6.7h.4l5.2-6.7v11.4h3.1V21.1H124l-7.4 9.4zm24.1-2.8v7.9c0 1.1 0 1.9 1.4 1.7v1.9c-1.8.3-3.6.1-3.6-2v-.5c-.7 1.7-2.5 2.8-4.3 2.7-3.8 0-5.7-3.1-5.7-6.6.1-4.2 3.1-6.4 7.1-6.4 1.8.1 3.5.5 5.1 1.3zM138 33v-3.7c-.8-.4-1.7-.5-2.6-.5-2.4 0-4 1.4-4.1 4.1 0 2.3 1.1 4.1 3.4 4.1 2.2 0 3.2-1.7 3.3-4zm6.6-10.1c0 .9.7 1.7 1.6 1.7h.1c.9 0 1.6-.6 1.7-1.5v-.2c-.1-.9-.9-1.6-1.8-1.6-.9.1-1.5.8-1.6 1.6zm3.1 4h-2.8v12.4h2.8V26.9zm3.6-6.6v14.5c0 4.2 1.8 5.2 5.6 4.5l-.1-2.2c-2.1.3-2.7-.3-2.7-2.4V20.3h-2.8zm13.5 13.9c.1 3.8 3.8 5.6 7.4 5.5 3.4 0 7.2-1.5 7.2-5.5 0-4.2-3.4-4.9-7.1-5.3-2.1-.3-4.2-.5-4.2-2.6s2.2-2.7 3.8-2.7 3.9.6 4 2.6h2.9c-.1-3.7-3.4-5.3-6.8-5.3s-6.8 1.8-6.8 5.5 3.3 4.7 6.6 5c2.1.2 4.6.4 4.6 2.8S174 37 172.1 37s-4.2-.8-4.4-2.8h-2.9zm26.4-3.7l-7.4-9.4h-1.1v18.2h3V27.9l5.3 6.7h.4l5.2-6.7v11.4h3V21.1h-1.1l-7.3 9.4zm16.6-6.7v15.5h3V23.8h5.2v-2.7h-13.5v2.7h5.3zm14 15.5h-3V21.1h7.5c3.4-.1 6.3 2.5 6.4 5.9v.5c.1 3.4-2.6 6.2-6 6.3h-5l.1 5.5zm0-8.1h4.6c2 0 3.5-1.6 3.5-3.6v-.2c.1-1.9-1.3-3.6-3.3-3.7h-4.8v7.5z" fill-rule="evenodd" clip-rule="evenodd" fill="#23282c"/><path class="st1" d="M-6.2 0h60v60h-60z"/><path d="M16.7 8.1c-4 2.1-6.9 5.8-7.9 10.2-10 8.3-11.4 23.1-3.1 33.1s23.1 11.4 33.1 3.1 11.4-23.1 3.1-33.1c-.9-1.1-2-2.2-3.1-3.1-1.2-4.9-4.7-9-9.4-10.8-.2-1.2-1-2.2-2.1-2.7C27.2 2.2 25 .3 22.5.4c-1.8.1-3.3 1.1-4 2.8-.8 1.5-1.4 3.2-1.8 4.9z" fill-rule="evenodd" clip-rule="evenodd" fill="#395360"/><path fill="#fbaa6f" d="M18 26h12v14H18z"/><path d="M25.9 33.2l-.1-.1c-.6-.5-.8-1.3-.3-2 .5-.6 1.3-.8 2-.3-.5.1-.9.4-1.2.8-.4.5-.6 1-.4 1.6zm-4.5 0c.1-.5 0-1.1-.4-1.5-.3-.4-.7-.7-1.2-.8.6-.5 1.5-.3 2 .3.4.6.3 1.5-.4 2 0-.1 0 0 0 0zm7.2-3.2h.5L28 34.8l-2.1 6.4h-4.3l-3.2-5.4 1.1-3.2c1.1 1.4 1.8 2.3 2.1 2.7.5.5 2.7.5 3.8-.5 1.2-1.5 2.3-3.1 3.2-4.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#dc7f3c"/><path d="M9.7 29H15v-9h-4.1c.6-4.4 3.5-8.2 7.5-10 .8-3.3 1.7-5.6 2.7-6.8l.2-.2h.1c.3-.2.7-.4 1.1-.5 1.3-.2 2.5.7 2.7 1.9.1.7-.1 1.3-.5 1.8h-.1l-.3.3c-.5.5-.9 1-1.3 1.6.8-.8 1.9-1.4 3-1.5.2 0 .5.1.7.2.6.4.9 1.2.5 1.8l-.6.6c5.4 1.2 9.4 5.6 10.1 11l.1.9H33v8h4.8l1.8 13.4c-4.2 2.6-9.5 3.9-15.9 3.9s-11.5-1.3-15.7-4L9.7 29zm15.2 9.4c2.6-4.3 3.9-6.8 3.9-7.6 0-2.2-3.2-4.1-4.9-4.1S19 28.5 19 30.8c0 .8 1.3 3.4 3.8 7.6.2.4.6.6 1.1.6.4 0 .8-.2 1-.6z" fill-rule="evenodd" clip-rule="evenodd" fill="#bdcfc8"/><path class="st1" d="M19 31.1h9.6l-1.6 16h-6.4z"/><path d="M39.8 48.8c-6.6 8.9-19.1 10.7-28 4.1-1.6-1.2-2.9-2.5-4.1-4.1l.8-6.1c.3.1.7.2 1 .2 1.4 0 2.6-1 2.8-2.4v1.2c0 1.6 1.3 2.8 2.8 2.8s2.8-1.3 2.8-2.8v1.6c.1 1.6 1.4 2.8 3 2.7 1.4-.1 2.6-1.2 2.7-2.7 0 1.6 1.3 2.8 2.8 2.8s2.8-1.3 2.8-2.8v-1.6c0 1.6 1.3 2.8 2.8 2.8s2.8-1.3 2.8-2.8v-1.2C35.3 42 36.5 43 38 43c.3 0 .7-.1 1-.2l.8 6z" fill-rule="evenodd" clip-rule="evenodd" fill="#809eb0"/><path d="M8.3 44.7l.3-1.9c.3.1.7.2 1 .2 1.4 0 2.6-1 2.8-2.4v1.2c0 1.6 1.3 2.8 2.8 2.8s2.8-1.3 2.8-2.8v1.6c.1 1.6 1.4 2.8 3 2.7 1.4-.1 2.6-1.2 2.7-2.7 0 1.6 1.3 2.8 2.8 2.8s2.8-1.3 2.8-2.8v-1.6c0 1.6 1.3 2.8 2.8 2.8s2.8-1.3 2.8-2.8v-1.2C35.3 42 36.5 43 38 43c.3 0 .7-.1 1-.2l.2 1.9c-1.4.7-3.1.1-3.8-1.3-.1-.3-.2-.5-.3-.8v1.2c0 1.6-1.3 2.8-2.8 2.8s-2.8-1.3-2.8-2.8v1.6c0 1.6-1.3 2.8-2.8 2.8s-2.8-1.3-2.8-2.8c-.1 1.6-1.4 2.8-3 2.7-1.4-.1-2.6-1.2-2.7-2.7v-1.7c0 1.6-1.3 2.8-2.8 2.8s-2.8-1.3-2.8-2.8v-1.2C12.3 44 11 45 9.6 45c-.5 0-.9-.1-1.3-.3z" fill-rule="evenodd" clip-rule="evenodd" fill="#738e9e"/><path class="st8" d="M37.8 22.4c-1-2.9-3-4.7-4.7-4.5-2.2.2-2.7 3.8-2.3 8s1.7 7.6 3.9 7.3 4-3.9 3.7-8c-.1 1.2-.5 2.3-1.4 2.4-1.1.1-1.4-1.2-1.6-2.8s-.1-3 1-3.1c.5-.1 1.1.2 1.4.7z"/><path class="st9" d="M37 21.8c-.6-1.2-1.5-2-2.4-1.9-1.5.1-1.9 2.6-1.6 5.5s1.2 5.2 2.7 5c1.1-.1 1.9-1.5 2.2-3.4-.2.3-.5.5-.9.6-1.1.1-1.4-1.2-1.6-2.8s-.1-3 1-3.1c.2 0 .4 0 .6.1z"/><path class="st8" d="M9.6 22.4c1-2.9 3-4.7 4.7-4.5 2.2.2 2.7 3.8 2.3 8s-1.7 7.6-3.9 7.3-4-3.9-3.7-8c.1 1.2.5 2.3 1.4 2.4 1.1.1 1.4-1.2 1.6-2.8s.1-3-1-3.1c-.6-.1-1.1.2-1.4.7z"/><path class="st9" d="M10.4 21.8c.6-1.2 1.5-2 2.4-1.9 1.5.1 1.9 2.6 1.6 5.5s-1.2 5.2-2.7 5c-1.1-.1-1.9-1.5-2.2-3.4.2.3.5.5.9.6 1.1.1 1.4-1.2 1.6-2.8s.1-3-1-3.1c-.2-.1-.5 0-.6.1z"/><path d="M19 28.6v-.7c0-2.5 1.2-5.3 4.9-5.3s4.9 2.8 4.9 5.3c0 .3 0 .7-.1 1-.8-1.4-2.3-2.2-4.8-2.2-2.5.1-4 .8-4.9 1.9z" fill-rule="evenodd" clip-rule="evenodd" fill="#f4f8ff"/><path class="st8" d="M26.5 9.2L23.3 9l3.9-1.2c.1.6-.2 1.1-.7 1.4zM23 8.1l-1.3 1c.8-1.2 1.5-2.4 2-3.7.3-.8.4-1.7.3-2.6.8.4 1.3 1.3 1.2 2.2-.1.6-.3 1.1-.8 1.5-.5.5-1 1.1-1.4 1.6z"/></svg>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 232.7 60" xml:space="preserve"><style>.st1{fill:none}.st8,.st9{fill-rule:evenodd;clip-rule:evenodd;fill:#86a196}.st9{fill:#fff}</style><path d="m69.1 21.4-4.4 12.4h-.1l-1.9-6.6-2-6.1h-3.1v.4l6 17.9h1.7l4.4-11.7h.1l4.4 11.7h1.6l6.1-17.9v-.4h-3.2l-1.9 6.1-1.8 6.5h-.1l-4.3-12.4h-1.5zm18.6 17.9h-3V21.1h7.5c3.4-.1 6.3 2.5 6.4 5.9v.5c.1 3.4-2.6 6.2-6 6.3h-5l.1 5.5zm-.1-8.1h4.6c2 0 3.5-1.6 3.5-3.6v-.2c.1-1.9-1.3-3.6-3.3-3.7h-4.8v7.5zm29-.7-7.4-9.4h-1.1v18.2h3V27.9l5.3 6.7h.4l5.2-6.7v11.4h3.1V21.1H124l-7.4 9.4zm24.1-2.8v7.9c0 1.1 0 1.9 1.4 1.7v1.9c-1.8.3-3.6.1-3.6-2v-.5c-.7 1.7-2.5 2.8-4.3 2.7-3.8 0-5.7-3.1-5.7-6.6.1-4.2 3.1-6.4 7.1-6.4 1.8.1 3.5.5 5.1 1.3zM138 33v-3.7c-.8-.4-1.7-.5-2.6-.5-2.4 0-4 1.4-4.1 4.1 0 2.3 1.1 4.1 3.4 4.1 2.2 0 3.2-1.7 3.3-4zm6.6-10.1c0 .9.7 1.7 1.6 1.7h.1c.9 0 1.6-.6 1.7-1.5v-.2c-.1-.9-.9-1.6-1.8-1.6-.9.1-1.5.8-1.6 1.6zm3.1 4h-2.8v12.4h2.8V26.9zm3.6-6.6v14.5c0 4.2 1.8 5.2 5.6 4.5l-.1-2.2c-2.1.3-2.7-.3-2.7-2.4V20.3h-2.8zm13.5 13.9c.1 3.8 3.8 5.6 7.4 5.5 3.4 0 7.2-1.5 7.2-5.5 0-4.2-3.4-4.9-7.1-5.3-2.1-.3-4.2-.5-4.2-2.6s2.2-2.7 3.8-2.7 3.9.6 4 2.6h2.9c-.1-3.7-3.4-5.3-6.8-5.3s-6.8 1.8-6.8 5.5 3.3 4.7 6.6 5c2.1.2 4.6.4 4.6 2.8S174 37 172.1 37s-4.2-.8-4.4-2.8h-2.9zm26.4-3.7-7.4-9.4h-1.1v18.2h3V27.9l5.3 6.7h.4l5.2-6.7v11.4h3V21.1h-1.1l-7.3 9.4zm16.6-6.7v15.5h3V23.8h5.2v-2.7h-13.5v2.7h5.3zm14 15.5h-3V21.1h7.5c3.4-.1 6.3 2.5 6.4 5.9v.5c.1 3.4-2.6 6.2-6 6.3h-5l.1 5.5zm0-8.1h4.6c2 0 3.5-1.6 3.5-3.6v-.2c.1-1.9-1.3-3.6-3.3-3.7h-4.8v7.5z" fill-rule="evenodd" clip-rule="evenodd" fill="#23282c"/><path class="st1" d="M-6.2 0h60v60h-60z"/><path d="M16.7 8.1c-4 2.1-6.9 5.8-7.9 10.2-10 8.3-11.4 23.1-3.1 33.1s23.1 11.4 33.1 3.1 11.4-23.1 3.1-33.1c-.9-1.1-2-2.2-3.1-3.1-1.2-4.9-4.7-9-9.4-10.8-.2-1.2-1-2.2-2.1-2.7C27.2 2.2 25 .3 22.5.4c-1.8.1-3.3 1.1-4 2.8-.8 1.5-1.4 3.2-1.8 4.9z" fill-rule="evenodd" clip-rule="evenodd" fill="#395360"/><path fill="#fbaa6f" d="M18 26h12v14H18z"/><path d="m25.9 33.2-.1-.1c-.6-.5-.8-1.3-.3-2 .5-.6 1.3-.8 2-.3-.5.1-.9.4-1.2.8-.4.5-.6 1-.4 1.6zm-4.5 0c.1-.5 0-1.1-.4-1.5-.3-.4-.7-.7-1.2-.8.6-.5 1.5-.3 2 .3.4.6.3 1.5-.4 2 0-.1 0 0 0 0zm7.2-3.2h.5L28 34.8l-2.1 6.4h-4.3l-3.2-5.4 1.1-3.2c1.1 1.4 1.8 2.3 2.1 2.7.5.5 2.7.5 3.8-.5 1.2-1.5 2.3-3.1 3.2-4.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#dc7f3c"/><path d="M9.7 29H15v-9h-4.1c.6-4.4 3.5-8.2 7.5-10 .8-3.3 1.7-5.6 2.7-6.8l.2-.2h.1c.3-.2.7-.4 1.1-.5 1.3-.2 2.5.7 2.7 1.9.1.7-.1 1.3-.5 1.8h-.1l-.3.3c-.5.5-.9 1-1.3 1.6.8-.8 1.9-1.4 3-1.5.2 0 .5.1.7.2.6.4.9 1.2.5 1.8l-.6.6c5.4 1.2 9.4 5.6 10.1 11l.1.9H33v8h4.8l1.8 13.4c-4.2 2.6-9.5 3.9-15.9 3.9s-11.5-1.3-15.7-4L9.7 29zm15.2 9.4c2.6-4.3 3.9-6.8 3.9-7.6 0-2.2-3.2-4.1-4.9-4.1S19 28.5 19 30.8c0 .8 1.3 3.4 3.8 7.6.2.4.6.6 1.1.6.4 0 .8-.2 1-.6z" fill-rule="evenodd" clip-rule="evenodd" fill="#bdcfc8"/><path class="st1" d="M19 31.1h9.6l-1.6 16h-6.4z"/><path d="M39.8 48.8c-6.6 8.9-19.1 10.7-28 4.1-1.6-1.2-2.9-2.5-4.1-4.1l.8-6.1c.3.1.7.2 1 .2 1.4 0 2.6-1 2.8-2.4v1.2c0 1.6 1.3 2.8 2.8 2.8s2.8-1.3 2.8-2.8v1.6c.1 1.6 1.4 2.8 3 2.7 1.4-.1 2.6-1.2 2.7-2.7 0 1.6 1.3 2.8 2.8 2.8s2.8-1.3 2.8-2.8v-1.6c0 1.6 1.3 2.8 2.8 2.8s2.8-1.3 2.8-2.8v-1.2C35.3 42 36.5 43 38 43c.3 0 .7-.1 1-.2l.8 6z" fill-rule="evenodd" clip-rule="evenodd" fill="#809eb0"/><path d="m8.3 44.7.3-1.9c.3.1.7.2 1 .2 1.4 0 2.6-1 2.8-2.4v1.2c0 1.6 1.3 2.8 2.8 2.8s2.8-1.3 2.8-2.8v1.6c.1 1.6 1.4 2.8 3 2.7 1.4-.1 2.6-1.2 2.7-2.7 0 1.6 1.3 2.8 2.8 2.8s2.8-1.3 2.8-2.8v-1.6c0 1.6 1.3 2.8 2.8 2.8s2.8-1.3 2.8-2.8v-1.2C35.3 42 36.5 43 38 43c.3 0 .7-.1 1-.2l.2 1.9c-1.4.7-3.1.1-3.8-1.3-.1-.3-.2-.5-.3-.8v1.2c0 1.6-1.3 2.8-2.8 2.8s-2.8-1.3-2.8-2.8v1.6c0 1.6-1.3 2.8-2.8 2.8s-2.8-1.3-2.8-2.8c-.1 1.6-1.4 2.8-3 2.7-1.4-.1-2.6-1.2-2.7-2.7v-1.7c0 1.6-1.3 2.8-2.8 2.8s-2.8-1.3-2.8-2.8v-1.2C12.3 44 11 45 9.6 45c-.5 0-.9-.1-1.3-.3z" fill-rule="evenodd" clip-rule="evenodd" fill="#738e9e"/><path class="st8" d="M37.8 22.4c-1-2.9-3-4.7-4.7-4.5-2.2.2-2.7 3.8-2.3 8s1.7 7.6 3.9 7.3 4-3.9 3.7-8c-.1 1.2-.5 2.3-1.4 2.4-1.1.1-1.4-1.2-1.6-2.8s-.1-3 1-3.1c.5-.1 1.1.2 1.4.7z"/><path class="st9" d="M37 21.8c-.6-1.2-1.5-2-2.4-1.9-1.5.1-1.9 2.6-1.6 5.5s1.2 5.2 2.7 5c1.1-.1 1.9-1.5 2.2-3.4-.2.3-.5.5-.9.6-1.1.1-1.4-1.2-1.6-2.8s-.1-3 1-3.1c.2 0 .4 0 .6.1z"/><path class="st8" d="M9.6 22.4c1-2.9 3-4.7 4.7-4.5 2.2.2 2.7 3.8 2.3 8s-1.7 7.6-3.9 7.3-4-3.9-3.7-8c.1 1.2.5 2.3 1.4 2.4 1.1.1 1.4-1.2 1.6-2.8s.1-3-1-3.1c-.6-.1-1.1.2-1.4.7z"/><path class="st9" d="M10.4 21.8c.6-1.2 1.5-2 2.4-1.9 1.5.1 1.9 2.6 1.6 5.5s-1.2 5.2-2.7 5c-1.1-.1-1.9-1.5-2.2-3.4.2.3.5.5.9.6 1.1.1 1.4-1.2 1.6-2.8s.1-3-1-3.1c-.2-.1-.5 0-.6.1z"/><path d="M19 28.6v-.7c0-2.5 1.2-5.3 4.9-5.3s4.9 2.8 4.9 5.3c0 .3 0 .7-.1 1-.8-1.4-2.3-2.2-4.8-2.2-2.5.1-4 .8-4.9 1.9z" fill-rule="evenodd" clip-rule="evenodd" fill="#f4f8ff"/><path class="st8" d="M26.5 9.2 23.3 9l3.9-1.2c.1.6-.2 1.1-.7 1.4zM23 8.1l-1.3 1c.8-1.2 1.5-2.4 2-3.7.3-.8.4-1.7.3-2.6.8.4 1.3 1.3 1.2 2.2-.1.6-.3 1.1-.8 1.5-.5.5-1 1.1-1.4 1.6z"/></svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="#9ea3a8" width="64" height="64" viewBox="0 0 43 34"><path d="M.007 3.585v16.836q0 3.586 3.751 3.585L20 24v-5h10v-4.986l.991-1L34 13V3.585Q34 0 30.249 0H3.758Q.007 0 .007 3.585zm3.517 2.572a1.49 1.49 0 01-.508-.935 1.581 1.581 0 01.274-1.208 1.449 1.449 0 011.094-.663 1.756 1.756 0 011.25.312l11.409 7.716 11.331-7.716a1.96 1.96 0 011.289-.312 1.546 1.546 0 011.094.663 1.4 1.4 0 01.273 1.208 1.67 1.67 0 01-.547.935l-13.44 11.068z"/><path d="M22 28h10l-.009 4.624a1.126 1.126 0 001.922.8l8.25-8.236a1.126 1.126 0 000-1.594l-8.25-8.241a1.126 1.126 0 00-1.922.8v4.866L22 21v7z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" fill="#9ea3a8" width="64" height="64" viewBox="0 0 43 34"><path d="M.007 3.585v16.836q0 3.586 3.751 3.585L20 24v-5h10v-4.986l.991-1L34 13V3.585Q34 0 30.249 0H3.758Q.007 0 .007 3.585zm3.517 2.572a1.49 1.49 0 0 1-.508-.935 1.581 1.581 0 0 1 .274-1.208 1.449 1.449 0 0 1 1.094-.663 1.756 1.756 0 0 1 1.25.312l11.409 7.716 11.331-7.716a1.96 1.96 0 0 1 1.289-.312 1.546 1.546 0 0 1 1.094.663 1.4 1.4 0 0 1 .273 1.208 1.67 1.67 0 0 1-.547.935l-13.44 11.068z"/><path d="M22 28h10l-.009 4.624a1.126 1.126 0 0 0 1.922.8l8.25-8.236a1.126 1.126 0 0 0 0-1.594l-8.25-8.241a1.126 1.126 0 0 0-1.922.8v4.866L22 21v7z"/></svg>

Before

Width:  |  Height:  |  Size: 630 B

After

Width:  |  Height:  |  Size: 649 B

View File

@@ -1 +1 @@
<svg width="75" height="75" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M28.625 10.125c-4.875 2.5-8.625 7.125-9.875 12.75A29.244 29.244 0 008.125 45.5c0 16.25 13.125 29.375 29.375 29.375S66.875 61.75 66.875 45.5c0-9.125-4.125-17.25-10.625-22.625-1.5-6.25-5.875-11.25-11.75-13.5-.25-1.5-1.25-2.75-2.625-3.375C41.75 2.875 39.25.5 36.125.5 33.75.5 31.75 1.875 30.875 4c-.875 1.5-1.625 3.625-2.25 6.125z" fill="#395360"/><path d="M45.25 32.5h-15V50h15V32.5z" fill="#FBAA6F"/><path d="M40.125 41.5L40 41.375c-.75-.625-1-1.625-.375-2.5.625-.75 1.625-1 2.5-.375-.5.125-1.125.375-1.5 1a2.444 2.444 0 00-.5 2zm-5.625 0c.125-.5 0-1.25-.5-1.875-.375-.625-1-.875-1.5-1 .75-.625 1.875-.375 2.5.375s.375 1.875-.375 2.5c0-.125 0 0-.125 0zm9.125-4h.625l-1.375 6-2.625 8h-5.375l-4-6.75 1.375-4c1.375 1.75 2.25 2.875 2.625 3.375.625.625 3.375.625 4.75-.625.875-.875 2.125-2.875 4-6z" fill="#DC7F3C"/><path d="M20 36.25h6.625V25H21.5c.75-5.625 4.5-10.25 9.375-12.5 1-4.25 2.125-7 3.375-8.5l.25-.25.125-.125C35 3.375 35.5 3.125 36 3c1.625-.25 3.125.875 3.375 2.375.125.875-.125 1.625-.625 2.25l-.125.125-.375.375c-.625.625-1.125 1.25-1.75 1.875 1.5-1.25 2.75-1.875 3.75-1.875.25 0 .5.125.875.25.75.5 1.125 1.5.625 2.25-.25.375-.5.625-.75.875 6.625 1.375 11.75 6.875 12.625 13.75l.125 1H49v10h6L57.25 53C52 56.25 45.375 57.875 37.5 57.875S23 56.25 17.75 53L20 36.25zM38.875 48c3.25-5.375 4.875-8.5 4.875-9.5 0-2.75-4-5.125-6.125-5.125-2 0-6.125 2.25-6.125 5.125 0 1 1.625 4.25 4.75 9.5.375.5.75.75 1.375.75s1-.25 1.25-.75z" fill="#BDCFC8"/><path d="M57.625 61c-4.5 6.125-11.875 10.125-20.125 10.125s-15.5-4-20-10l1-7.625c.375.125.875.25 1.25.25 1.75 0 3.25-1.375 3.5-3v1.5c0 2 1.625 3.5 3.5 3.5s3.5-1.625 3.5-3.5v-1.5 3.5c0 2 1.625 3.5 3.5 3.5s3.5-1.625 3.5-3.5v-3.5 3.5c0 2 1.625 3.5 3.5 3.5 2 0 3.5-1.625 3.5-3.5v-3.5 1.5c0 2 1.625 3.5 3.5 3.5 2 0 3.5-1.625 3.5-3.5v-1.5c.25 1.75 1.75 3 3.5 3 .5 0 .875-.125 1.25-.25l1.625 7.5z" fill="#809EB0"/><path d="M18.25 55.875l.375-2.375c.375.125.875.25 1.25.25 1.75 0 3.25-1.375 3.5-3v1.5c0 2 1.625 3.5 3.5 3.5s3.5-1.625 3.5-3.5v-1.5 3.5c0 2 1.625 3.5 3.5 3.5s3.5-1.625 3.5-3.5v-3.5 3.5c0 2 1.625 3.5 3.5 3.5 2 0 3.5-1.625 3.5-3.5v-3.5 1.5c0 2 1.625 3.5 3.5 3.5 2 0 3.5-1.625 3.5-3.5v-1.5c.25 1.75 1.75 3 3.5 3 .5 0 .875-.125 1.25-.25l.375 2.375c-.5.25-1 .375-1.625.375-1.75 0-3.25-1.375-3.5-3v1.5c0 2-1.625 3.5-3.5 3.5-2 0-3.5-1.625-3.5-3.5v-1.5 3.5c0 2-1.625 3.5-3.5 3.5-2 0-3.5-1.625-3.5-3.5v-3.5 3.5c0 2-1.625 3.5-3.5 3.5s-3.5-1.625-3.5-3.5v-3.5 1.5c0 2-1.625 3.5-3.5 3.5s-3.5-1.625-3.5-3.5v-1.5c-.25 1.75-1.75 3-3.5 3-.625 0-1.25-.25-1.625-.375z" fill="#738E9E"/><path d="M55 28c-1.25-3.625-3.75-5.875-5.875-5.625-2.75.25-3.375 4.75-2.875 10s2.125 9.5 4.875 9.125c2.625-.25 5-4.875 4.625-10-.125 1.5-.625 2.875-1.75 3-1.375.125-1.75-1.5-2-3.5-.125-2-.125-3.75 1.25-3.875.75-.125 1.375.25 1.75.875z" fill="#86A196"/><path d="M54 27.25c-.75-1.5-1.875-2.375-3-2.375-1.875.25-2.375 3.25-2 6.875s1.5 6.5 3.375 6.25c1.375-.125 2.375-1.875 2.75-4.25-.25.375-.625.625-1.125.75-1.375.125-1.75-1.5-2-3.5-.125-2-.125-3.75 1.25-3.875.25 0 .5 0 .75.125z" fill="#fff"/><path d="M19.75 28c1.25-3.625 3.75-5.875 5.875-5.625 2.75.25 3.375 4.75 2.875 10s-2.125 9.5-4.875 9.125c-2.625-.25-5-4.875-4.625-10 .125 1.5.625 2.875 1.75 3 1.375.125 1.75-1.5 2-3.5.125-2 .125-3.75-1.25-3.875-.625-.125-1.25.25-1.75.875z" fill="#86A196"/><path d="M20.75 27.25c.75-1.5 1.875-2.375 3-2.375 1.875.25 2.375 3.25 2 6.875s-1.5 6.5-3.375 6.25C21 37.875 20 36.125 19.625 33.75c.25.375.625.625 1.125.75 1.375.125 1.75-1.5 2-3.5.125-2 .125-3.75-1.25-3.875-.25 0-.5 0-.75.125z" fill="#fff"/><path d="M31.5 35.75c0-.25-.125-.625-.125-.875 0-3.125 1.5-6.625 6.125-6.625s6.125 3.5 6.125 6.625c0 .5 0 .875-.125 1.25-1-1.625-2.875-2.75-6-2.75-2.875.125-4.875 1-6 2.375z" fill="#F4F8FF"/><path d="M41 11.5c-2.25-.125-3.625-.25-4-.25l4.875-1.5c0 .75-.25 1.25-.875 1.75zm-4.5-1.375l-1.625 1.25c1.125-1.5 2-3.125 2.5-4.625.375-.875.5-2 .375-3.25 1.125.5 1.625 1.5 1.625 2.75 0 .5-.375 1.375-1 1.875-.375.375-1 1-1.875 2z" fill="#86A196"/></svg>
<svg width="75" height="75" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M28.625 10.125c-4.875 2.5-8.625 7.125-9.875 12.75A29.244 29.244 0 0 0 8.125 45.5c0 16.25 13.125 29.375 29.375 29.375S66.875 61.75 66.875 45.5c0-9.125-4.125-17.25-10.625-22.625-1.5-6.25-5.875-11.25-11.75-13.5-.25-1.5-1.25-2.75-2.625-3.375C41.75 2.875 39.25.5 36.125.5 33.75.5 31.75 1.875 30.875 4c-.875 1.5-1.625 3.625-2.25 6.125z" fill="#395360"/><path d="M45.25 32.5h-15V50h15V32.5z" fill="#FBAA6F"/><path d="M40.125 41.5 40 41.375c-.75-.625-1-1.625-.375-2.5.625-.75 1.625-1 2.5-.375-.5.125-1.125.375-1.5 1a2.444 2.444 0 0 0-.5 2zm-5.625 0c.125-.5 0-1.25-.5-1.875-.375-.625-1-.875-1.5-1 .75-.625 1.875-.375 2.5.375s.375 1.875-.375 2.5c0-.125 0 0-.125 0zm9.125-4h.625l-1.375 6-2.625 8h-5.375l-4-6.75 1.375-4c1.375 1.75 2.25 2.875 2.625 3.375.625.625 3.375.625 4.75-.625.875-.875 2.125-2.875 4-6z" fill="#DC7F3C"/><path d="M20 36.25h6.625V25H21.5c.75-5.625 4.5-10.25 9.375-12.5 1-4.25 2.125-7 3.375-8.5l.25-.25.125-.125C35 3.375 35.5 3.125 36 3c1.625-.25 3.125.875 3.375 2.375.125.875-.125 1.625-.625 2.25l-.125.125-.375.375c-.625.625-1.125 1.25-1.75 1.875 1.5-1.25 2.75-1.875 3.75-1.875.25 0 .5.125.875.25.75.5 1.125 1.5.625 2.25-.25.375-.5.625-.75.875 6.625 1.375 11.75 6.875 12.625 13.75l.125 1H49v10h6L57.25 53C52 56.25 45.375 57.875 37.5 57.875S23 56.25 17.75 53L20 36.25zM38.875 48c3.25-5.375 4.875-8.5 4.875-9.5 0-2.75-4-5.125-6.125-5.125-2 0-6.125 2.25-6.125 5.125 0 1 1.625 4.25 4.75 9.5.375.5.75.75 1.375.75s1-.25 1.25-.75z" fill="#BDCFC8"/><path d="M57.625 61c-4.5 6.125-11.875 10.125-20.125 10.125s-15.5-4-20-10l1-7.625c.375.125.875.25 1.25.25 1.75 0 3.25-1.375 3.5-3v1.5c0 2 1.625 3.5 3.5 3.5s3.5-1.625 3.5-3.5v-1.5 3.5c0 2 1.625 3.5 3.5 3.5s3.5-1.625 3.5-3.5v-3.5 3.5c0 2 1.625 3.5 3.5 3.5 2 0 3.5-1.625 3.5-3.5v-3.5 1.5c0 2 1.625 3.5 3.5 3.5 2 0 3.5-1.625 3.5-3.5v-1.5c.25 1.75 1.75 3 3.5 3 .5 0 .875-.125 1.25-.25l1.625 7.5z" fill="#809EB0"/><path d="m18.25 55.875.375-2.375c.375.125.875.25 1.25.25 1.75 0 3.25-1.375 3.5-3v1.5c0 2 1.625 3.5 3.5 3.5s3.5-1.625 3.5-3.5v-1.5 3.5c0 2 1.625 3.5 3.5 3.5s3.5-1.625 3.5-3.5v-3.5 3.5c0 2 1.625 3.5 3.5 3.5 2 0 3.5-1.625 3.5-3.5v-3.5 1.5c0 2 1.625 3.5 3.5 3.5 2 0 3.5-1.625 3.5-3.5v-1.5c.25 1.75 1.75 3 3.5 3 .5 0 .875-.125 1.25-.25l.375 2.375c-.5.25-1 .375-1.625.375-1.75 0-3.25-1.375-3.5-3v1.5c0 2-1.625 3.5-3.5 3.5-2 0-3.5-1.625-3.5-3.5v-1.5 3.5c0 2-1.625 3.5-3.5 3.5-2 0-3.5-1.625-3.5-3.5v-3.5 3.5c0 2-1.625 3.5-3.5 3.5s-3.5-1.625-3.5-3.5v-3.5 1.5c0 2-1.625 3.5-3.5 3.5s-3.5-1.625-3.5-3.5v-1.5c-.25 1.75-1.75 3-3.5 3-.625 0-1.25-.25-1.625-.375z" fill="#738E9E"/><path d="M55 28c-1.25-3.625-3.75-5.875-5.875-5.625-2.75.25-3.375 4.75-2.875 10s2.125 9.5 4.875 9.125c2.625-.25 5-4.875 4.625-10-.125 1.5-.625 2.875-1.75 3-1.375.125-1.75-1.5-2-3.5-.125-2-.125-3.75 1.25-3.875.75-.125 1.375.25 1.75.875z" fill="#86A196"/><path d="M54 27.25c-.75-1.5-1.875-2.375-3-2.375-1.875.25-2.375 3.25-2 6.875s1.5 6.5 3.375 6.25c1.375-.125 2.375-1.875 2.75-4.25-.25.375-.625.625-1.125.75-1.375.125-1.75-1.5-2-3.5-.125-2-.125-3.75 1.25-3.875.25 0 .5 0 .75.125z" fill="#fff"/><path d="M19.75 28c1.25-3.625 3.75-5.875 5.875-5.625 2.75.25 3.375 4.75 2.875 10s-2.125 9.5-4.875 9.125c-2.625-.25-5-4.875-4.625-10 .125 1.5.625 2.875 1.75 3 1.375.125 1.75-1.5 2-3.5.125-2 .125-3.75-1.25-3.875-.625-.125-1.25.25-1.75.875z" fill="#86A196"/><path d="M20.75 27.25c.75-1.5 1.875-2.375 3-2.375 1.875.25 2.375 3.25 2 6.875s-1.5 6.5-3.375 6.25C21 37.875 20 36.125 19.625 33.75c.25.375.625.625 1.125.75 1.375.125 1.75-1.5 2-3.5.125-2 .125-3.75-1.25-3.875-.25 0-.5 0-.75.125z" fill="#fff"/><path d="M31.5 35.75c0-.25-.125-.625-.125-.875 0-3.125 1.5-6.625 6.125-6.625s6.125 3.5 6.125 6.625c0 .5 0 .875-.125 1.25-1-1.625-2.875-2.75-6-2.75-2.875.125-4.875 1-6 2.375z" fill="#F4F8FF"/><path d="M41 11.5c-2.25-.125-3.625-.25-4-.25l4.875-1.5c0 .75-.25 1.25-.875 1.75zm-4.5-1.375-1.625 1.25c1.125-1.5 2-3.125 2.5-4.625.375-.875.5-2 .375-3.25 1.125.5 1.625 1.5 1.625 2.75 0 .5-.375 1.375-1 1.875-.375.375-1 1-1.875 2z" fill="#86A196"/></svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -1 +1 @@
<svg width="40" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M31.5 0h-23a8.5 8.5 0 000 17h23a8.5 8.5 0 000-17z" fill="#999"/><path d="M7.51 5.36v7H9.3V10.4h1.26c1.8 0 2.82-.95 2.82-2.59 0-1.56-1.03-2.44-2.82-2.44H7.51zm1.79 1.4h1.17c.79 0 1.23.37 1.23 1.1 0 .74-.44 1.13-1.22 1.13H9.29V6.76zm9.23 5.6h2.02l-1.47-2.3c.82-.42 1.27-1.19 1.27-2.26 0-1.56-1.06-2.44-2.9-2.44H14.3v7h1.78V10.4h1.42l1.04 1.97zM16.1 9V6.76h1.35c.77 0 1.22.37 1.22 1.1 0 .74-.45 1.13-1.22 1.13H16.1zm8.78-3.69c-2.16 0-3.78 1.51-3.78 3.55 0 2.05 1.62 3.6 3.78 3.6 2.17 0 3.79-1.56 3.79-3.6 0-2.03-1.62-3.55-3.8-3.55zm.02 1.5c1.08 0 1.94.88 1.94 2.06 0 1.18-.86 2.1-1.94 2.1a2.04 2.04 0 01-1.98-2.1c0-1.18.9-2.07 1.98-2.07zm8.78 2.84v-1.1H32V6.87h-1.1v1.68h-1.66v1.1h1.67v1.67H32V9.64h1.68z" fill="#fff"/></svg>
<svg width="40" height="17" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M31.5 0h-23a8.5 8.5 0 0 0 0 17h23a8.5 8.5 0 0 0 0-17z" fill="#999"/><path d="M7.51 5.36v7H9.3V10.4h1.26c1.8 0 2.82-.95 2.82-2.59 0-1.56-1.03-2.44-2.82-2.44H7.51zm1.79 1.4h1.17c.79 0 1.23.37 1.23 1.1 0 .74-.44 1.13-1.22 1.13H9.29V6.76zm9.23 5.6h2.02l-1.47-2.3c.82-.42 1.27-1.19 1.27-2.26 0-1.56-1.06-2.44-2.9-2.44H14.3v7h1.78V10.4h1.42l1.04 1.97zM16.1 9V6.76h1.35c.77 0 1.22.37 1.22 1.1 0 .74-.45 1.13-1.22 1.13H16.1zm8.78-3.69c-2.16 0-3.78 1.51-3.78 3.55 0 2.05 1.62 3.6 3.78 3.6 2.17 0 3.79-1.56 3.79-3.6 0-2.03-1.62-3.55-3.8-3.55zm.02 1.5c1.08 0 1.94.88 1.94 2.06 0 1.18-.86 2.1-1.94 2.1a2.04 2.04 0 0 1-1.98-2.1c0-1.18.9-2.07 1.98-2.07zm8.78 2.84v-1.1H32V6.87h-1.1v1.68h-1.66v1.1h1.67v1.67H32V9.64h1.68z" fill="#fff"/></svg>

Before

Width:  |  Height:  |  Size: 806 B

After

Width:  |  Height:  |  Size: 811 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 180"><path d="M84.4 65.4c0 3.7.4 6.7 1.1 8.9.8 2.2 1.8 4.6 3.2 7.2.5.8.7 1.6.7 2.3 0 1-.6 2-1.9 3L81.2 91c-.9.6-1.8.9-2.6.9-1 0-2-.5-3-1.4a31 31 0 01-3.6-4.7l-3.1-5.9a37 37 0 01-29.4 13.8c-8.4 0-15.1-2.4-20-7.2a25.7 25.7 0 01-7.4-19.2c0-8.5 3-15.4 9.1-20.6s14.2-7.8 24.5-7.8c3.4 0 6.9.3 10.6.8s7.5 1.3 11.5 2.2v-7.3c0-7.6-1.6-12.9-4.7-16-3.2-3.1-8.6-4.6-16.3-4.6-3.5 0-7.1.4-10.8 1.3A79.7 79.7 0 0021.7 20l-1.6.3c-1.4 0-2.1-1-2.1-3.1v-4.9c0-1.6.2-2.8.7-3.5s1.4-1.4 2.8-2.1A60.6 60.6 0 0149.7.3C61.6.3 70.3 3 75.9 8.4c5.5 5.4 8.3 13.6 8.3 24.6v32.4h.2zM43.8 80.6c3.3 0 6.7-.6 10.3-1.8 3.6-1.2 6.8-3.4 9.5-6.4 1.6-1.9 2.8-4 3.4-6.4.6-2.4 1-5.3 1-8.7v-4.2a83.5 83.5 0 00-18.6-2.3c-6.7 0-11.6 1.3-14.9 4-3.3 2.7-4.9 6.5-4.9 11.5 0 4.7 1.2 8.2 3.7 10.6 2.4 2.5 5.9 3.7 10.5 3.7zm80.3 10.8c-1.8 0-3-.3-3.8-1-.8-.6-1.5-2-2.1-3.9L94.7 9.2c-.6-2-.9-3.3-.9-4 0-1.6.8-2.5 2.4-2.5h9.8c1.9 0 3.2.3 3.9 1 .8.6 1.4 2 2 3.9l16.8 66.2 15.6-66.2c.5-2 1.1-3.3 1.9-3.9.8-.6 2.2-1 4-1h8c1.9 0 3.2.3 4 1 .8.6 1.5 2 1.9 3.9l15.8 67 17.3-67c.6-2 1.3-3.3 2-3.9.8-.6 2.1-1 3.9-1h9.3c1.6 0 2.5.8 2.5 2.5l-.2 1.6-.7 2.5-24.1 77.3c-.6 2-1.3 3.3-2.1 3.9s-2.1 1-3.8 1h-8.6c-1.9 0-3.2-.3-4-1-.8-.7-1.5-2-1.9-4L154 22l-15.4 64.4c-.5 2-1.1 3.3-1.9 4-.8.7-2.2 1-4 1h-8.6zm128.5 2.7a66.2 66.2 0 01-26.9-5.8c-1.6-.9-2.7-1.9-3.1-2.8a7 7 0 01-.6-2.8v-5.1c0-2.1.8-3.1 2.3-3.1l1.8.3 2.5 1a54.4 54.4 0 0022.9 4.7 27 27 0 0014.6-3.3c3.4-2.2 5.2-5.4 5.2-9.5 0-2.8-.9-5.1-2.7-7a25 25 0 00-10.1-5.2L244 51a30.5 30.5 0 01-16-10.2A23.8 23.8 0 01232.9 7c3-2.3 6.4-4 10.4-5.2A43.6 43.6 0 01262.6.5l6.5 1.1 5.7 1.6c1.8.6 3.2 1.2 4.2 1.8 1.4.8 2.4 1.6 3 2.5.6.8.9 1.9.9 3.3v4.7c0 2.1-.8 3.2-2.3 3.2-.8 0-2.1-.4-3.8-1.2a45.7 45.7 0 00-19.2-3.9c-5.7 0-10.2.9-13.3 2.8-3.1 1.9-4.7 4.8-4.7 8.9 0 2.8 1 5.2 3 7.1 2 1.9 5.7 3.8 11 5.5l14.2 4.5c7.2 2.3 12.4 5.5 15.5 9.6s4.6 8.8 4.6 14c0 4.3-.9 8.2-2.6 11.6a26.9 26.9 0 01-7.3 8.8 32.2 32.2 0 01-11.1 5.6 47.6 47.6 0 01-14.3 2.1z" fill="#262f3e"/><path d="M271.5 142.7c-32.9 24.3-80.7 37.2-121.8 37.2A220.3 220.3 0 011 123.2c-3.1-2.8-.3-6.6 3.4-4.4a299.9 299.9 0 00148.8 39.5 297 297 0 00113.5-23.2c5.5-2.5 10.2 3.6 4.8 7.6zm13.7-15.6c-4.2-5.4-27.8-2.6-38.5-1.3-3.2.4-3.7-2.4-.8-4.5 18.8-13.2 49.7-9.4 53.3-5 3.6 4.5-1 35.4-18.6 50.2-2.7 2.3-5.3 1.1-4.1-1.9 4-9.9 12.9-32.2 8.7-37.5z" fill="#f59931"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 180"><path d="M84.4 65.4c0 3.7.4 6.7 1.1 8.9.8 2.2 1.8 4.6 3.2 7.2.5.8.7 1.6.7 2.3 0 1-.6 2-1.9 3L81.2 91c-.9.6-1.8.9-2.6.9-1 0-2-.5-3-1.4a31 31 0 0 1-3.6-4.7l-3.1-5.9a37 37 0 0 1-29.4 13.8c-8.4 0-15.1-2.4-20-7.2a25.7 25.7 0 0 1-7.4-19.2c0-8.5 3-15.4 9.1-20.6s14.2-7.8 24.5-7.8c3.4 0 6.9.3 10.6.8s7.5 1.3 11.5 2.2v-7.3c0-7.6-1.6-12.9-4.7-16-3.2-3.1-8.6-4.6-16.3-4.6-3.5 0-7.1.4-10.8 1.3A79.7 79.7 0 0 0 21.7 20l-1.6.3c-1.4 0-2.1-1-2.1-3.1v-4.9c0-1.6.2-2.8.7-3.5s1.4-1.4 2.8-2.1A60.6 60.6 0 0 1 49.7.3C61.6.3 70.3 3 75.9 8.4c5.5 5.4 8.3 13.6 8.3 24.6v32.4h.2zM43.8 80.6c3.3 0 6.7-.6 10.3-1.8 3.6-1.2 6.8-3.4 9.5-6.4 1.6-1.9 2.8-4 3.4-6.4.6-2.4 1-5.3 1-8.7v-4.2a83.5 83.5 0 0 0-18.6-2.3c-6.7 0-11.6 1.3-14.9 4-3.3 2.7-4.9 6.5-4.9 11.5 0 4.7 1.2 8.2 3.7 10.6 2.4 2.5 5.9 3.7 10.5 3.7zm80.3 10.8c-1.8 0-3-.3-3.8-1-.8-.6-1.5-2-2.1-3.9L94.7 9.2c-.6-2-.9-3.3-.9-4 0-1.6.8-2.5 2.4-2.5h9.8c1.9 0 3.2.3 3.9 1 .8.6 1.4 2 2 3.9l16.8 66.2 15.6-66.2c.5-2 1.1-3.3 1.9-3.9.8-.6 2.2-1 4-1h8c1.9 0 3.2.3 4 1 .8.6 1.5 2 1.9 3.9l15.8 67 17.3-67c.6-2 1.3-3.3 2-3.9.8-.6 2.1-1 3.9-1h9.3c1.6 0 2.5.8 2.5 2.5l-.2 1.6-.7 2.5-24.1 77.3c-.6 2-1.3 3.3-2.1 3.9s-2.1 1-3.8 1h-8.6c-1.9 0-3.2-.3-4-1-.8-.7-1.5-2-1.9-4L154 22l-15.4 64.4c-.5 2-1.1 3.3-1.9 4-.8.7-2.2 1-4 1h-8.6zm128.5 2.7a66.2 66.2 0 0 1-26.9-5.8c-1.6-.9-2.7-1.9-3.1-2.8a7 7 0 0 1-.6-2.8v-5.1c0-2.1.8-3.1 2.3-3.1l1.8.3 2.5 1a54.4 54.4 0 0 0 22.9 4.7 27 27 0 0 0 14.6-3.3c3.4-2.2 5.2-5.4 5.2-9.5 0-2.8-.9-5.1-2.7-7a25 25 0 0 0-10.1-5.2L244 51a30.5 30.5 0 0 1-16-10.2A23.8 23.8 0 0 1 232.9 7c3-2.3 6.4-4 10.4-5.2A43.6 43.6 0 0 1 262.6.5l6.5 1.1 5.7 1.6c1.8.6 3.2 1.2 4.2 1.8 1.4.8 2.4 1.6 3 2.5.6.8.9 1.9.9 3.3v4.7c0 2.1-.8 3.2-2.3 3.2-.8 0-2.1-.4-3.8-1.2a45.7 45.7 0 0 0-19.2-3.9c-5.7 0-10.2.9-13.3 2.8-3.1 1.9-4.7 4.8-4.7 8.9 0 2.8 1 5.2 3 7.1 2 1.9 5.7 3.8 11 5.5l14.2 4.5c7.2 2.3 12.4 5.5 15.5 9.6s4.6 8.8 4.6 14c0 4.3-.9 8.2-2.6 11.6a26.9 26.9 0 0 1-7.3 8.8 32.2 32.2 0 0 1-11.1 5.6 47.6 47.6 0 0 1-14.3 2.1z" fill="#262f3e"/><path d="M271.5 142.7c-32.9 24.3-80.7 37.2-121.8 37.2A220.3 220.3 0 0 1 1 123.2c-3.1-2.8-.3-6.6 3.4-4.4a299.9 299.9 0 0 0 148.8 39.5 297 297 0 0 0 113.5-23.2c5.5-2.5 10.2 3.6 4.8 7.6zm13.7-15.6c-4.2-5.4-27.8-2.6-38.5-1.3-3.2.4-3.7-2.4-.8-4.5 18.8-13.2 49.7-9.4 53.3-5 3.6 4.5-1 35.4-18.6 50.2-2.7 2.3-5.3 1.1-4.1-1.9 4-9.9 12.9-32.2 8.7-37.5z" fill="#f59931"/></svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -1,3 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" clip-rule="evenodd" viewBox="0 0 1000 500">
<path fill="#0b996e" fill-rule="nonzero" d="M820.28 284.838c0-44.583 28.324-75.938 68.612-75.938s69.064 31.337 69.064 75.938S929.187 359 888.892 359c-40.294 0-68.612-30.912-68.612-74.162Zm-42.056 0c0 65.782 46.038 112.141 110.662 112.141 64.624 0 111.114-46.359 111.114-112.141 0-65.782-46.038-113.898-111.114-113.898-65.076 0-110.662 47.246-110.662 113.898ZM563.521 173.585l86.771 220.736h40.733l86.766-220.736h-43.825l-62.862 170.413h-.89l-62.862-170.413h-43.831ZM394.856 276.883c2.652-40.623 29.659-67.983 66.405-67.983 31.867 0 55.776 20.312 59.319 50.779h-73.491c-26.116 0-40.288 3.09-50.898 17.223h-1.335v-.019Zm-42.051 6.623c0 65.782 46.484 113.454 110.663 113.454 43.386 0 81.448-22.069 97.827-56.958l-35.41-17.667c-12.391 22.957-36.3 36.647-62.417 36.647-31.44 0-59.764-23.845-59.764-46.803 0-11.913 7.969-17.222 19.476-17.222h140.322v-11.913c0-66.227-42.495-112.141-103.577-112.141-61.081 0-107.126 47.246-107.126 112.585m-120.4 110.808h39.843V258.785c0-29.136 18.14-49.891 43.385-49.891 10.629 0 21.684 3.533 27.008 8.38 3.988-10.6 10.183-21.182 19.476-31.782-10.629-8.824-28.769-14.577-46.484-14.577-48.69 0-83.228 36.203-83.228 87.852v135.542-.013ZM39.843 248.198V140.46h65.515c22.128 0 36.745 12.801 36.745 32.225 0 22.069-19.031 38.848-57.984 51.649-26.562 8.38-38.507 15.447-42.94 23.845l-1.336.013v.006Zm0 108.163v-45.026c0-19.868 16.824-39.292 40.288-46.803 20.812-7.066 38.062-14.133 52.679-21.625 19.476 11.488 31.422 31.337 31.422 52.093 0 35.314-33.648 61.361-79.241 61.361H39.843ZM0 394.321h88.534c67.295 0 117.748-41.937 117.748-97.564 0-30.467-15.488-57.827-42.941-75.494 14.172-14.133 20.812-30.467 20.812-50.335 0-41.05-29.66-68.428-74.362-68.428H0v291.821Z"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" clip-rule="evenodd" viewBox="0 0 1000 500"><path fill="#0b996e" fill-rule="nonzero" d="M820.28 284.838c0-44.583 28.324-75.938 68.612-75.938s69.064 31.337 69.064 75.938S929.187 359 888.892 359c-40.294 0-68.612-30.912-68.612-74.162Zm-42.056 0c0 65.782 46.038 112.141 110.662 112.141 64.624 0 111.114-46.359 111.114-112.141 0-65.782-46.038-113.898-111.114-113.898-65.076 0-110.662 47.246-110.662 113.898ZM563.521 173.585l86.771 220.736h40.733l86.766-220.736h-43.825l-62.862 170.413h-.89l-62.862-170.413h-43.831ZM394.856 276.883c2.652-40.623 29.659-67.983 66.405-67.983 31.867 0 55.776 20.312 59.319 50.779h-73.491c-26.116 0-40.288 3.09-50.898 17.223h-1.335v-.019Zm-42.051 6.623c0 65.782 46.484 113.454 110.663 113.454 43.386 0 81.448-22.069 97.827-56.958l-35.41-17.667c-12.391 22.957-36.3 36.647-62.417 36.647-31.44 0-59.764-23.845-59.764-46.803 0-11.913 7.969-17.222 19.476-17.222h140.322v-11.913c0-66.227-42.495-112.141-103.577-112.141-61.081 0-107.126 47.246-107.126 112.585m-120.4 110.808h39.843V258.785c0-29.136 18.14-49.891 43.385-49.891 10.629 0 21.684 3.533 27.008 8.38 3.988-10.6 10.183-21.182 19.476-31.782-10.629-8.824-28.769-14.577-46.484-14.577-48.69 0-83.228 36.203-83.228 87.852v135.542-.013ZM39.843 248.198V140.46h65.515c22.128 0 36.745 12.801 36.745 32.225 0 22.069-19.031 38.848-57.984 51.649-26.562 8.38-38.507 15.447-42.94 23.845l-1.336.013v.006Zm0 108.163v-45.026c0-19.868 16.824-39.292 40.288-46.803 20.812-7.066 38.062-14.133 52.679-21.625 19.476 11.488 31.422 31.337 31.422 52.093 0 35.314-33.648 61.361-79.241 61.361H39.843ZM0 394.321h88.534c67.295 0 117.748-41.937 117.748-97.564 0-30.467-15.488-57.827-42.941-75.494 14.172-14.133 20.812-30.467 20.812-50.335 0-41.05-29.66-68.428-74.362-68.428H0v291.821Z"/></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -1 +1 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 254.8 80.3" xml:space="preserve"><style>.st0{fill:#4285f4}.st1{fill:#ea4335}</style><g id="XMLID_11_"><path id="XMLID_10_" class="st0" d="M31.9 28.6v8.6h20.5c-.6 4.8-2.2 8.3-4.7 10.8A21 21 0 0132 54.3C19.2 54.3 9.3 44 9.3 31.5a22.6 22.6 0 0138-16.7l6-6C48.4 3.7 41.5 0 32 0 14.6 0 0 14.1 0 31.4s14.6 31.4 31.9 31.4c9.3 0 16.4-3 21.9-8.8a28.4 28.4 0 007.4-20c0-2-.1-3.9-.4-5.4h-29z"/><path id="XMLID_24_" class="st1" d="M86.9 21.6A20 20 0 0066.5 42c0 11.7 9.2 20.3 20.4 20.3s20.3-8.6 20.3-20.3A20 20 0 0087 21.6zm0 32.6c-6.2 0-11.5-5-11.5-12.3 0-7.3 5.3-12.3 11.5-12.3s11.4 5 11.4 12.3C98.3 49 93 54.2 87 54.2z"/><path id="XMLID_21_" class="st0" d="M186.7 26.1h-.4a14 14 0 00-10.6-4.5c-10.2 0-19 8.8-19 20.3 0 11.4 8.8 20.3 19 20.3 4.8 0 8.7-2.2 10.6-4.6h.3v2.8c0 7.7-4.1 11.9-10.8 11.9-5.4 0-8.8-4-10.2-7.2l-7.7 3.2c2.2 5.3 8 12 18 12C186.2 80.2 195 74 195 59V22.6h-8.4v3.5zm-10.3 28c-6.1 0-10.8-5.2-10.8-12.2 0-7.2 4.7-12.3 10.8-12.3 6 0 10.8 5.2 10.8 12.4 0 7-4.7 12.2-10.8 12.2z"/><path id="XMLID_18_" d="M132.3 21.6A20 20 0 00111.9 42c0 11.7 9.2 20.3 20.4 20.3s20.3-8.6 20.3-20.3a20 20 0 00-20.3-20.3zm0 32.6c-6.2 0-11.5-5-11.5-12.3 0-7.3 5.3-12.3 11.5-12.3s11.4 5 11.4 12.3c0 7.2-5.3 12.3-11.4 12.3z" fill="#fbbc05"/><path id="XMLID_3_" d="M202 .8h8.8v61.4h-8.7V.8z" fill="#34a853"/><path id="XMLID_14_" class="st1" d="M237.9 54.2c-4.6 0-7.8-2-9.9-6.2l27.2-11.2-1-2.3c-1.6-4.5-6.8-12.9-17.3-12.9-10.4 0-19.1 8.2-19.1 20.3 0 11.4 8.6 20.3 20 20.3 9.4 0 14.7-5.7 17-9l-7-4.6a11.6 11.6 0 01-10 5.6zm-.6-25c3.6 0 6.6 1.9 7.6 4.5l-18.3 7.6c0-8.6 6-12 10.7-12z"/></g></svg>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 254.8 80.3" xml:space="preserve"><style>.st0{fill:#4285f4}.st1{fill:#ea4335}</style><g id="XMLID_11_"><path id="XMLID_10_" class="st0" d="M31.9 28.6v8.6h20.5c-.6 4.8-2.2 8.3-4.7 10.8A21 21 0 0 1 32 54.3C19.2 54.3 9.3 44 9.3 31.5a22.6 22.6 0 0 1 38-16.7l6-6C48.4 3.7 41.5 0 32 0 14.6 0 0 14.1 0 31.4s14.6 31.4 31.9 31.4c9.3 0 16.4-3 21.9-8.8a28.4 28.4 0 0 0 7.4-20c0-2-.1-3.9-.4-5.4h-29z"/><path id="XMLID_24_" class="st1" d="M86.9 21.6A20 20 0 0 0 66.5 42c0 11.7 9.2 20.3 20.4 20.3s20.3-8.6 20.3-20.3A20 20 0 0 0 87 21.6zm0 32.6c-6.2 0-11.5-5-11.5-12.3 0-7.3 5.3-12.3 11.5-12.3s11.4 5 11.4 12.3C98.3 49 93 54.2 87 54.2z"/><path id="XMLID_21_" class="st0" d="M186.7 26.1h-.4a14 14 0 0 0-10.6-4.5c-10.2 0-19 8.8-19 20.3 0 11.4 8.8 20.3 19 20.3 4.8 0 8.7-2.2 10.6-4.6h.3v2.8c0 7.7-4.1 11.9-10.8 11.9-5.4 0-8.8-4-10.2-7.2l-7.7 3.2c2.2 5.3 8 12 18 12C186.2 80.2 195 74 195 59V22.6h-8.4v3.5zm-10.3 28c-6.1 0-10.8-5.2-10.8-12.2 0-7.2 4.7-12.3 10.8-12.3 6 0 10.8 5.2 10.8 12.4 0 7-4.7 12.2-10.8 12.2z"/><path id="XMLID_18_" d="M132.3 21.6A20 20 0 0 0 111.9 42c0 11.7 9.2 20.3 20.4 20.3s20.3-8.6 20.3-20.3a20 20 0 0 0-20.3-20.3zm0 32.6c-6.2 0-11.5-5-11.5-12.3 0-7.3 5.3-12.3 11.5-12.3s11.4 5 11.4 12.3c0 7.2-5.3 12.3-11.4 12.3z" fill="#fbbc05"/><path id="XMLID_3_" d="M202 .8h8.8v61.4h-8.7V.8z" fill="#34a853"/><path id="XMLID_14_" class="st1" d="M237.9 54.2c-4.6 0-7.8-2-9.9-6.2l27.2-11.2-1-2.3c-1.6-4.5-6.8-12.9-17.3-12.9-10.4 0-19.1 8.2-19.1 20.3 0 11.4 8.6 20.3 20 20.3 9.4 0 14.7-5.7 17-9l-7-4.6a11.6 11.6 0 0 1-10 5.6zm-.6-25c3.6 0 6.6 1.9 7.6 4.5l-18.3 7.6c0-8.6 6-12 10.7-12z"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -1 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 169.64 70"><defs><style>.cls-1{fill:#0364b8}.cls-3{fill:#28a8ea}.cls-4{fill:#0078d4;fill-rule:evenodd}.cls-10{fill-opacity:.1}</style></defs><path class="cls-1" d="M161.13 0h-43a3.52 3.52 0 00-3.51 3.51v4L138.86 15l25.78-7.5v-4a3.53 3.53 0 00-3.51-3.5z"/><path d="M168.76 38.51a28.15 28.15 0 00.88-3.51 1.67 1.67 0 00-.83-1.44L141.67 18.1a3.35 3.35 0 00-.36-.21 3.77 3.77 0 00-3.34 0 3.35 3.35 0 00-.36.21l-27.09 15.44a1.67 1.67 0 00-.83 1.44 28.15 28.15 0 00.88 3.51l28.73 21z" fill="#0a2767"/><path class="cls-3" d="M149.64 7.5h-17.5l-5 7.5 5 7.5 17.5 15h15v-15z"/><path class="cls-4" d="M114.64 7.5h17.5v15h-17.5z"/><path d="M149.64 7.5h15v15h-15z" fill="#50d9ff" fill-rule="evenodd"/><path class="cls-1" d="M149.64 37.5l-17.5-15h-17.5v15l17.5 15 27.08 4.42z"/><path class="cls-4" d="M132.14 22.5h17.5v15h-17.5z"/><path d="M114.64 37.5h17.5v15h-17.5z" fill="#064a8c" fill-rule="evenodd"/><path class="cls-4" d="M149.64 37.5h15v15h-15z"/><path d="M140.12 58l-29.49-21.5 1.24-2.17 27.27 15.57a1.28 1.28 0 001.05 0l27.33-15.6 1.24 2.17z" fill-opacity=".5" fill="#0a2767"/><path d="M168.81 36.44L141.67 51.9a3.74 3.74 0 01-3.65.23l9.44 12.65 20.63 4.49a3.75 3.75 0 001.55-3V35a1.65 1.65 0 01-.83 1.44z" fill="#1490df"/><path d="M169.64 66.25v-1.84l-25-14.23-3 1.72a3.77 3.77 0 01-3.65.23l9.44 12.65 20.63 4.49a3.74 3.74 0 001.55-3z" fill-opacity=".05"/><path class="cls-10" d="M169.51 67.21l-27.35-15.59-.49.28a3.77 3.77 0 01-3.65.23l9.44 12.65 20.63 4.49a3.76 3.76 0 001.43-2.08z"/><path class="cls-3" d="M110.51 36.48l-.08-.05a1.63 1.63 0 01-.77-1.4v31.23a3.76 3.76 0 003.72 3.74h52.51a3.58 3.58 0 00.92-.13 1.39 1.39 0 00.45-.14.34.34 0 00.15-.06 2.52 2.52 0 00.58-.32l.1-.08z"/><path class="cls-10" d="M134.64 56.67V15.84a3.37 3.37 0 00-3.33-3.34h-16.59v18.64l-4.21 2.4a1.68 1.68 0 00-.83 1.44V60h21.67a3.37 3.37 0 003.29-3.33z"/><path d="M132.14 59.17V18.33a3.37 3.37 0 00-3.33-3.33h-14.09v16.14l-4.21 2.4a1.68 1.68 0 00-.83 1.44v27.53h19.17a3.37 3.37 0 003.29-3.34zm0-5V18.33a3.37 3.37 0 00-3.33-3.33h-14.09v16.14l-4.21 2.4a1.68 1.68 0 00-.83 1.44v22.53h19.17a3.37 3.37 0 003.29-3.34zm-2.5 0V18.33a3.37 3.37 0 00-3.33-3.33h-11.59v16.14l-4.21 2.4a1.68 1.68 0 00-.83 1.44v22.53h16.67a3.37 3.37 0 003.29-3.34z" fill-opacity=".2"/><path d="M93 15h33.3a3.35 3.35 0 013.34 3.33v33.34A3.36 3.36 0 01126.3 55H93a3.35 3.35 0 01-3.33-3.33V18.33A3.34 3.34 0 0193 15z" fill="#0078d4"/><path d="M99.31 28.67a10.41 10.41 0 014.1-4.54 12.42 12.42 0 016.53-1.63 11.5 11.5 0 016 1.55 10.44 10.44 0 014 4.33 14.07 14.07 0 011.4 6.37 14.78 14.78 0 01-1.45 6.67 10.55 10.55 0 01-4.11 4.49 12 12 0 01-6.26 1.59 11.8 11.8 0 01-6.17-1.57 10.53 10.53 0 01-4-4.34 13.7 13.7 0 01-1.41-6.3 15.15 15.15 0 011.39-6.62zm4.37 10.64a6.74 6.74 0 002.31 3 6 6 0 003.61 1.09 6.1 6.1 0 006.09-4.12 11.36 11.36 0 00.72-4.16 12.54 12.54 0 00-.67-4.21 6.68 6.68 0 00-2.17-3.11 6 6 0 00-3.82-1.18 6.25 6.25 0 00-3.69 1.1 6.92 6.92 0 00-2.36 3 12 12 0 000 8.59z" fill="#fff"/><path d="M0 0h33.26v33.26H0z" fill="#f25022"/><path d="M36.74 0H70v33.26H36.74z" fill="#7fba00"/><path d="M0 36.74h33.26V70H0z" fill="#00a4ef"/><path d="M36.74 36.74H70V70H36.74z" fill="#ffb900"/></svg>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 169.64 70"><defs><style>.cls-1{fill:#0364b8}.cls-3{fill:#28a8ea}.cls-4{fill:#0078d4;fill-rule:evenodd}.cls-10{fill-opacity:.1}</style></defs><path class="cls-1" d="M161.13 0h-43a3.52 3.52 0 0 0-3.51 3.51v4L138.86 15l25.78-7.5v-4a3.53 3.53 0 0 0-3.51-3.5z"/><path d="M168.76 38.51a28.15 28.15 0 0 0 .88-3.51 1.67 1.67 0 0 0-.83-1.44L141.67 18.1a3.35 3.35 0 0 0-.36-.21 3.77 3.77 0 0 0-3.34 0 3.35 3.35 0 0 0-.36.21l-27.09 15.44a1.67 1.67 0 0 0-.83 1.44 28.15 28.15 0 0 0 .88 3.51l28.73 21z" fill="#0a2767"/><path class="cls-3" d="M149.64 7.5h-17.5l-5 7.5 5 7.5 17.5 15h15v-15z"/><path class="cls-4" d="M114.64 7.5h17.5v15h-17.5z"/><path d="M149.64 7.5h15v15h-15z" fill="#50d9ff" fill-rule="evenodd"/><path class="cls-1" d="m149.64 37.5-17.5-15h-17.5v15l17.5 15 27.08 4.42z"/><path class="cls-4" d="M132.14 22.5h17.5v15h-17.5z"/><path d="M114.64 37.5h17.5v15h-17.5z" fill="#064a8c" fill-rule="evenodd"/><path class="cls-4" d="M149.64 37.5h15v15h-15z"/><path d="m140.12 58-29.49-21.5 1.24-2.17 27.27 15.57a1.28 1.28 0 0 0 1.05 0l27.33-15.6 1.24 2.17z" fill-opacity=".5" fill="#0a2767"/><path d="M168.81 36.44 141.67 51.9a3.74 3.74 0 0 1-3.65.23l9.44 12.65 20.63 4.49a3.75 3.75 0 0 0 1.55-3V35a1.65 1.65 0 0 1-.83 1.44z" fill="#1490df"/><path d="M169.64 66.25v-1.84l-25-14.23-3 1.72a3.77 3.77 0 0 1-3.65.23l9.44 12.65 20.63 4.49a3.74 3.74 0 0 0 1.55-3z" fill-opacity=".05"/><path class="cls-10" d="m169.51 67.21-27.35-15.59-.49.28a3.77 3.77 0 0 1-3.65.23l9.44 12.65 20.63 4.49a3.76 3.76 0 0 0 1.43-2.08z"/><path class="cls-3" d="m110.51 36.48-.08-.05a1.63 1.63 0 0 1-.77-1.4v31.23a3.76 3.76 0 0 0 3.72 3.74h52.51a3.58 3.58 0 0 0 .92-.13 1.39 1.39 0 0 0 .45-.14.34.34 0 0 0 .15-.06 2.52 2.52 0 0 0 .58-.32l.1-.08z"/><path class="cls-10" d="M134.64 56.67V15.84a3.37 3.37 0 0 0-3.33-3.34h-16.59v18.64l-4.21 2.4a1.68 1.68 0 0 0-.83 1.44V60h21.67a3.37 3.37 0 0 0 3.29-3.33z"/><path d="M132.14 59.17V18.33a3.37 3.37 0 0 0-3.33-3.33h-14.09v16.14l-4.21 2.4a1.68 1.68 0 0 0-.83 1.44v27.53h19.17a3.37 3.37 0 0 0 3.29-3.34zm0-5V18.33a3.37 3.37 0 0 0-3.33-3.33h-14.09v16.14l-4.21 2.4a1.68 1.68 0 0 0-.83 1.44v22.53h19.17a3.37 3.37 0 0 0 3.29-3.34zm-2.5 0V18.33a3.37 3.37 0 0 0-3.33-3.33h-11.59v16.14l-4.21 2.4a1.68 1.68 0 0 0-.83 1.44v22.53h16.67a3.37 3.37 0 0 0 3.29-3.34z" fill-opacity=".2"/><path d="M93 15h33.3a3.35 3.35 0 0 1 3.34 3.33v33.34A3.36 3.36 0 0 1 126.3 55H93a3.35 3.35 0 0 1-3.33-3.33V18.33A3.34 3.34 0 0 1 93 15z" fill="#0078d4"/><path d="M99.31 28.67a10.41 10.41 0 0 1 4.1-4.54 12.42 12.42 0 0 1 6.53-1.63 11.5 11.5 0 0 1 6 1.55 10.44 10.44 0 0 1 4 4.33 14.07 14.07 0 0 1 1.4 6.37 14.78 14.78 0 0 1-1.45 6.67 10.55 10.55 0 0 1-4.11 4.49 12 12 0 0 1-6.26 1.59 11.8 11.8 0 0 1-6.17-1.57 10.53 10.53 0 0 1-4-4.34 13.7 13.7 0 0 1-1.41-6.3 15.15 15.15 0 0 1 1.39-6.62zm4.37 10.64a6.74 6.74 0 0 0 2.31 3 6 6 0 0 0 3.61 1.09 6.1 6.1 0 0 0 6.09-4.12 11.36 11.36 0 0 0 .72-4.16 12.54 12.54 0 0 0-.67-4.21 6.68 6.68 0 0 0-2.17-3.11 6 6 0 0 0-3.82-1.18 6.25 6.25 0 0 0-3.69 1.1 6.92 6.92 0 0 0-2.36 3 12 12 0 0 0 0 8.59z" fill="#fff"/><path d="M0 0h33.26v33.26H0z" fill="#f25022"/><path d="M36.74 0H70v33.26H36.74z" fill="#7fba00"/><path d="M0 36.74h33.26V70H0z" fill="#00a4ef"/><path d="M36.74 36.74H70V70H36.74z" fill="#ffb900"/></svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="152" height="80"><path d="M77.5 0C118.64 0 152 17.9 152 40s-33.35 40-74.5 40S0 62.1 0 40 36.35 0 77.5 0z" fill-rule="evenodd" fill="#777bb3"/><path d="M32.33 21.35h15.95q7.03.06 10.18 4.05t2.08 10.88a20.86 20.86 0 01-1.84 6.19 18.39 18.39 0 01-3.8 5.47 13.3 13.3 0 01-6.38 3.92 29.34 29.34 0 01-7.02.84h-7.14L32.09 64h-8.27l8.51-42.64m6.97 6.78l-3.58 17.84a4.38 4.38 0 00.72.06h.83a31.32 31.32 0 009.52-1.14q3.81-1.24 5.12-8.68 1.07-6.24-2.14-7.2a26.73 26.73 0 00-7.92-.89q-.71.06-1.37.06h-1.24l.05-.06M69.97 9.99h8.21l-2.32 11.36h7.38q6.07.12 9.05 2.5 3.03 2.38 1.78 9.04L90.1 52.7h-8.34l3.81-18.91q.6-2.98-.36-4.23t-4.1-1.25l-6.6-.06L69.6 52.7h-8.2L69.97 10m32.93 11.35h15.95q7.02.06 10.18 4.05t2.08 10.88a20.86 20.86 0 01-1.84 6.19 18.39 18.39 0 01-3.81 5.47 13.3 13.3 0 01-6.37 3.92 29.34 29.34 0 01-7.02.84h-7.15L102.66 64h-8.28l8.52-42.65m6.96 6.78l-3.57 17.85a4.38 4.38 0 00.72.05h.83a31.32 31.32 0 009.52-1.13q3.81-1.25 5.12-8.68 1.07-6.24-2.14-7.2a26.72 26.72 0 00-7.92-.9q-.71.07-1.37.07h-1.25l.06-.06" fill="#fff" fill-rule="evenodd"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="152" height="80"><path d="M77.5 0C118.64 0 152 17.9 152 40s-33.35 40-74.5 40S0 62.1 0 40 36.35 0 77.5 0z" fill-rule="evenodd" fill="#777bb3"/><path d="M32.33 21.35h15.95q7.03.06 10.18 4.05t2.08 10.88a20.86 20.86 0 0 1-1.84 6.19 18.39 18.39 0 0 1-3.8 5.47 13.3 13.3 0 0 1-6.38 3.92 29.34 29.34 0 0 1-7.02.84h-7.14L32.09 64h-8.27l8.51-42.64m6.97 6.78-3.58 17.84a4.38 4.38 0 0 0 .72.06h.83a31.32 31.32 0 0 0 9.52-1.14q3.81-1.24 5.12-8.68 1.07-6.24-2.14-7.2a26.73 26.73 0 0 0-7.92-.89q-.71.06-1.37.06h-1.24l.05-.06M69.97 9.99h8.21l-2.32 11.36h7.38q6.07.12 9.05 2.5 3.03 2.38 1.78 9.04L90.1 52.7h-8.34l3.81-18.91q.6-2.98-.36-4.23t-4.1-1.25l-6.6-.06L69.6 52.7h-8.2L69.97 10m32.93 11.35h15.95q7.02.06 10.18 4.05t2.08 10.88a20.86 20.86 0 0 1-1.84 6.19 18.39 18.39 0 0 1-3.81 5.47 13.3 13.3 0 0 1-6.37 3.92 29.34 29.34 0 0 1-7.02.84h-7.15L102.66 64h-8.28l8.52-42.65m6.96 6.78-3.57 17.85a4.38 4.38 0 0 0 .72.05h.83a31.32 31.32 0 0 0 9.52-1.13q3.81-1.25 5.12-8.68 1.07-6.24-2.14-7.2a26.72 26.72 0 0 0-7.92-.9q-.71.07-1.37.07h-1.25l.06-.06" fill="#fff" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1 +1 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 733.7 160" xml:space="preserve"><style>.st0{fill:#243846}.st2{fill:#3f7cbc}</style><path class="st0" d="M151.1 140.8l18.5-14.5c5.2 9 13.5 14.2 23 14.2 10.3 0 15.8-6.7 15.8-14 0-8.7-10.6-11.5-21.9-15-14.2-4.4-30.1-9.9-30.1-30.2 0-17 14.8-30.5 35.3-30.5 17.3 0 27.2 6.5 35.8 15.4l-16.7 12.6c-4.4-6.5-10.6-10-18.9-10-9.4 0-14.5 5.1-14.5 11.8 0 8.1 10.2 10.9 21.5 14.7 14.4 4.7 30.7 11 30.7 31.4 0 16.9-13.4 33.1-36.8 33.1-19.3.1-32.1-8.1-41.7-19zm162.6-55.1h19.8v8.1c4.7-6 11.8-9.6 20.1-9.6 17.1 0 27.5 11 27.5 29.8v44.3h-20.3v-41.7c0-9.7-4.5-15.4-13.4-15.4-7.6 0-13.8 5.2-13.8 17.4v39.7h-19.9V85.7zm72 36.4c0-25.7 18.9-37.8 35.3-37.8 9.4 0 16.9 3.5 21.7 8.6V52.3h19.9v106.1h-19.9v-8.1c-4.8 5.7-12.5 9.6-21.9 9.6-15.5 0-35.1-12.3-35.1-37.8zm57.5-.2c0-10.8-7.8-19.5-18.6-19.5-11 0-19.5 8.3-19.5 19.5s8.4 19.6 19.5 19.6c10.8 0 18.6-8.8 18.6-19.6zm24-16.5c0-30.2 22.8-54.5 54.2-54.5 15.7 0 28.9 5.7 38.5 14.7 3.9 3.7 7.2 7.9 9.8 12.5L552 88.9c-6.5-12.1-16.6-18.3-30.4-18.3-19.3 0-34.3 15.8-34.3 34.9 0 19.5 14.7 34.9 35 34.9 15.4 0 26.3-8.7 30.1-22.2h-33.3V98.9h55.1v8.1c0 28.5-20.3 53-51.9 53-33.2-.1-55.1-25.3-55.1-54.6zm112-19.7H599v11.9c3.6-7.6 10.2-11.9 20.1-11.9h8l-7.2 19.3h-5.4c-10.6 0-15.3 5.5-15.3 19v34.3h-19.9V85.7h-.1zm53 0h19.9v72.7h-19.9v-53.3H625l7.2-19.4zm10-11c6.6 0 11.9-5.3 11.9-11.9s-5.3-11.9-11.9-11.9c-6.6 0-11.9 5.3-11.9 11.9 0 6.5 5.3 11.9 11.9 11.9zm14.6 47.4c0-25.7 18.9-37.8 35.3-37.8 9.4 0 16.9 3.5 21.7 8.6V52.3h19.9v106.1h-19.9v-8.1c-4.8 5.7-12.5 9.6-21.9 9.6-15.5 0-35.1-12.3-35.1-37.8zm57.6-.2c0-10.8-7.8-19.5-18.6-19.5-11 0-19.5 8.3-19.5 19.5s8.4 19.6 19.5 19.6c10.7 0 18.6-8.8 18.6-19.6zm-405.4 0c0-20.9-15.3-37.6-37.5-37.6-20.9 0-37.8 16.9-37.8 37.8s15.7 37.8 38.4 37.8c15.7 0 27-7.6 33.3-18.4l-15.8-9.4c-3.3 6.4-9.8 10.4-17.4 10.4-10.5 0-17-5.2-19.3-13.2H309v-7.4zm-55.2-8.7c3.1-6.8 9.4-11.5 17.9-11.5 8.4 0 14.7 3.9 17.3 11.5h-35.2z"/><path d="M42.4 116h42.4v42.4H42.4zm0-42.5H0V116h42.4z" fill="#9edbee"/><path class="st2" d="M0 116h42.4v42.4H0z"/><path d="M127.3 73.5H84.9V116h42.4zM42.4 31.1h42.4v42.4H42.4z" fill="#07b2e2"/><path fill="#0f9cd5" d="M42.4 73.5V116h42.5V73.5z"/><path class="st2" d="M84.9 31.1h42.4v42.4H84.9z"/><path class="st0" d="M171.2 5.5v24.7h-5.7V5.5h-8.8v-5h23.4v4.9h-8.9v.1zm50.5 24.7h-5.4l-6.6-21.6-6.6 21.6h-5.4L189.4.4l6 .1 5.5 21 6.2-21h5.7l6.2 21 5.4-21h5.7l-8.4 29.7zm19.8 0V.5h5.7v29.7h-5.7zm19 0V.5h5.7v24.7h9.9l.1 5h-15.7zm27.5 0V.5h5.7v29.7H288zm31.8.6c-8.4 0-13.9-6.2-13.9-15.4S311.4 0 319.9 0s13.9 6.2 13.9 15.4c-.1 9.1-5.5 15.4-14 15.4zm0-26.1c-5.1 0-8.1 4.2-8.1 10.7s3.1 10.7 8.1 10.7c5.1 0 8.2-4.2 8.2-10.7s-3.1-10.7-8.2-10.7z"/></svg>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 733.7 160" xml:space="preserve"><style>.st0{fill:#243846}.st2{fill:#3f7cbc}</style><path class="st0" d="m151.1 140.8 18.5-14.5c5.2 9 13.5 14.2 23 14.2 10.3 0 15.8-6.7 15.8-14 0-8.7-10.6-11.5-21.9-15-14.2-4.4-30.1-9.9-30.1-30.2 0-17 14.8-30.5 35.3-30.5 17.3 0 27.2 6.5 35.8 15.4l-16.7 12.6c-4.4-6.5-10.6-10-18.9-10-9.4 0-14.5 5.1-14.5 11.8 0 8.1 10.2 10.9 21.5 14.7 14.4 4.7 30.7 11 30.7 31.4 0 16.9-13.4 33.1-36.8 33.1-19.3.1-32.1-8.1-41.7-19zm162.6-55.1h19.8v8.1c4.7-6 11.8-9.6 20.1-9.6 17.1 0 27.5 11 27.5 29.8v44.3h-20.3v-41.7c0-9.7-4.5-15.4-13.4-15.4-7.6 0-13.8 5.2-13.8 17.4v39.7h-19.9V85.7zm72 36.4c0-25.7 18.9-37.8 35.3-37.8 9.4 0 16.9 3.5 21.7 8.6V52.3h19.9v106.1h-19.9v-8.1c-4.8 5.7-12.5 9.6-21.9 9.6-15.5 0-35.1-12.3-35.1-37.8zm57.5-.2c0-10.8-7.8-19.5-18.6-19.5-11 0-19.5 8.3-19.5 19.5s8.4 19.6 19.5 19.6c10.8 0 18.6-8.8 18.6-19.6zm24-16.5c0-30.2 22.8-54.5 54.2-54.5 15.7 0 28.9 5.7 38.5 14.7 3.9 3.7 7.2 7.9 9.8 12.5L552 88.9c-6.5-12.1-16.6-18.3-30.4-18.3-19.3 0-34.3 15.8-34.3 34.9 0 19.5 14.7 34.9 35 34.9 15.4 0 26.3-8.7 30.1-22.2h-33.3V98.9h55.1v8.1c0 28.5-20.3 53-51.9 53-33.2-.1-55.1-25.3-55.1-54.6zm112-19.7H599v11.9c3.6-7.6 10.2-11.9 20.1-11.9h8l-7.2 19.3h-5.4c-10.6 0-15.3 5.5-15.3 19v34.3h-19.9V85.7h-.1zm53 0h19.9v72.7h-19.9v-53.3H625l7.2-19.4zm10-11c6.6 0 11.9-5.3 11.9-11.9s-5.3-11.9-11.9-11.9c-6.6 0-11.9 5.3-11.9 11.9 0 6.5 5.3 11.9 11.9 11.9zm14.6 47.4c0-25.7 18.9-37.8 35.3-37.8 9.4 0 16.9 3.5 21.7 8.6V52.3h19.9v106.1h-19.9v-8.1c-4.8 5.7-12.5 9.6-21.9 9.6-15.5 0-35.1-12.3-35.1-37.8zm57.6-.2c0-10.8-7.8-19.5-18.6-19.5-11 0-19.5 8.3-19.5 19.5s8.4 19.6 19.5 19.6c10.7 0 18.6-8.8 18.6-19.6zm-405.4 0c0-20.9-15.3-37.6-37.5-37.6-20.9 0-37.8 16.9-37.8 37.8s15.7 37.8 38.4 37.8c15.7 0 27-7.6 33.3-18.4l-15.8-9.4c-3.3 6.4-9.8 10.4-17.4 10.4-10.5 0-17-5.2-19.3-13.2H309v-7.4zm-55.2-8.7c3.1-6.8 9.4-11.5 17.9-11.5 8.4 0 14.7 3.9 17.3 11.5h-35.2z"/><path d="M42.4 116h42.4v42.4H42.4zm0-42.5H0V116h42.4z" fill="#9edbee"/><path class="st2" d="M0 116h42.4v42.4H0z"/><path d="M127.3 73.5H84.9V116h42.4zM42.4 31.1h42.4v42.4H42.4z" fill="#07b2e2"/><path fill="#0f9cd5" d="M42.4 73.5V116h42.5V73.5z"/><path class="st2" d="M84.9 31.1h42.4v42.4H84.9z"/><path class="st0" d="M171.2 5.5v24.7h-5.7V5.5h-8.8v-5h23.4v4.9h-8.9v.1zm50.5 24.7h-5.4l-6.6-21.6-6.6 21.6h-5.4L189.4.4l6 .1 5.5 21 6.2-21h5.7l6.2 21 5.4-21h5.7l-8.4 29.7zm19.8 0V.5h5.7v29.7h-5.7zm19 0V.5h5.7v24.7h9.9l.1 5h-15.7zm27.5 0V.5h5.7v29.7H288zm31.8.6c-8.4 0-13.9-6.2-13.9-15.4S311.4 0 319.9 0s13.9 6.2 13.9 15.4c-.1 9.1-5.5 15.4-14 15.4zm0-26.1c-5.1 0-8.1 4.2-8.1 10.7s3.1 10.7 8.1 10.7c5.1 0 8.2-4.2 8.2-10.7s-3.1-10.7-8.2-10.7z"/></svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -1 +1 @@
<svg width="334" height="70" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M68.286 50.59s5.078 5.663 14.3 5.663c8.64 0 13.66-5.546 13.66-12.142 0-13.25-19.496-11.44-19.496-18.795 0-2.919 2.743-4.962 6.245-4.962 5.195 0 9.165 3.62 9.165 3.62l3.269-6.13s-4.203-4.436-12.375-4.436c-7.939 0-13.893 5.137-13.893 12.025 0 12.724 19.555 11.44 19.555 18.854 0 3.385-2.86 5.02-6.013 5.02-5.837 0-10.331-4.378-10.331-4.378l-4.086 5.662zm30.453-9.923c0 8.464 6.129 15.586 15.994 15.586 7.413 0 11.966-4.261 11.966-4.261l-2.86-5.312s-3.795 3.269-8.581 3.269c-4.436 0-8.464-2.685-8.931-7.88h20.547s.175-1.985.175-2.86c0-7.88-4.611-14.127-13.192-14.127-8.872 0-15.118 6.421-15.118 15.585zm7.822-3.677c.7-3.852 3.327-6.187 7.121-6.187 3.269 0 5.779 2.16 5.895 6.187h-13.016zm24.849 18.562h7.413V41.893c0-1.4.117-2.743.526-3.969 1.109-3.56 4.027-6.07 7.996-6.07 3.795 0 4.729 2.451 4.729 6.07v17.628h7.354V36.406c0-7.88-3.735-11.324-10.331-11.324-6.013 0-9.281 3.678-10.566 6.188h-.116s.116-.934.116-2.043v-3.444h-7.121v29.77zm31.004-14.885c0 9.223 5.137 15.586 13.192 15.586 6.83 0 9.339-5.079 9.339-5.079h.117s-.117.818-.117 1.927v2.451h7.005V14.108h-7.413v13.076c0 .934.058 1.692.058 1.692h-.116s-2.043-3.794-8.581-3.794c-7.88 0-13.484 6.13-13.484 15.585zm7.472 0c0-5.895 3.385-9.222 7.471-9.222 4.962 0 7.413 4.553 7.413 9.164 0 6.596-3.619 9.398-7.471 9.398-4.378 0-7.413-3.677-7.413-9.34zm29.672 14.885h25.45v-6.479h-17.921V14.108h-7.529v41.444zm27.037-8.58c0 5.954 4.786 9.28 10.098 9.28 6.771 0 9.106-5.253 9.048-5.253h.117s-.117.934-.117 2.102v2.451h6.829v-18.62c0-7.53-4.553-11.85-12.374-11.85-7.063 0-11.675 3.678-11.675 3.678l2.802 5.311s3.911-2.86 8.172-2.86c3.269 0 5.72 1.343 5.72 5.254v.408h-.992c-4.845 0-17.628.642-17.628 10.099zm7.472-.35c0-4.145 6.129-4.67 9.923-4.67h1.284v.7c0 3.62-2.802 7.822-6.713 7.822-3.035 0-4.494-1.868-4.494-3.853zm19.44 19.262s2.627 1.926 6.187 1.926c4.495 0 8.639-2.335 10.741-7.763l13.309-34.264h-8.114l-5.837 17.278c-.526 1.576-.993 3.91-.993 3.91h-.116s-.526-2.451-1.109-4.027l-6.246-17.161h-8.347l12.55 29.302-1.109 2.627c-1.109 2.627-3.094 3.853-5.137 3.853-1.693 0-3.327-1.226-3.327-1.226l-2.452 5.545zm29.615-25.217c0 8.464 6.129 15.586 15.994 15.586 7.413 0 11.966-4.261 11.966-4.261l-2.86-5.312s-3.794 3.269-8.581 3.269c-4.436 0-8.464-2.685-8.931-7.88h20.547s.175-1.985.175-2.86c0-7.88-4.611-14.127-13.192-14.127-8.872 0-15.118 6.421-15.118 15.585zm7.822-3.677c.7-3.852 3.327-6.187 7.121-6.187 3.269 0 5.779 2.16 5.896 6.187h-13.017zm24.849 18.562h7.414v-11.79c0-1.752.175-3.386.642-4.846 1.401-4.436 4.961-6.245 8.113-6.245.993 0 1.751.116 1.751.116v-7.296s-.642-.117-1.342-.117c-4.553 0-8.114 3.386-9.456 7.647h-.117s.117-.992.117-2.102v-5.136h-7.122v29.77z" fill="#09092C"/><path d="M41.895 7.266a6.384 6.384 0 013.296 5.587v44.294a6.384 6.384 0 01-3.296 5.587l-10.327 5.71c-4.255 2.352-9.473-.726-9.473-5.588V7.144c0-4.862 5.218-7.94 9.474-5.588l10.326 5.71zM16.784 12.48c.244.451.37.956.37 1.47v42.064c0 .512-.127 1.017-.37 1.469-1.526 2.831-5.823 1.747-5.823-1.47V13.95c0-3.217 4.297-4.3 5.823-1.469zM5.823 20.853c.243.451.37.956.37 1.469V47.71c0 .513-.127 1.018-.37 1.47C4.297 52.01 0 50.926 0 47.71V22.322c0-3.217 4.297-4.301 5.823-1.47z" fill="#211FA6"/></svg>
<svg width="334" height="70" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M68.286 50.59s5.078 5.663 14.3 5.663c8.64 0 13.66-5.546 13.66-12.142 0-13.25-19.496-11.44-19.496-18.795 0-2.919 2.743-4.962 6.245-4.962 5.195 0 9.165 3.62 9.165 3.62l3.269-6.13s-4.203-4.436-12.375-4.436c-7.939 0-13.893 5.137-13.893 12.025 0 12.724 19.555 11.44 19.555 18.854 0 3.385-2.86 5.02-6.013 5.02-5.837 0-10.331-4.378-10.331-4.378l-4.086 5.662zm30.453-9.923c0 8.464 6.129 15.586 15.994 15.586 7.413 0 11.966-4.261 11.966-4.261l-2.86-5.312s-3.795 3.269-8.581 3.269c-4.436 0-8.464-2.685-8.931-7.88h20.547s.175-1.985.175-2.86c0-7.88-4.611-14.127-13.192-14.127-8.872 0-15.118 6.421-15.118 15.585zm7.822-3.677c.7-3.852 3.327-6.187 7.121-6.187 3.269 0 5.779 2.16 5.895 6.187h-13.016zm24.849 18.562h7.413V41.893c0-1.4.117-2.743.526-3.969 1.109-3.56 4.027-6.07 7.996-6.07 3.795 0 4.729 2.451 4.729 6.07v17.628h7.354V36.406c0-7.88-3.735-11.324-10.331-11.324-6.013 0-9.281 3.678-10.566 6.188h-.116s.116-.934.116-2.043v-3.444h-7.121v29.77zm31.004-14.885c0 9.223 5.137 15.586 13.192 15.586 6.83 0 9.339-5.079 9.339-5.079h.117s-.117.818-.117 1.927v2.451h7.005V14.108h-7.413v13.076c0 .934.058 1.692.058 1.692h-.116s-2.043-3.794-8.581-3.794c-7.88 0-13.484 6.13-13.484 15.585zm7.472 0c0-5.895 3.385-9.222 7.471-9.222 4.962 0 7.413 4.553 7.413 9.164 0 6.596-3.619 9.398-7.471 9.398-4.378 0-7.413-3.677-7.413-9.34zm29.672 14.885h25.45v-6.479h-17.921V14.108h-7.529v41.444zm27.037-8.58c0 5.954 4.786 9.28 10.098 9.28 6.771 0 9.106-5.253 9.048-5.253h.117s-.117.934-.117 2.102v2.451h6.829v-18.62c0-7.53-4.553-11.85-12.374-11.85-7.063 0-11.675 3.678-11.675 3.678l2.802 5.311s3.911-2.86 8.172-2.86c3.269 0 5.72 1.343 5.72 5.254v.408h-.992c-4.845 0-17.628.642-17.628 10.099zm7.472-.35c0-4.145 6.129-4.67 9.923-4.67h1.284v.7c0 3.62-2.802 7.822-6.713 7.822-3.035 0-4.494-1.868-4.494-3.853zm19.44 19.262s2.627 1.926 6.187 1.926c4.495 0 8.639-2.335 10.741-7.763l13.309-34.264h-8.114l-5.837 17.278c-.526 1.576-.993 3.91-.993 3.91h-.116s-.526-2.451-1.109-4.027l-6.246-17.161h-8.347l12.55 29.302-1.109 2.627c-1.109 2.627-3.094 3.853-5.137 3.853-1.693 0-3.327-1.226-3.327-1.226l-2.452 5.545zm29.615-25.217c0 8.464 6.129 15.586 15.994 15.586 7.413 0 11.966-4.261 11.966-4.261l-2.86-5.312s-3.794 3.269-8.581 3.269c-4.436 0-8.464-2.685-8.931-7.88h20.547s.175-1.985.175-2.86c0-7.88-4.611-14.127-13.192-14.127-8.872 0-15.118 6.421-15.118 15.585zm7.822-3.677c.7-3.852 3.327-6.187 7.121-6.187 3.269 0 5.779 2.16 5.896 6.187h-13.017zm24.849 18.562h7.414v-11.79c0-1.752.175-3.386.642-4.846 1.401-4.436 4.961-6.245 8.113-6.245.993 0 1.751.116 1.751.116v-7.296s-.642-.117-1.342-.117c-4.553 0-8.114 3.386-9.456 7.647h-.117s.117-.992.117-2.102v-5.136h-7.122v29.77z" fill="#09092C"/><path d="M41.895 7.266a6.384 6.384 0 0 1 3.296 5.587v44.294a6.384 6.384 0 0 1-3.296 5.587l-10.327 5.71c-4.255 2.352-9.473-.726-9.473-5.588V7.144c0-4.862 5.218-7.94 9.474-5.588l10.326 5.71zM16.784 12.48c.244.451.37.956.37 1.47v42.064c0 .512-.127 1.017-.37 1.469-1.526 2.831-5.823 1.747-5.823-1.47V13.95c0-3.217 4.297-4.3 5.823-1.469zM5.823 20.853c.243.451.37.956.37 1.469V47.71c0 .513-.127 1.018-.37 1.47C4.297 52.01 0 50.926 0 47.71V22.322c0-3.217 4.297-4.301 5.823-1.47z" fill="#211FA6"/></svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 403.5 76.8"><g data-name="Layer 2"><g data-name="Layer 1"><path d="M0 0h105.7v76.6a16.4 16.4 0 01-1.9.2H0zm102.6 73.7V4.6l-96 69a11.2 11.2 0 001.2.2H43a5.2 5.2 0 002.7-1l12.5-9 18.5-13.3 1.8 2.5-28.7 20.7zM3.2 4.5v67.8l47.4-34zm4.3-1.3a6 6 0 00.7.8L52 35.2c1.4 1 2.2.4 3.2-.3L96.8 4.6c.5-.3.9-.8 1.6-1.4zm198.3 22.6v49.8h-15V1.8l2.6-.1h14a3.6 3.6 0 014 2.3c5.6 12.1 11.4 24.2 17.2 36.2L230 43l1.6-3 17.6-36a3.3 3.3 0 013.5-2.3h16.9v74h-15V26.1l-.7-.2-1.2 2.1c-5.5 10.3-11 20.6-16.3 31a3.1 3.1 0 01-3.4 2c-2.6-.3-5.8.7-7.8-.5s-2.7-4.4-4-6.7l-13.7-26c-.3-.8-.8-1.5-1.2-2.2zm155.8 49.9h-15.3V1.9a6.7 6.7 0 011.3-.2c10.7 0 21.4 0 32.2.3a28 28 0 018.2 1.7 22.2 22.2 0 0115.4 23.9c-.7 10-8 18-18.7 20.3a55.8 55.8 0 01-9.4 1c-4.5.2-9 0-13.7 0zm0-38.2h13.6a22.9 22.9 0 004.2-.4c5.1-1 8.4-5 8.8-10.6.4-5.8-2.4-11-7.4-12.4-6.3-1.8-12.7-.6-19.1-.8zm-186.5-32l-3.8 12.8-4.8-2.2A37.4 37.4 0 00147 13c-5.5.6-8.8 4-8.6 8.8a7.5 7.5 0 004.6 6.6c4 1.9 8.1 3.2 12.2 4.9 5 2 10.1 3.7 14.7 6.5a18.9 18.9 0 018.5 21.7 17.8 17.8 0 01-8.5 10.8 30.8 30.8 0 01-13.9 4.4c-11.8.9-23.2-.7-34-5.8l-1-.6 3-12.9a42.7 42.7 0 0018.8 6.8 77.6 77.6 0 0012.6.2c3.6-.2 6.9-1.7 8-5.6s-.3-7.6-4.3-10c-3-1.7-6.5-2.8-9.8-4.1-5.2-2.2-10.7-4-15.7-6.7s-9-6.9-10-12.8c-1.5-8 1.2-14.3 7.8-19a30.5 30.5 0 0116-5.3 59.3 59.3 0 0127.8 4.8zm125.3 7.8h-21.5V2.8c0-.4 1.3-1 2-1 4-.2 7.9-.1 11.8-.1h44.5v11.5h-21.5v62.4h-15.3z"/><path d="M7.5 3.2h90.9l-1.6 1.4-41.6 30.3c-1 .7-1.9 1.3-3.2.3L8.2 4a6 6 0 01-.7-.8z" fill="#21b193"/><path d="M361.7 37.5V13.2c6.4.3 12.8-1 19.1.9 5 1.4 7.8 6.6 7.4 12.4-.4 5.5-3.7 9.5-8.8 10.6a22.9 22.9 0 01-4.2.4h-13.5z" fill="#fff"/></g></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 403.5 76.8"><g data-name="Layer 2"><g data-name="Layer 1"><path d="M0 0h105.7v76.6a16.4 16.4 0 0 1-1.9.2H0zm102.6 73.7V4.6l-96 69a11.2 11.2 0 0 0 1.2.2H43a5.2 5.2 0 0 0 2.7-1l12.5-9 18.5-13.3 1.8 2.5-28.7 20.7zM3.2 4.5v67.8l47.4-34zm4.3-1.3a6 6 0 0 0 .7.8L52 35.2c1.4 1 2.2.4 3.2-.3L96.8 4.6c.5-.3.9-.8 1.6-1.4zm198.3 22.6v49.8h-15V1.8l2.6-.1h14a3.6 3.6 0 0 1 4 2.3c5.6 12.1 11.4 24.2 17.2 36.2L230 43l1.6-3 17.6-36a3.3 3.3 0 0 1 3.5-2.3h16.9v74h-15V26.1l-.7-.2-1.2 2.1c-5.5 10.3-11 20.6-16.3 31a3.1 3.1 0 0 1-3.4 2c-2.6-.3-5.8.7-7.8-.5s-2.7-4.4-4-6.7l-13.7-26c-.3-.8-.8-1.5-1.2-2.2zm155.8 49.9h-15.3V1.9a6.7 6.7 0 0 1 1.3-.2c10.7 0 21.4 0 32.2.3a28 28 0 0 1 8.2 1.7 22.2 22.2 0 0 1 15.4 23.9c-.7 10-8 18-18.7 20.3a55.8 55.8 0 0 1-9.4 1c-4.5.2-9 0-13.7 0zm0-38.2h13.6a22.9 22.9 0 0 0 4.2-.4c5.1-1 8.4-5 8.8-10.6.4-5.8-2.4-11-7.4-12.4-6.3-1.8-12.7-.6-19.1-.8zm-186.5-32-3.8 12.8-4.8-2.2A37.4 37.4 0 0 0 147 13c-5.5.6-8.8 4-8.6 8.8a7.5 7.5 0 0 0 4.6 6.6c4 1.9 8.1 3.2 12.2 4.9 5 2 10.1 3.7 14.7 6.5a18.9 18.9 0 0 1 8.5 21.7 17.8 17.8 0 0 1-8.5 10.8 30.8 30.8 0 0 1-13.9 4.4c-11.8.9-23.2-.7-34-5.8l-1-.6 3-12.9a42.7 42.7 0 0 0 18.8 6.8 77.6 77.6 0 0 0 12.6.2c3.6-.2 6.9-1.7 8-5.6s-.3-7.6-4.3-10c-3-1.7-6.5-2.8-9.8-4.1-5.2-2.2-10.7-4-15.7-6.7s-9-6.9-10-12.8c-1.5-8 1.2-14.3 7.8-19a30.5 30.5 0 0 1 16-5.3 59.3 59.3 0 0 1 27.8 4.8zm125.3 7.8h-21.5V2.8c0-.4 1.3-1 2-1 4-.2 7.9-.1 11.8-.1h44.5v11.5h-21.5v62.4h-15.3z"/><path d="M7.5 3.2h90.9l-1.6 1.4-41.6 30.3c-1 .7-1.9 1.3-3.2.3L8.2 4a6 6 0 0 1-.7-.8z" fill="#21b193"/><path d="M361.7 37.5V13.2c6.4.3 12.8-1 19.1.9 5 1.4 7.8 6.6 7.4 12.4-.4 5.5-3.7 9.5-8.8 10.6a22.9 22.9 0 0 1-4.2.4h-13.5z" fill="#fff"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="181" height="60"><defs><style>.cls-1{fill:#ccc;fill-rule:evenodd}</style></defs><path id="Rounded_Rectangle_1" data-name="Rounded Rectangle 1" class="cls-1" d="M47.12 46.08h34.3a4.28 4.28 0 110 8.56h-34.3a4.28 4.28 0 110-8.56z"/><path id="Rounded_Rectangle_1-2" data-name="Rounded Rectangle 1" class="cls-1" d="M25.7 26.78h55.7a4.28 4.28 0 014.3 4.28v.02a4.28 4.28 0 01-4.3 4.28H25.7a4.28 4.28 0 01-4.28-4.28v-.02a4.28 4.28 0 014.29-4.28z"/><path id="Rounded_Rectangle_1-3" data-name="Rounded Rectangle 1" class="cls-1" d="M4.28 6.42h77.13a4.28 4.28 0 014.28 4.28v.02A4.28 4.28 0 0181.41 15H4.28A4.28 4.28 0 010 10.72v-.02a4.28 4.28 0 014.28-4.28z"/><path id="_" data-name="" d="M178.88 57.78a6.91 6.91 0 01-5.19 2.2h-68.95a6.9 6.9 0 01-5.19-2.2 7.32 7.32 0 01-2.11-5.26v-44a7.33 7.33 0 012.11-5.27 6.91 6.91 0 015.19-2.2h68.95a6.92 6.92 0 015.19 2.2 7.34 7.34 0 012.11 5.27v44a7.33 7.33 0 01-2.11 5.26zm-8.84-49.45L139.31 33 108.58 8.33q-2.7-2.3-4.8-.39a2.67 2.67 0 00-.77 2.2 3.33 3.33 0 00.96 1.82l19.98 18.37-19.21 19.9a1.74 1.74 0 00-.2 2.48 1.4 1.4 0 001.26.58 2.53 2.53 0 001.44-.39l21.5-18.17 10.57 9.37 10.37-9.38L171.2 52.9a2.54 2.54 0 001.44.38 1.96 1.96 0 001.44-.57q.96-1.15-.38-2.49l-19.21-19.9 19.97-18.36a4.02 4.02 0 001.06-1.82 2.27 2.27 0 00-.87-2.2q-1.92-1.9-4.6.39z" fill="#819eaf" fill-rule="evenodd"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="181" height="60"><defs><style>.cls-1{fill:#ccc;fill-rule:evenodd}</style></defs><path id="Rounded_Rectangle_1" data-name="Rounded Rectangle 1" class="cls-1" d="M47.12 46.08h34.3a4.28 4.28 0 1 1 0 8.56h-34.3a4.28 4.28 0 1 1 0-8.56z"/><path id="Rounded_Rectangle_1-2" data-name="Rounded Rectangle 1" class="cls-1" d="M25.7 26.78h55.7a4.28 4.28 0 0 1 4.3 4.28v.02a4.28 4.28 0 0 1-4.3 4.28H25.7a4.28 4.28 0 0 1-4.28-4.28v-.02a4.28 4.28 0 0 1 4.29-4.28z"/><path id="Rounded_Rectangle_1-3" data-name="Rounded Rectangle 1" class="cls-1" d="M4.28 6.42h77.13a4.28 4.28 0 0 1 4.28 4.28v.02A4.28 4.28 0 0 1 81.41 15H4.28A4.28 4.28 0 0 1 0 10.72v-.02a4.28 4.28 0 0 1 4.28-4.28z"/><path id="_" data-name="" d="M178.88 57.78a6.91 6.91 0 0 1-5.19 2.2h-68.95a6.9 6.9 0 0 1-5.19-2.2 7.32 7.32 0 0 1-2.11-5.26v-44a7.33 7.33 0 0 1 2.11-5.27 6.91 6.91 0 0 1 5.19-2.2h68.95a6.92 6.92 0 0 1 5.19 2.2 7.34 7.34 0 0 1 2.11 5.27v44a7.33 7.33 0 0 1-2.11 5.26zm-8.84-49.45L139.31 33 108.58 8.33q-2.7-2.3-4.8-.39a2.67 2.67 0 0 0-.77 2.2 3.33 3.33 0 0 0 .96 1.82l19.98 18.37-19.21 19.9a1.74 1.74 0 0 0-.2 2.48 1.4 1.4 0 0 0 1.26.58 2.53 2.53 0 0 0 1.44-.39l21.5-18.17 10.57 9.37 10.37-9.38L171.2 52.9a2.54 2.54 0 0 0 1.44.38 1.96 1.96 0 0 0 1.44-.57q.96-1.15-.38-2.49l-19.21-19.9 19.97-18.36a4.02 4.02 0 0 0 1.06-1.82 2.27 2.27 0 0 0-.87-2.2q-1.92-1.9-4.6.39z" fill="#819eaf" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1 +1 @@
<svg data-name="2-Color Gray Orange" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 194.18"><path d="M1.9 115.58l7.79-9.33c5.4 4.45 11 7.28 17.9 7.28 5.39 0 8.65-2.14 8.65-5.65v-.17c0-3.34-2.06-5.06-12.08-7.62C12.09 97 4.3 93.66 4.3 81.76v-.17c0-10.88 8.73-18.07 21-18.07a34.74 34.74 0 0122.26 7.62l-6.85 9.94c-5.31-3.69-10.54-5.91-15.59-5.91s-7.7 2.31-7.7 5.22v.17c0 3.94 2.57 5.23 12.93 7.88 12.16 3.17 19 7.54 19 18v.17c0 11.91-9.08 18.58-22 18.58a38.06 38.06 0 01-25.45-9.61zm55.53-51.2h24.49c14.3 0 22.94 8.48 22.94 20.72v.17c0 13.87-10.79 21.07-24.23 21.07h-10v18h-13.2zm23.63 30.23c6.59 0 10.45-3.94 10.45-9.08v-.17c0-5.91-4.11-9.08-10.71-9.08H70.62v18.33zM123.53 64h12.16l25.69 60.37h-13.79l-5.48-13.45h-25.34l-5.48 13.45H97.84zm13.87 35.23l-8-19.44-8 19.44zm30.22-34.85H195c7.62 0 13.53 2.14 17.47 6.08 3.33 3.34 5.13 8.05 5.13 13.7v.17c0 9.68-5.22 15.76-12.84 18.58l14.64 21.41H204l-12.85-19.18H180.8v19.18h-13.18zm26.54 29.11c6.42 0 10.11-3.42 10.11-8.48v-.17c0-5.65-3.94-8.56-10.37-8.56h-13.1v17.21zm93.57-29.11h21.75c13.19 0 22.27 6.76 22.27 18.32v.17c0 12.59-10.88 19.1-23.38 19.1h-16.19v22.35h-4.45zm20.9 33.48c11.13 0 18.66-5.82 18.66-14.73V83c0-9.51-7.36-14.47-18.15-14.47h-17v29.33zm94.43 17.72l2.91-3.34c6.6 6.08 12.68 8.91 21.5 8.91 9 0 15.16-5.05 15.16-11.9v-.17c0-6.34-3.35-10-17-12.76-14.39-2.91-20.21-7.79-20.21-16.87v-.17c0-8.91 8.13-15.76 19.27-15.76 8.73 0 14.47 2.4 20.55 7.28l-2.83 3.51a25.75 25.75 0 00-17.9-6.76c-8.81 0-14.64 5-14.64 11.3V79c0 6.34 3.26 10.19 17.47 13.1 13.88 2.83 19.7 7.79 19.7 16.53v.17c0 9.68-8.31 16.35-19.87 16.35-9.55.02-16.91-3.15-24.11-9.57zm69.7-47.09h-20.9v-4.11h46.24v4.11h-20.89v55.83h-4.45zM239.82 89.6l20.75-25.22h16.1l-24.35 28.47 26.1 31.47h-17l-21.6-26.76v26.76h-13.18V64.38h13.18z" fill="#55555a"/><path d="M389.37 50.72c-6.68 5-8 13.92-8.17 19.93-10.55-12.2 19.55-48.11-14.65-70.3 21.17 27.4-30.13 54.33-30.13 94.69 0 15.83 9.89 29.77 31.6 34.61 21.3-4.54 31.81-18.78 31.81-34.6 0-23.59-14.68-31.49-10.46-44.33zm-21.3 66a21 21 0 1121-21 21 21 0 01-21 21z" fill="#fa6423"/></svg>
<svg data-name="2-Color Gray Orange" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 194.18"><path d="m1.9 115.58 7.79-9.33c5.4 4.45 11 7.28 17.9 7.28 5.39 0 8.65-2.14 8.65-5.65v-.17c0-3.34-2.06-5.06-12.08-7.62C12.09 97 4.3 93.66 4.3 81.76v-.17c0-10.88 8.73-18.07 21-18.07a34.74 34.74 0 0 1 22.26 7.62l-6.85 9.94c-5.31-3.69-10.54-5.91-15.59-5.91s-7.7 2.31-7.7 5.22v.17c0 3.94 2.57 5.23 12.93 7.88 12.16 3.17 19 7.54 19 18v.17c0 11.91-9.08 18.58-22 18.58a38.06 38.06 0 0 1-25.45-9.61zm55.53-51.2h24.49c14.3 0 22.94 8.48 22.94 20.72v.17c0 13.87-10.79 21.07-24.23 21.07h-10v18h-13.2zm23.63 30.23c6.59 0 10.45-3.94 10.45-9.08v-.17c0-5.91-4.11-9.08-10.71-9.08H70.62v18.33zM123.53 64h12.16l25.69 60.37h-13.79l-5.48-13.45h-25.34l-5.48 13.45H97.84zm13.87 35.23-8-19.44-8 19.44zm30.22-34.85H195c7.62 0 13.53 2.14 17.47 6.08 3.33 3.34 5.13 8.05 5.13 13.7v.17c0 9.68-5.22 15.76-12.84 18.58l14.64 21.41H204l-12.85-19.18H180.8v19.18h-13.18zm26.54 29.11c6.42 0 10.11-3.42 10.11-8.48v-.17c0-5.65-3.94-8.56-10.37-8.56h-13.1v17.21zm93.57-29.11h21.75c13.19 0 22.27 6.76 22.27 18.32v.17c0 12.59-10.88 19.1-23.38 19.1h-16.19v22.35h-4.45zm20.9 33.48c11.13 0 18.66-5.82 18.66-14.73V83c0-9.51-7.36-14.47-18.15-14.47h-17v29.33zm94.43 17.72 2.91-3.34c6.6 6.08 12.68 8.91 21.5 8.91 9 0 15.16-5.05 15.16-11.9v-.17c0-6.34-3.35-10-17-12.76-14.39-2.91-20.21-7.79-20.21-16.87v-.17c0-8.91 8.13-15.76 19.27-15.76 8.73 0 14.47 2.4 20.55 7.28l-2.83 3.51a25.75 25.75 0 0 0-17.9-6.76c-8.81 0-14.64 5-14.64 11.3V79c0 6.34 3.26 10.19 17.47 13.1 13.88 2.83 19.7 7.79 19.7 16.53v.17c0 9.68-8.31 16.35-19.87 16.35-9.55.02-16.91-3.15-24.11-9.57zm69.7-47.09h-20.9v-4.11h46.24v4.11h-20.89v55.83h-4.45zM239.82 89.6l20.75-25.22h16.1l-24.35 28.47 26.1 31.47h-17l-21.6-26.76v26.76h-13.18V64.38h13.18z" fill="#55555a"/><path d="M389.37 50.72c-6.68 5-8 13.92-8.17 19.93-10.55-12.2 19.55-48.11-14.65-70.3 21.17 27.4-30.13 54.33-30.13 94.69 0 15.83 9.89 29.77 31.6 34.61 21.3-4.54 31.81-18.78 31.81-34.6 0-23.59-14.68-31.49-10.46-44.33zm-21.3 66a21 21 0 1 1 21-21 21 21 0 0 1-21 21z" fill="#fa6423"/></svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 562.3 193.9"><path fill="#dc7e28" d="M562.3 41.4v133.4l-18.1 18.1V62.3z"/><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="421" y1="59.1" x2="542" y2="192.3"><stop offset="0" stop-color="#f8c51b"/><stop offset="1" stop-color="#e78f24"/></linearGradient><path fill="url(#a)" d="M422.3 62.3h122v130.6h-122z"/><path fill="#fdd600" d="M441.4 41.5l-19.1 20.8h121.9l18.1-20.9z"/><path fill="#90c7ea" d="M290.3 47.2l120-16.7-10.1 28.8-118.3 16.1z"/><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="286.2" y1="75.3" x2="410.9" y2="175.5"><stop offset="0" stop-color="#1f8aca"/><stop offset="1" stop-color="#01659e"/></linearGradient><path fill="url(#b)" d="M400.2 59.3l16.7 117-118.3 16.6-16.7-117.5z"/><path fill="#0b98d5" d="M400.2 59.3l16.7 117 9-25.3-15.5-119.8-.1-.7"/><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="218.1" y1="80.8" x2="218.1" y2="190.1"><stop offset="0" stop-color="#269f49"/><stop offset="1" stop-color="#008a54"/></linearGradient><path fill="url(#c)" d="M189 37.2l106.2 48-47.9 108.7L141.1 146z"/><path fill="#95cea0" d="M178 0l11 37.2 106.2 48-8.9-35.6z"/><path fill="#69bf6d" d="M178 0l-42.8 101.4 5.9 44.6L189 37.2z"/><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="59.5" y1="70.1" x2="78.3" y2="183.6"><stop offset="0" stop-color="#d81f32"/><stop offset="1" stop-color="#bb2637"/></linearGradient><path fill="url(#d)" d="M118.7 59.1l17.5 115.2-117.3 18.4L0 77.3z"/><path fill="#761216" d="M126.7 17.2l17.4 116.2-7.9 40.9-17.5-115.2z"/><path d="M525.6 109.3a48.6 48.6 0 00-25.9-26.7 48.6 48.6 0 00-36.6 0A44.4 44.4 0 00447.9 93a46.4 46.4 0 00-10.6 16.2 53.6 53.6 0 00-3.5 19.8c0 7.1 1.2 13.7 3.6 19.8a48.7 48.7 0 0025.6 26.7 48.4 48.4 0 0062.7-26.7 53.6 53.6 0 00-.1-39.5zm-25.1 43a24 24 0 01-19.1 8.5c-8.2 0-14.5-2.8-19.2-8.4a35.2 35.2 0 01-7.1-23.3c0-10.1 2.4-18 7-23.6 4.7-5.7 11-8.5 19.2-8.5 8.1 0 14.4 2.8 19.1 8.5a36 36 0 017 23.6c.2 9.9-2.2 17.6-6.9 23.2zM78.6 125.9zm27.5 30a9 9 0 00-3.7-2.5c-1.6-.5-3.4-.8-5.7-.8-2.1 0-4.5.2-7.2.7l-31 5.3c.3-2.4 1.5-5.5 3.6-9.3 2.3-4.3 5.8-9.4 10.3-15.4l3.6-4.8 2.5-3.2a76.5 76.5 0 0013.2-22.8 52 52 0 001.8-10.2l.1-2.8c0-2.4-.2-4.9-.6-7.2-.4-2.2-.9-4-1.6-5.4a7.8 7.8 0 00-2.7-3.2c-1.3-.8-3-1.1-5.4-1.1-1.9 0-4.2.2-6.9.7L40.5 80c-4.3.7-7.5 2-9.6 3.9a7.8 7.8 0 00-2.5 5.8l.2 1.8a8 8 0 004.6 6.4c1.5.7 3.3 1 5.5 1 1.4 0 3-.2 4.8-.4l30-5.1.1 1.6c0 1.9-.3 3.7-1 5.5-.9 2.5-3.1 6-6.7 10.5l-4.6 5.7a140.6 140.6 0 00-17.4 25.1 56.4 56.4 0 00-5.2 14.1 35.6 35.6 0 00-.4 13c.4 2.4 1 4.4 1.8 5.9a7.4 7.4 0 003.1 3.4c1.2.6 2.9.9 5.2.9 3 0 7-.4 12.1-1.3l32.5-5.6c5.8-1 9.8-2.4 12.1-4.3a7.4 7.4 0 002.8-6.1l-.2-1.9a7.1 7.1 0 00-1.6-4zm147.3-77.8a44.2 44.2 0 00-15.2-10.4 45.7 45.7 0 00-17.9-3.8h-.3a50 50 0 00-34.3 15.5 57 57 0 00-11.2 17.5 57 57 0 00-4.7 20.2l-.1 2.3a50 50 0 0012.7 33.1 46.2 46.2 0 0033.3 14.2h.2c6.1 0 12.1-1.3 18-3.9a51.2 51.2 0 0016.4-11.5 57.3 57.3 0 0011.3-17.5 57.6 57.6 0 004.7-20.2v-1.9a51.3 51.3 0 00-12.9-33.6zm-11.6 47.4c-4 9.4-9.3 15.9-15.8 19.5a22.4 22.4 0 01-20.8.7 23.2 23.2 0 01-14.1-15.4c-.7-2.4-1-4.9-1-7.6 0-5.3 1.3-11.1 4-17.3a38.6 38.6 0 0116-19.8 22.4 22.4 0 0120.9-.7c7.4 3.1 12 8.2 13.9 15.5.6 2.4 1 4.8 1 7.5 0 5.2-1.4 11.1-4.1 17.6zm138.3-43.8c-.5-3.6-1.8-6.4-3.8-8.2a8.3 8.3 0 00-5.9-2.2l-1.8.1a9.3 9.3 0 00-6.9 4.2c-1 1.7-1.6 3.7-1.6 6.1l.2 2.8 4.3 30.4-34 5-4.3-30.4a13 13 0 00-3.7-8.1 8.4 8.4 0 00-5.9-2.3l-1.6.1a9.8 9.8 0 00-7.1 4.2 10.9 10.9 0 00-1.6 6.1l.2 2.9 11.6 79.2c.5 3.6 1.8 6.4 3.9 8.2a9 9 0 006 2.1l2-.2a8.6 8.6 0 006.6-4.2c1-1.7 1.5-3.7 1.5-6l-.2-2.9-4.8-31.3 34-5 4.8 31.3c.5 3.6 1.8 6.3 3.8 8.2a9 9 0 006 2.2l1.8-.1a8.7 8.7 0 006.8-4.2c1-1.7 1.5-3.7 1.5-6l-.2-2.9-11.6-79.1z" fill="#fff"/><path fill="#ec473f" d="M0 77.3l2.3-11.6 5.9-29.5 118.5-19-8 41.9z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 562.3 193.9"><path fill="#dc7e28" d="M562.3 41.4v133.4l-18.1 18.1V62.3z"/><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="421" y1="59.1" x2="542" y2="192.3"><stop offset="0" stop-color="#f8c51b"/><stop offset="1" stop-color="#e78f24"/></linearGradient><path fill="url(#a)" d="M422.3 62.3h122v130.6h-122z"/><path fill="#fdd600" d="m441.4 41.5-19.1 20.8h121.9l18.1-20.9z"/><path fill="#90c7ea" d="m290.3 47.2 120-16.7-10.1 28.8-118.3 16.1z"/><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="286.2" y1="75.3" x2="410.9" y2="175.5"><stop offset="0" stop-color="#1f8aca"/><stop offset="1" stop-color="#01659e"/></linearGradient><path fill="url(#b)" d="m400.2 59.3 16.7 117-118.3 16.6-16.7-117.5z"/><path fill="#0b98d5" d="m400.2 59.3 16.7 117 9-25.3-15.5-119.8-.1-.7"/><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="218.1" y1="80.8" x2="218.1" y2="190.1"><stop offset="0" stop-color="#269f49"/><stop offset="1" stop-color="#008a54"/></linearGradient><path fill="url(#c)" d="m189 37.2 106.2 48-47.9 108.7L141.1 146z"/><path fill="#95cea0" d="m178 0 11 37.2 106.2 48-8.9-35.6z"/><path fill="#69bf6d" d="m178 0-42.8 101.4 5.9 44.6L189 37.2z"/><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="59.5" y1="70.1" x2="78.3" y2="183.6"><stop offset="0" stop-color="#d81f32"/><stop offset="1" stop-color="#bb2637"/></linearGradient><path fill="url(#d)" d="m118.7 59.1 17.5 115.2-117.3 18.4L0 77.3z"/><path fill="#761216" d="m126.7 17.2 17.4 116.2-7.9 40.9-17.5-115.2z"/><path d="M525.6 109.3a48.6 48.6 0 0 0-25.9-26.7 48.6 48.6 0 0 0-36.6 0A44.4 44.4 0 0 0 447.9 93a46.4 46.4 0 0 0-10.6 16.2 53.6 53.6 0 0 0-3.5 19.8c0 7.1 1.2 13.7 3.6 19.8a48.7 48.7 0 0 0 25.6 26.7 48.4 48.4 0 0 0 62.7-26.7 53.6 53.6 0 0 0-.1-39.5zm-25.1 43a24 24 0 0 1-19.1 8.5c-8.2 0-14.5-2.8-19.2-8.4a35.2 35.2 0 0 1-7.1-23.3c0-10.1 2.4-18 7-23.6 4.7-5.7 11-8.5 19.2-8.5 8.1 0 14.4 2.8 19.1 8.5a36 36 0 0 1 7 23.6c.2 9.9-2.2 17.6-6.9 23.2zM78.6 125.9zm27.5 30a9 9 0 0 0-3.7-2.5c-1.6-.5-3.4-.8-5.7-.8-2.1 0-4.5.2-7.2.7l-31 5.3c.3-2.4 1.5-5.5 3.6-9.3 2.3-4.3 5.8-9.4 10.3-15.4l3.6-4.8 2.5-3.2a76.5 76.5 0 0 0 13.2-22.8 52 52 0 0 0 1.8-10.2l.1-2.8c0-2.4-.2-4.9-.6-7.2-.4-2.2-.9-4-1.6-5.4a7.8 7.8 0 0 0-2.7-3.2c-1.3-.8-3-1.1-5.4-1.1-1.9 0-4.2.2-6.9.7L40.5 80c-4.3.7-7.5 2-9.6 3.9a7.8 7.8 0 0 0-2.5 5.8l.2 1.8a8 8 0 0 0 4.6 6.4c1.5.7 3.3 1 5.5 1 1.4 0 3-.2 4.8-.4l30-5.1.1 1.6c0 1.9-.3 3.7-1 5.5-.9 2.5-3.1 6-6.7 10.5l-4.6 5.7a140.6 140.6 0 0 0-17.4 25.1 56.4 56.4 0 0 0-5.2 14.1 35.6 35.6 0 0 0-.4 13c.4 2.4 1 4.4 1.8 5.9a7.4 7.4 0 0 0 3.1 3.4c1.2.6 2.9.9 5.2.9 3 0 7-.4 12.1-1.3l32.5-5.6c5.8-1 9.8-2.4 12.1-4.3a7.4 7.4 0 0 0 2.8-6.1l-.2-1.9a7.1 7.1 0 0 0-1.6-4zm147.3-77.8a44.2 44.2 0 0 0-15.2-10.4 45.7 45.7 0 0 0-17.9-3.8h-.3a50 50 0 0 0-34.3 15.5 57 57 0 0 0-11.2 17.5 57 57 0 0 0-4.7 20.2l-.1 2.3a50 50 0 0 0 12.7 33.1 46.2 46.2 0 0 0 33.3 14.2h.2c6.1 0 12.1-1.3 18-3.9a51.2 51.2 0 0 0 16.4-11.5 57.3 57.3 0 0 0 11.3-17.5 57.6 57.6 0 0 0 4.7-20.2v-1.9a51.3 51.3 0 0 0-12.9-33.6zm-11.6 47.4c-4 9.4-9.3 15.9-15.8 19.5a22.4 22.4 0 0 1-20.8.7 23.2 23.2 0 0 1-14.1-15.4c-.7-2.4-1-4.9-1-7.6 0-5.3 1.3-11.1 4-17.3a38.6 38.6 0 0 1 16-19.8 22.4 22.4 0 0 1 20.9-.7c7.4 3.1 12 8.2 13.9 15.5.6 2.4 1 4.8 1 7.5 0 5.2-1.4 11.1-4.1 17.6zm138.3-43.8c-.5-3.6-1.8-6.4-3.8-8.2a8.3 8.3 0 0 0-5.9-2.2l-1.8.1a9.3 9.3 0 0 0-6.9 4.2c-1 1.7-1.6 3.7-1.6 6.1l.2 2.8 4.3 30.4-34 5-4.3-30.4a13 13 0 0 0-3.7-8.1 8.4 8.4 0 0 0-5.9-2.3l-1.6.1a9.8 9.8 0 0 0-7.1 4.2 10.9 10.9 0 0 0-1.6 6.1l.2 2.9 11.6 79.2c.5 3.6 1.8 6.4 3.9 8.2a9 9 0 0 0 6 2.1l2-.2a8.6 8.6 0 0 0 6.6-4.2c1-1.7 1.5-3.7 1.5-6l-.2-2.9-4.8-31.3 34-5 4.8 31.3c.5 3.6 1.8 6.3 3.8 8.2a9 9 0 0 0 6 2.2l1.8-.1a8.7 8.7 0 0 0 6.8-4.2c1-1.7 1.5-3.7 1.5-6l-.2-2.9-11.6-79.1z" fill="#fff"/><path fill="#ec473f" d="m0 77.3 2.3-11.6 5.9-29.5 118.5-19-8 41.9z"/></svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -1 +1 @@
<svg id="recommended_-_orange_overlay" data-name="recommended - orange overlay" xmlns="http://www.w3.org/2000/svg" width="159" height="22"><defs><style>.cls-2{fill:#fff;fill-rule:evenodd}</style></defs><path id="reocmmended_bg" data-name="reocmmended bg" d="M0 0h155a4 4 0 014 4v18H4a4 4 0 01-4-4V0z" fill="#E27730"/><path id="recommended" class="cls-2" d="M1524.3 1519.9a3.7 3.7 0 012.5.8 2.7 2.7 0 011 2.2 3.4 3.4 0 01-.5 1.8 2.4 2.4 0 01-1.5 1v.1a2 2 0 01.8.3 1.9 1.9 0 01.5.6 2 2 0 01.2.7 6.7 6.7 0 01.2.8v.8a7.9 7.9 0 00.1.9 5 5 0 00.2.7 2 2 0 00.4.7h-1.7a1 1 0 01-.3-.5 4.5 4.5 0 010-.7v-.8a5.8 5.8 0 00-.2-.8l-.1-.8a1.7 1.7 0 00-.3-.7 1.4 1.4 0 00-.6-.4 2 2 0 00-.9-.2h-3.7v5h-1.5v-11.5h5.4zm.3 5.2a2.2 2.2 0 00.8-.3 1.7 1.7 0 00.6-.7 2.2 2.2 0 00.2-1 2 2 0 00-.5-1.4 2 2 0 00-1.5-.5h-3.8v4h3.2a5.5 5.5 0 001-.1zm13.6-5.2v1.3h-6.4v3.6h6v1.3h-6v4h6.4v1.2h-8V1520h8zm9.1 1.6a3.6 3.6 0 00-2-.6 3.7 3.7 0 00-1.8.4 3.6 3.6 0 00-1.2 1 4.6 4.6 0 00-.7 1.5 7 7 0 00-.2 1.7 7.9 7.9 0 00.2 1.9 4.5 4.5 0 00.7 1.5 3.6 3.6 0 001.2 1 3.7 3.7 0 001.8.4 3.4 3.4 0 001.3-.2 3 3 0 001.7-1.8 4.3 4.3 0 00.3-1.3h1.5a5.2 5.2 0 01-1.5 3.4 4.8 4.8 0 01-3.4 1.2 5.4 5.4 0 01-2.4-.5 4.6 4.6 0 01-1.6-1.2 5.7 5.7 0 01-1-2 8 8 0 01-.3-2.3 7.7 7.7 0 01.3-2.3 5.8 5.8 0 011-2 4.7 4.7 0 011.8-1.2 5.4 5.4 0 012.3-.5 5.8 5.8 0 011.7.3 4.5 4.5 0 011.4.7 4.1 4.1 0 011 1.1 4 4 0 01.6 1.6h-1.5a2.8 2.8 0 00-1.2-1.8zm6.2 5.8a4.7 4.7 0 00.7 1.5 3.8 3.8 0 001.2 1.1 4.2 4.2 0 003.6 0 3.8 3.8 0 001.2-1 4.7 4.7 0 00.7-1.6 6.4 6.4 0 000-3.4 4.7 4.7 0 00-.7-1.5 3.8 3.8 0 00-1.2-1.1 4.2 4.2 0 00-3.6 0 3.8 3.8 0 00-1.2 1 4.7 4.7 0 00-.7 1.6 6.4 6.4 0 000 3.4zm-1.4-4a5.6 5.6 0 011-1.9 5.1 5.1 0 011.7-1.3 6 6 0 014.8 0 5.1 5.1 0 011.7 1.3 5.6 5.6 0 011 2 7.4 7.4 0 010 4.4 5.6 5.6 0 01-1 2 5.1 5.1 0 01-1.7 1.3 6 6 0 01-4.8 0 5.1 5.1 0 01-1.7-1.3 5.6 5.6 0 01-1-2 7.4 7.4 0 010-4.5zm15-3.4l3.6 9.6 3.6-9.6h2v11.4h-1.4v-9.5l-3.6 9.5h-1.3l-3.5-9.5v9.5h-1.5V1520h2zm14.3 0l3.6 9.6 3.6-9.6h2.1v11.4h-1.4v-9.5l-3.6 9.5h-1.3l-3.6-9.5v9.5h-1.5V1520h2.1zm20.1 0v1.3h-6.4v3.6h6v1.3h-6v4h6.5v1.2h-8V1520h8zm3.9 0l6 9.2v-9.2h1.5v11.4h-1.7l-6-9.2v9.2h-1.4V1520h1.6zm14.4 10.1a5.6 5.6 0 00.6 0 3.3 3.3 0 00.9-.2 3.8 3.8 0 00.8-.4 2.8 2.8 0 00.8-.8 4.2 4.2 0 00.5-1.3 6.3 6.3 0 00.2-1.8 7.9 7.9 0 00-.2-1.8 3.4 3.4 0 00-.6-1.4 2.9 2.9 0 00-1.2-.8 4.8 4.8 0 00-1.8-.3h-2.5v8.8h2.5zm-.1-10.1a5.7 5.7 0 014 1.3 5.4 5.4 0 011.5 4.1 9.4 9.4 0 01-.4 2.6 4.7 4.7 0 01-1 1.8 4.2 4.2 0 01-1.7 1.2 6.8 6.8 0 01-2.4.4h-4V1520h4zm15.6 0v1.3h-6.4v3.6h6v1.3h-6v4h6.4v1.2h-7.9V1520h7.9zm6.3 10.1a5.6 5.6 0 00.7 0 3.3 3.3 0 00.8-.2 3.8 3.8 0 00.8-.4 2.8 2.8 0 00.8-.8 4.2 4.2 0 00.6-1.3 6.3 6.3 0 00.2-1.8 7.9 7.9 0 00-.2-1.8 3.4 3.4 0 00-.7-1.4 2.9 2.9 0 00-1.2-.8 4.8 4.8 0 00-1.7-.3h-2.6v8.8h2.5zm0-10.1a5.7 5.7 0 014 1.3 5.4 5.4 0 011.4 4.1 9.4 9.4 0 01-.3 2.6 4.7 4.7 0 01-1 1.8 4.2 4.2 0 01-1.7 1.2 6.8 6.8 0 01-2.5.4h-4V1520h4z" transform="translate(-1493 -1514)"/><path id="star" class="cls-2" d="M1504.6 1518.7l-1.8 3.6-4 .6a.9.9 0 00-.5 1.5l2.9 2.8-.7 4a.9.9 0 001.3.9l3.6-1.9 3.5 1.9a.9.9 0 001.3-1l-.7-4 2.9-2.7a.9.9 0 00-.5-1.5l-4-.6-1.8-3.6a.9.9 0 00-1.5 0z" transform="translate(-1493 -1514)"/></svg>
<svg id="recommended_-_orange_overlay" data-name="recommended - orange overlay" xmlns="http://www.w3.org/2000/svg" width="159" height="22"><defs><style>.cls-2{fill:#fff;fill-rule:evenodd}</style></defs><path id="reocmmended_bg" data-name="reocmmended bg" d="M0 0h155a4 4 0 0 1 4 4v18H4a4 4 0 0 1-4-4V0z" fill="#E27730"/><path id="recommended" class="cls-2" d="M1524.3 1519.9a3.7 3.7 0 0 1 2.5.8 2.7 2.7 0 0 1 1 2.2 3.4 3.4 0 0 1-.5 1.8 2.4 2.4 0 0 1-1.5 1v.1a2 2 0 0 1 .8.3 1.9 1.9 0 0 1 .5.6 2 2 0 0 1 .2.7 6.7 6.7 0 0 1 .2.8v.8a7.9 7.9 0 0 0 .1.9 5 5 0 0 0 .2.7 2 2 0 0 0 .4.7h-1.7a1 1 0 0 1-.3-.5 4.5 4.5 0 0 1 0-.7v-.8a5.8 5.8 0 0 0-.2-.8l-.1-.8a1.7 1.7 0 0 0-.3-.7 1.4 1.4 0 0 0-.6-.4 2 2 0 0 0-.9-.2h-3.7v5h-1.5v-11.5h5.4zm.3 5.2a2.2 2.2 0 0 0 .8-.3 1.7 1.7 0 0 0 .6-.7 2.2 2.2 0 0 0 .2-1 2 2 0 0 0-.5-1.4 2 2 0 0 0-1.5-.5h-3.8v4h3.2a5.5 5.5 0 0 0 1-.1zm13.6-5.2v1.3h-6.4v3.6h6v1.3h-6v4h6.4v1.2h-8V1520h8zm9.1 1.6a3.6 3.6 0 0 0-2-.6 3.7 3.7 0 0 0-1.8.4 3.6 3.6 0 0 0-1.2 1 4.6 4.6 0 0 0-.7 1.5 7 7 0 0 0-.2 1.7 7.9 7.9 0 0 0 .2 1.9 4.5 4.5 0 0 0 .7 1.5 3.6 3.6 0 0 0 1.2 1 3.7 3.7 0 0 0 1.8.4 3.4 3.4 0 0 0 1.3-.2 3 3 0 0 0 1.7-1.8 4.3 4.3 0 0 0 .3-1.3h1.5a5.2 5.2 0 0 1-1.5 3.4 4.8 4.8 0 0 1-3.4 1.2 5.4 5.4 0 0 1-2.4-.5 4.6 4.6 0 0 1-1.6-1.2 5.7 5.7 0 0 1-1-2 8 8 0 0 1-.3-2.3 7.7 7.7 0 0 1 .3-2.3 5.8 5.8 0 0 1 1-2 4.7 4.7 0 0 1 1.8-1.2 5.4 5.4 0 0 1 2.3-.5 5.8 5.8 0 0 1 1.7.3 4.5 4.5 0 0 1 1.4.7 4.1 4.1 0 0 1 1 1.1 4 4 0 0 1 .6 1.6h-1.5a2.8 2.8 0 0 0-1.2-1.8zm6.2 5.8a4.7 4.7 0 0 0 .7 1.5 3.8 3.8 0 0 0 1.2 1.1 4.2 4.2 0 0 0 3.6 0 3.8 3.8 0 0 0 1.2-1 4.7 4.7 0 0 0 .7-1.6 6.4 6.4 0 0 0 0-3.4 4.7 4.7 0 0 0-.7-1.5 3.8 3.8 0 0 0-1.2-1.1 4.2 4.2 0 0 0-3.6 0 3.8 3.8 0 0 0-1.2 1 4.7 4.7 0 0 0-.7 1.6 6.4 6.4 0 0 0 0 3.4zm-1.4-4a5.6 5.6 0 0 1 1-1.9 5.1 5.1 0 0 1 1.7-1.3 6 6 0 0 1 4.8 0 5.1 5.1 0 0 1 1.7 1.3 5.6 5.6 0 0 1 1 2 7.4 7.4 0 0 1 0 4.4 5.6 5.6 0 0 1-1 2 5.1 5.1 0 0 1-1.7 1.3 6 6 0 0 1-4.8 0 5.1 5.1 0 0 1-1.7-1.3 5.6 5.6 0 0 1-1-2 7.4 7.4 0 0 1 0-4.5zm15-3.4 3.6 9.6 3.6-9.6h2v11.4h-1.4v-9.5l-3.6 9.5h-1.3l-3.5-9.5v9.5h-1.5V1520h2zm14.3 0 3.6 9.6 3.6-9.6h2.1v11.4h-1.4v-9.5l-3.6 9.5h-1.3l-3.6-9.5v9.5h-1.5V1520h2.1zm20.1 0v1.3h-6.4v3.6h6v1.3h-6v4h6.5v1.2h-8V1520h8zm3.9 0 6 9.2v-9.2h1.5v11.4h-1.7l-6-9.2v9.2h-1.4V1520h1.6zm14.4 10.1a5.6 5.6 0 0 0 .6 0 3.3 3.3 0 0 0 .9-.2 3.8 3.8 0 0 0 .8-.4 2.8 2.8 0 0 0 .8-.8 4.2 4.2 0 0 0 .5-1.3 6.3 6.3 0 0 0 .2-1.8 7.9 7.9 0 0 0-.2-1.8 3.4 3.4 0 0 0-.6-1.4 2.9 2.9 0 0 0-1.2-.8 4.8 4.8 0 0 0-1.8-.3h-2.5v8.8h2.5zm-.1-10.1a5.7 5.7 0 0 1 4 1.3 5.4 5.4 0 0 1 1.5 4.1 9.4 9.4 0 0 1-.4 2.6 4.7 4.7 0 0 1-1 1.8 4.2 4.2 0 0 1-1.7 1.2 6.8 6.8 0 0 1-2.4.4h-4V1520h4zm15.6 0v1.3h-6.4v3.6h6v1.3h-6v4h6.4v1.2h-7.9V1520h7.9zm6.3 10.1a5.6 5.6 0 0 0 .7 0 3.3 3.3 0 0 0 .8-.2 3.8 3.8 0 0 0 .8-.4 2.8 2.8 0 0 0 .8-.8 4.2 4.2 0 0 0 .6-1.3 6.3 6.3 0 0 0 .2-1.8 7.9 7.9 0 0 0-.2-1.8 3.4 3.4 0 0 0-.7-1.4 2.9 2.9 0 0 0-1.2-.8 4.8 4.8 0 0 0-1.7-.3h-2.6v8.8h2.5zm0-10.1a5.7 5.7 0 0 1 4 1.3 5.4 5.4 0 0 1 1.4 4.1 9.4 9.4 0 0 1-.3 2.6 4.7 4.7 0 0 1-1 1.8 4.2 4.2 0 0 1-1.7 1.2 6.8 6.8 0 0 1-2.5.4h-4V1520h4z" transform="translate(-1493 -1514)"/><path id="star" class="cls-2" d="m1504.6 1518.7-1.8 3.6-4 .6a.9.9 0 0 0-.5 1.5l2.9 2.8-.7 4a.9.9 0 0 0 1.3.9l3.6-1.9 3.5 1.9a.9.9 0 0 0 1.3-1l-.7-4 2.9-2.7a.9.9 0 0 0-.5-1.5l-4-.6-1.8-3.6a.9.9 0 0 0-1.5 0z" transform="translate(-1493 -1514)"/></svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -278,6 +278,12 @@ WPMailSMTP.Admin.Settings = WPMailSMTP.Admin.Settings || ( function( document, w
app.education.gmailOneClickSetupUpgrade();
} );
$( '#wp-mail-smtp-setting-misc-rate_limit-lite' ).on( 'click', function( e ) {
e.preventDefault();
app.education.rateLimitUpgrade();
} );
},
education: {
@@ -301,6 +307,15 @@ WPMailSMTP.Admin.Settings = WPMailSMTP.Admin.Settings || ( function( document, w
);
},
rateLimitUpgrade: function() {
app.education.upgradeModal(
wp_mail_smtp.education.rate_limit.upgrade_title,
wp_mail_smtp.education.rate_limit.upgrade_content,
'rate-limit-setting'
);
},
upgradeModal: function( title, content, upgradeUrlUtmContent ) {
$.alert( {

File diff suppressed because one or more lines are too long

View File

@@ -250,6 +250,8 @@ var WPMailSmtpDebugEvents = window.WPMailSmtpDebugEvents || ( function( document
popup.setTitle( response.data.title );
popup.setContent( response.data.content );
} else {
popup.setIcon( app.getModalIcon( 'exclamation-circle-regular-red' ) );
popup.setType( 'red' );
popup.setContent( response.data );
}
} ).fail( function() {

View File

@@ -1 +1 @@
"use strict";var WPMailSmtpDebugEvents=window.WPMailSmtpDebugEvents||function(s){var n={$debugEventsPage:s(".wp-mail-smtp-tab-tools-debug-events"),$dateFlatpickr:s(".wp-mail-smtp-filter-date-selector")},i={init:function(){s(i.ready)},ready:function(){i.initDateRange(),i.events();var e=new URLSearchParams(location.search);e.has("debug_event_id")&&i.openDebugEventPopup(e.get("debug_event_id"))},events:function(){n.$debugEventsPage.on("click","#wp-mail-smtp-reset-filter .reset",i.resetFilter),n.$debugEventsPage.on("click","#wp-mail-smtp-delete-all-debug-events-button",i.deleteAllDebugEvents),n.$debugEventsPage.on("click",".js-wp-mail-smtp-debug-event-preview",i.eventClicked)},initDateRange:function(){var e=wp_mail_smtp_tools_debug_events.lang_code,t={rangeSeparator:" - "};"undefined"!==flatpickr&&Object.prototype.hasOwnProperty.call(flatpickr,"l10ns")&&Object.prototype.hasOwnProperty.call(flatpickr.l10ns,e)&&((t=flatpickr.l10ns[e]).rangeSeparator=" - "),n.$dateFlatpickr.flatpickr({altInput:!0,altFormat:"M j, Y",dateFormat:"Y-m-d",locale:t,mode:"range"})},resetFilter:function(){var e=s(this).parents("form");e.find(s(this).data("scope")).find("input,select").each(function(){var e=s(this);i.isIgnoredForResetInput(e)||i.resetInput(e)}),e.submit()},resetInput:function(e){switch(e.prop("tagName").toLowerCase()){case"input":e.val("");break;case"select":e.val(e.find("option").first().val())}},isIgnoredForResetInput:function(e){return-1!==["submit","hidden"].indexOf((e.attr("type")||"").toLowerCase())&&!e.hasClass("flatpickr-input")},deleteAllDebugEvents:function(e){e.preventDefault();var t=s(e.target);s.confirm({backgroundDismiss:!1,escapeKey:!0,animationBounce:1,closeIcon:!0,type:"orange",icon:i.getModalIcon("exclamation-circle-solid-orange"),title:wp_mail_smtp_tools_debug_events.texts.notice_title,content:wp_mail_smtp_tools_debug_events.texts.delete_all_notice,buttons:{confirm:{text:wp_mail_smtp_tools_debug_events.texts.yes,btnClass:"btn-confirm",keys:["enter"],action:function(){i.executeAllDebugEventsDeletion(t)}},cancel:{text:wp_mail_smtp_tools_debug_events.texts.cancel,btnClass:"btn-cancel"}}})},eventClicked:function(e){e.preventDefault(),i.openDebugEventPopup(s(this).data("event-id"))},openDebugEventPopup:function(e){var e={action:"wp_mail_smtp_debug_event_preview",id:e,nonce:s("#wp-mail-smtp-debug-events-nonce",n.$debugEventsPage).val()},t=s.alert({backgroundDismiss:!0,escapeKey:!0,animationBounce:1,type:"blue",icon:i.getModalIcon("info-circle-blue"),title:!1,content:wp_mail_smtp_tools_debug_events.loader,boxWidth:"550px",buttons:{confirm:{text:wp_mail_smtp_tools_debug_events.texts.close,btnClass:"btn-confirm",keys:["enter"]}},onOpenBefore:function(){this.$contentPane.addClass("no-scroll")}});s.post(ajaxurl,e,function(e){e.success?(t.setTitle(e.data.title),t.setContent(e.data.content)):t.setContent(e.data)}).fail(function(){t.setContent(wp_mail_smtp_tools_debug_events.texts.error_occurred)})},executeAllDebugEventsDeletion:function(o){o.prop("disabled",!0);var e={action:"wp_mail_smtp_delete_all_debug_events",nonce:s("#wp-mail-smtp-debug-events-nonce",n.$debugEventsPage).val()};s.post(ajaxurl,e,function(e){var t,n,a,s=e.data;e.success?(t="check-circle-solid-green",n="green",a=function(){return location.reload(),!1}):(t="exclamation-circle-regular-red",n="red"),i.displayModal(s,t,n,a),o.prop("disabled",!1)}).fail(function(){i.displayModal(wp_mail_smtp_tools_debug_events.texts.error_occurred,"exclamation-circle-regular-red","red"),o.prop("disabled",!1)})},displayModal:function(e,t,n,a){a=a||function(){},s.alert({backgroundDismiss:!0,escapeKey:!0,animationBounce:1,type:n=n||"default",closeIcon:!0,title:!1,icon:t?i.getModalIcon(t):"",content:e,buttons:{confirm:{text:wp_mail_smtp_tools_debug_events.texts.ok,btnClass:"wp-mail-smtp-btn wp-mail-smtp-btn-md",keys:["enter"],action:a}}})},getModalIcon:function(e){return'"></i><img src="'+wp_mail_smtp_tools_debug_events.plugin_url+"/assets/images/font-awesome/"+e+'.svg" style="width: 40px; height: 40px;" alt=""><i class="'}};return i}((document,window,jQuery));WPMailSmtpDebugEvents.init();
"use strict";var WPMailSmtpDebugEvents=window.WPMailSmtpDebugEvents||function(s){var n={$debugEventsPage:s(".wp-mail-smtp-tab-tools-debug-events"),$dateFlatpickr:s(".wp-mail-smtp-filter-date-selector")},i={init:function(){s(i.ready)},ready:function(){i.initDateRange(),i.events();var e=new URLSearchParams(location.search);e.has("debug_event_id")&&i.openDebugEventPopup(e.get("debug_event_id"))},events:function(){n.$debugEventsPage.on("click","#wp-mail-smtp-reset-filter .reset",i.resetFilter),n.$debugEventsPage.on("click","#wp-mail-smtp-delete-all-debug-events-button",i.deleteAllDebugEvents),n.$debugEventsPage.on("click",".js-wp-mail-smtp-debug-event-preview",i.eventClicked)},initDateRange:function(){var e=wp_mail_smtp_tools_debug_events.lang_code,t={rangeSeparator:" - "};"undefined"!==flatpickr&&Object.prototype.hasOwnProperty.call(flatpickr,"l10ns")&&Object.prototype.hasOwnProperty.call(flatpickr.l10ns,e)&&((t=flatpickr.l10ns[e]).rangeSeparator=" - "),n.$dateFlatpickr.flatpickr({altInput:!0,altFormat:"M j, Y",dateFormat:"Y-m-d",locale:t,mode:"range"})},resetFilter:function(){var e=s(this).parents("form");e.find(s(this).data("scope")).find("input,select").each(function(){var e=s(this);i.isIgnoredForResetInput(e)||i.resetInput(e)}),e.submit()},resetInput:function(e){switch(e.prop("tagName").toLowerCase()){case"input":e.val("");break;case"select":e.val(e.find("option").first().val())}},isIgnoredForResetInput:function(e){return-1!==["submit","hidden"].indexOf((e.attr("type")||"").toLowerCase())&&!e.hasClass("flatpickr-input")},deleteAllDebugEvents:function(e){e.preventDefault();var t=s(e.target);s.confirm({backgroundDismiss:!1,escapeKey:!0,animationBounce:1,closeIcon:!0,type:"orange",icon:i.getModalIcon("exclamation-circle-solid-orange"),title:wp_mail_smtp_tools_debug_events.texts.notice_title,content:wp_mail_smtp_tools_debug_events.texts.delete_all_notice,buttons:{confirm:{text:wp_mail_smtp_tools_debug_events.texts.yes,btnClass:"btn-confirm",keys:["enter"],action:function(){i.executeAllDebugEventsDeletion(t)}},cancel:{text:wp_mail_smtp_tools_debug_events.texts.cancel,btnClass:"btn-cancel"}}})},eventClicked:function(e){e.preventDefault(),i.openDebugEventPopup(s(this).data("event-id"))},openDebugEventPopup:function(e){var e={action:"wp_mail_smtp_debug_event_preview",id:e,nonce:s("#wp-mail-smtp-debug-events-nonce",n.$debugEventsPage).val()},t=s.alert({backgroundDismiss:!0,escapeKey:!0,animationBounce:1,type:"blue",icon:i.getModalIcon("info-circle-blue"),title:!1,content:wp_mail_smtp_tools_debug_events.loader,boxWidth:"550px",buttons:{confirm:{text:wp_mail_smtp_tools_debug_events.texts.close,btnClass:"btn-confirm",keys:["enter"]}},onOpenBefore:function(){this.$contentPane.addClass("no-scroll")}});s.post(ajaxurl,e,function(e){e.success?(t.setTitle(e.data.title),t.setContent(e.data.content)):(t.setIcon(i.getModalIcon("exclamation-circle-regular-red")),t.setType("red"),t.setContent(e.data))}).fail(function(){t.setContent(wp_mail_smtp_tools_debug_events.texts.error_occurred)})},executeAllDebugEventsDeletion:function(o){o.prop("disabled",!0);var e={action:"wp_mail_smtp_delete_all_debug_events",nonce:s("#wp-mail-smtp-debug-events-nonce",n.$debugEventsPage).val()};s.post(ajaxurl,e,function(e){var t,n,a,s=e.data;e.success?(t="check-circle-solid-green",n="green",a=function(){return location.reload(),!1}):(t="exclamation-circle-regular-red",n="red"),i.displayModal(s,t,n,a),o.prop("disabled",!1)}).fail(function(){i.displayModal(wp_mail_smtp_tools_debug_events.texts.error_occurred,"exclamation-circle-regular-red","red"),o.prop("disabled",!1)})},displayModal:function(e,t,n,a){a=a||function(){},s.alert({backgroundDismiss:!0,escapeKey:!0,animationBounce:1,type:n=n||"default",closeIcon:!0,title:!1,icon:t?i.getModalIcon(t):"",content:e,buttons:{confirm:{text:wp_mail_smtp_tools_debug_events.texts.ok,btnClass:"wp-mail-smtp-btn wp-mail-smtp-btn-md",keys:["enter"],action:a}}})},getModalIcon:function(e){return'"></i><img src="'+wp_mail_smtp_tools_debug_events.plugin_url+"/assets/images/font-awesome/"+e+'.svg" style="width: 40px; height: 40px;" alt=""><i class="'}};return i}((document,window,jQuery));WPMailSmtpDebugEvents.init();

View File

@@ -151,12 +151,12 @@ $generated_i18n_strings = array(
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:15
__( 'Make sure you\'re getting the most out of WP Mail SMTP. Just check all of the features you\'d like to use, and we\'ll go ahead and enable those for you.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepChooseMailer.vue:16
// Reference: src/modules/setup-wizard/components/steps/WizardStepConfigureEmailLogs.vue:15
// Reference: src/modules/setup-wizard/components/steps/WizardStepHelpImprove.vue:16
__( 'Save and Continue', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepChooseMailer.vue:17
// Reference: src/modules/setup-wizard/components/steps/WizardStepConfigureEmailLogs.vue:16
// Reference: src/modules/setup-wizard/components/steps/WizardStepHelpImprove.vue:18
// Reference: src/modules/setup-wizard/components/steps/WizardStepImport.vue:16
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:18
__( 'Previous Step', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:214
@@ -180,22 +180,22 @@ $generated_i18n_strings = array(
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:23
__( 'Create beautiful contact forms with just a few clicks.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:24
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:23
__( 'Detailed Email Logs', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:25
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:31
__( 'Keep records of every email that\'s sent out from your website.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:26
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:34
__( 'Instant Email Alerts', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:27
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:35
__( 'Get notifications via email, SMS, Slack, or webhook when emails fail to send.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:28
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:36
__( 'Complete Email Reports', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:29
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:37
__( 'See the delivery status, track opens and clicks, and create deliverability graphs.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:30
@@ -204,16 +204,16 @@ $generated_i18n_strings = array(
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:31
__( 'Get statistics about emails you\'ve sent.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:32
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:22
__( 'Manage Default Notifications', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:33
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:32
__( 'Control which email notifications your WordPress site sends.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:34
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:21
__( 'Multisite Network Settings', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepPluginFeatures.vue:35
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:33
__( 'Save time with powerful WordPress Multisite controls.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:14
@@ -238,34 +238,38 @@ $generated_i18n_strings = array(
__( 'Define which endpoint you want to use for sending messages. If you are operating under EU laws, you may be required to use EU region. %1$sMore information%2$s on Mailgun.com.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:21
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Smtp.vue:25
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:23
__( 'From Name', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:22
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Smtp.vue:26
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:24
__( 'Force From Name', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:23
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Smtp.vue:27
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:25
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Outlook.vue:23
__( 'From Email', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:25
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Smtp.vue:28
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:26
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Outlook.vue:25
__( 'Force From Email', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:24
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Smtp.vue:32
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:27
__( 'If enabled, the From Name setting above will be used for all emails, ignoring values set by other plugins.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:26
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Smtp.vue:33
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:28
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Outlook.vue:26
__( 'If enabled, the From Email setting above will be used for all emails, ignoring values set by other plugins.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:27
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Smtp.vue:29
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:29
__( 'The name that emails are sent from.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Smtp.vue:30
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:30
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Outlook.vue:24
__( 'The email address that emails are sent from.', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Mailgun.vue:31
@@ -315,6 +319,9 @@ $generated_i18n_strings = array(
__( 'Below, we\'ll show you all of the settings required to set up this mailer.', 'wp-mail-smtp' ),
// Reference: src/modules/settings/components/input/SettingsInputLongCheckbox.vue:20
// Reference: src/modules/settings/components/input/SettingsInputNumber.vue:64
// Reference: src/modules/settings/components/input/SettingsInputSelect.vue:38
// Reference: src/modules/settings/components/input/SettingsInputSwitch.vue:39
// Reference: src/modules/settings/components/input/SettingsInputText.vue:69
__( 'This setting is already configured with the WP Mail SMTP constant. To change it, please edit or remove the <code></code> constant in your <code>wp-config.php</code> file.', 'wp-mail-smtp' ),
@@ -360,6 +367,8 @@ $generated_i18n_strings = array(
// Reference: src/modules/setup-wizard/components/steps/WizardStepImport.vue:14
__( 'Import Data and Continue', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepHelpImprove.vue:17
// Reference: src/modules/setup-wizard/components/steps/WizardStepImport.vue:15
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:17
__( 'Skip this Step', 'wp-mail-smtp' ),
@@ -459,6 +468,7 @@ $generated_i18n_strings = array(
__( 'Redirect URI', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:20
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Outlook.vue:18
__( 'Authorization', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Zoho.vue:26
@@ -706,12 +716,14 @@ $generated_i18n_strings = array(
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:27
__( 'Enter your license key below to unlock plugin updates!', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:28
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:44
__( 'Verify License Key', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:28
__( 'Connect', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:29
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:45
__( 'The License Key format is incorrect. Please enter a valid key and try again.', 'wp-mail-smtp' ),
@@ -721,15 +733,19 @@ $generated_i18n_strings = array(
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:38
__( 'Pro badge', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:39
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:43
__( 'License key input', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:40
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:42
__( 'Paste your license key here', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:76
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:141
__( 'Successful Verification!', 'wp-mail-smtp' ),
// Reference: src/modules/setup-wizard/components/steps/WizardStepLicense.vue:86
// Reference: src/modules/setup-wizard/components/steps/configure-mailer/Gmail.vue:151
__( 'Verification Error!', 'wp-mail-smtp' ),

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,9 +1,9 @@
=== WP Mail SMTP by WPForms - The Most Popular SMTP and Email Log Plugin ===
Contributors: wpforms, jaredatch, smub, slaFFik, capuderg
Tags: smtp, wp mail smtp, wordpress smtp, gmail smtp, sendgrid smtp, mailgun smtp, mail, mailer, phpmailer, wp_mail, email, mailgun, sengrid, gmail, sendinblue, brevo, wp smtp
Requires at least: 5.2
Tags: smtp, email, gmail, outlook, email logs
Requires at least: 5.5
Tested up to: 6.4
Stable tag: 3.11.1
Stable tag: 4.0.1
Requires PHP: 7.2
Make email delivery easy for WordPress. Connect with SMTP, Gmail, Outlook, SendGrid, Mailgun, SES, Zoho, + more. Rated #1 WordPress SMTP Email plugin.
@@ -12,41 +12,41 @@ Make email delivery easy for WordPress. Connect with SMTP, Gmail, Outlook, SendG
### WordPress Mail SMTP Plugin
Having problems with your WordPress site not sending emails? You're not alone. Over 3 million websites use WP Mail SMTP to send their emails reliably.
Is your WordPress site not sending emails? You're not alone. 3+ million websites use WP Mail SMTP to send emails reliably.
Our goal is to make email deliverability easy and reliable. We want to ensure your emails reach the inbox.
Our goal is to make email deliverability easy so that your emails always reach the inbox.
WP Mail SMTP fixes your email deliverability by reconfiguring WordPress to use a proper SMTP provider when sending emails.
WP Mail SMTP fixes your email deliverability issues by reconfiguring WordPress to use a proper SMTP provider when sending emails.
Best of all, our easy-to-use Setup Wizard and detailed documentation guide you through the process.
WP Mail SMTP is free and has everything you need to reliably send your WordPress emails!
<a href="https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme" rel="friend">**WP Mail SMTP Pro**</a> unlocks even more powerful features like email logging, advanced email reporting and stats, backup connections, email alerts, smart conditional routing, and much more.
[**WP Mail SMTP Pro**](https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) unlocks even more powerful features like email logging, advanced email reporting and stats, backup connections, email alerts, smart conditional routing, and much more.
https://www.youtube.com/watch?v=QYJuPyiKKZc
#### What is SMTP?
SMTP (Simple Mail Transfer Protocol) is an industry standard for sending emails. Proper SMTP configuration helps increase email deliverability by using authentication.
SMTP (Simple Mail Transfer Protocol) is an industry-standard for sending emails. Proper SMTP configuration helps increase email deliverability by adding authentication to the emails sent from your site.
Popular email clients like Gmail, Yahoo, Office 365, and Zoho are in a constant battle with email spammers. One of the things they look at is if an email is originating from the location it claims to be originating from.
Popular email clients like Gmail, Yahoo, Office 365, and Zoho are in a constant battle with email spammers, so they check whether emails are originating from a genuine sender. If the proper authentication isn't there, emails either go in the SPAM folder or, worse, disappear.
If the proper authentication isn't there, then emails either go in the SPAM folder or worst, don't get delivered at all.
This is a problem for a lot of WordPress sites. By default, WordPress uses the PHP mail function to send emails generated by WordPress or any contact form plugin like [WPForms](https://wpforms.com/?utm_source=wprepo-wpmailsmtp&utm_medium=link&utm_campaign=liteplugin&utm_content=readme).
This is a problem for a lot of WordPress sites because by default, WordPress uses the PHP mail function to send emails generated by WordPress or any contact form plugin like <a href="https://wpforms.com/" rel="friend">WPForms</a>.
But most [WordPress hosting companies](https://www.wpbeginner.com/wordpress-hosting/) don't have their servers properly configured for sending PHP emails.
The issue is that most <a href="https://www.wpbeginner.com/wordpress-hosting/" rel="friend">WordPress hosting companies</a> don't have their servers properly configured for sending PHP emails.
The combination of two causes your WordPress emails to not get delivered.
This is why WordPress emails arent delivered.
#### How does WP Mail SMTP work?
WP Mail SMTP plugin easily resolves email delivery problems by improving and changing how your WordPress site sends email. We reconfigure the `wp_mail()` function to either use proper SMTP host credentials or leverage a built-in SMTP mail provider.
WP Mail SMTP plugin easily resolves email delivery problems by changing the way your WordPress site sends email. We reconfigure the `wp_mail()` function to use proper SMTP host credentials or an SMTP mail provider.
When using one of our built-in SMTP mail provider integrations (recommended), emails are sent using the provider's direct API. This means even if your web host is blocking SMTP ports, your emails still send successfully.
With our built-in SMTP mail provider integrations (recommended), emails are sent using the provider's direct API. Even if your web host is blocking SMTP ports, your emails will still be sent successfully.
This helps you fix all <a href="https://wpmailsmtp.com/wordpress-not-sending-email/" rel="friend">WordPress not sending email</a> issues.
This helps you fix all [WordPress not sending email](https://wpmailsmtp.com/wordpress-not-sending-email/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) issues.
WP Mail SMTP plugin includes many different SMTP setup options:
WP Mail SMTP plugin includes many different SMTP mailers:
1. SendLayer <strong>(#1 Recommended)</strong>
2. SMTP.com <strong>(Recommended)</strong>
@@ -56,25 +56,163 @@ WP Mail SMTP plugin includes many different SMTP setup options:
6. Postmark SMTP
7. SparkPost SMTP
8. Gmail SMTP (Gmail, Google Workspace, G Suite)
9. Microsoft SMTP (Outlook.com and Office 365) <a href="https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme" rel="friend">[Pro]</a>
10. Amazon SES SMTP <a href="https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme" rel="friend">[Pro]</a>
11. Zoho Mail SMTP <a href="https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme" rel="friend">[Pro]</a>
12. All Other SMTP
9. Microsoft SMTP (Outlook.com and Office 365) [[Pro]](https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme)
10. Amazon SES SMTP [[Pro]](https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme)
11. Zoho Mail SMTP [[Pro]](https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme)
12. Other SMTP
For most options, you can specify the "from name" and "email address" for outgoing emails.
For most options, you can specify the "from name" and "email address" for outgoing emails too.
Instead of having users use different SMTP plugins and workflows for different SMTP providers, we decided to bring it all in one. This is what makes WP Mail SMTP, the best SMTP solution for WordPress.
All of these powerful features make WP Mail SMTP the best SMTP solution for WordPress.
If you don't know which mailer to choose, see our [Complete Guide to WP Mail SMTP Mailers](https://wpmailsmtp.com/docs/a-complete-guide-to-wp-mail-smtp-mailers/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme).
#### SendLayer
SendLayer is our #1 recommended transactional email service.
Its affordable pricing and simple setup make it the perfect choice for sending emails from WordPress. It also has open and click tracking and email logs.
SendLayer is reliable, fast, and easy to set up. You can send hundreds of emails for free when you sign up for a trial.
Read our [SendLayer documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-sendlayer-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### SMTP.COM
SMTP.com is a recommended transactional email service.
With over 22 years of email delivery expertise, SMTP.com has a reputation for being one of the most reliable senders on the internet.
You can start sending emails in minutes and benefit from 50,000 free emails in your first 30 days.
Read our [SMTP.com documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-smtp-com-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### Brevo (formerly Sendinblue) SMTP
Brevo is a recommended transactional email service. It serves 80,000+ companies worldwide.
Brevo is reliable, fast, and gives you 300 free emails per day.
Read our [Brevo documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-sendinblue-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
### WP Mail SMTP PRO
In addition to native Microsoft, Amazon SES, and Zoho Mail integrations, WP Mail SMTP Pro provides access to many other powerful features.
[Click here to purchase WP Mail SMTP Pro now!](https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme)
### Email Log
Email logging is a powerful feature that keeps a record of all sent emails in WordPress. Email logging helps you to archive, audit, resend, or test email delivery and formatting.
Our [WordPress email logs](https://wpmailsmtp.com/log-emails-wordpress/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) also include:
#### Email Log Details
Our email logs provide a complete history of all emails sent from WordPress. View the subject, sender, recipients, content, headers, open and click rates, delivery status, source plugin, and more!
#### Resend Emails
Resend emails individually or in bulk, whether they failed or were delivered successfully. You can also forward important emails to an alternative email address.
#### And many more Email Log Features
Store all email attachments, export email logs, print emails, see delivery status, and more.
### Email Reports
Review weekly sent and failed emails in a dashboard chart.
Email reports make it easy to track deliverability and engagement. Open rates and click-through rates are grouped by subject line, making it easy to see the performance of your campaigns or notifications.
#### Weekly Email Summary
Get statistics about WordPress emails, including how many emails are being sent and which ones are being opened and clicked. The Summary also shows you deliverability statistics without the need to log in to WordPress to check them.
#### Track Email Opens and Clicks
[View open and click stats for WordPress emails](https://wpmailsmtp.com/enable-wordpress-email-tracking/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme), grouped by subject line in your Email Report.
### Email Alerts
If your emails stop sending, get notified instantly via Slack, SMS/ Twilio, webhooks, or email (via secure API).
In combination with our email logging and resending features, Email Alerts ensure that no important email will ever be lost.
### Backup Connection
Configure an extra connection that kicks in if your primary connection fails. WP Mail SMTP automatically detects connection issues and automatically switches to the backup mailer. It will also automatically retry emails that failed.
### Smart Conditional Routing
Create criteria to send different types of emails using different mailers. Filter by the contents of the email Subject or Message, From or To addresses, the plugin that generated the email, and more.
This allows you to mix transactional and marketing providers to improve deliverability.
### Rate Limiting
Control the number of emails your WordPress site sends in a specific amount of time so you stay within your SMTP providers rate limits.
WP Mail SMTP allows you to specify the maximum number of emails that will be sent every minute, hour, day, week, or month and automatically queues emails to stay within those limits.
### Optimized Email Sending
Are emails slowing down your site? Let WP Mail SMTP queue your emails for better performance.
With optimized sending, emails are queued in the background and sent when your server has sufficient resources, avoiding bottlenecks that can slow down your site.
### Manage WordPress Emails and Notifications
Control the default notifications WordPress sends. Use a simple switch to disable specific types of notifications if you dont want to receive them.
### WordPress Multisite
#### WordPress Multisite Network Settings
For users running a multisite network, save time with a centralized location to easily configure your SMTP settings for all sites.
#### Manage Multisite Email Logs Easily
Network Admins can view and manage email logs for subsites with easy switching and dashboard views.
### Expert Support
We provide [limited support](https://wordpress.org/support/topic/wp-mail-smtp-support-policy/) on the WordPress.org forums. World-class one-on-one email support is available to [WP Mail SMTP Pro](https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) users.
#### White Glove Setup
If youre not sure how to fix your emails, sit back and relax. Well set up WP Mail SMTP for you!
White Glove Setup includes installation, configuration in WordPress, DNS configuration, full mailer setup, and testing. White Glove Setup is available for our recommended mailers: SendLayer, Brevo, and SMTP.com.
### Credits
WP Mail SMTP plugin was originally created by Callum Macdonald. It is now owned and maintained by the team behind [WPForms](https://wpforms.com/?utm_source=wprepo-wpmailsmtp&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) - the best drag & drop form builder for WordPress.
You can try the [free version of WPForms plugin](https://wordpress.org/plugins/wpforms-lite/) to see why it's the best in the market.
== Installation ==
1. Install WP Mail SMTP by WPForms either via the WordPress.org plugin repository or by uploading the files to your server. (See instructions on [how to install a WordPress plugin](http://www.wpbeginner.com/beginners-guide/step-by-step-guide-to-install-a-wordpress-plugin-for-beginners/))
2. Activate WP Mail SMTP by WPForms.
3. Navigate to the Settings area of WP Mail SMTP in the WordPress admin.
4. Choose your SMTP option (SMTP.com, Brevo (formerly Sendinblue), Mailgun SMTP, SendGrid SMTP, Postmark, SparkPost, Gmail SMTP, or Other SMTP) and follow the instructions to set it up.
5. Need more help? Get support with [WP Mail SMTP PRO](https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme).
== Frequently Asked Questions ==
= Which email providers does WP Mail SMTP support? =
**SendLayer**
SendLayer is our #1 recommended transactional email service.
Its affordable pricing and simple setup make it the perfect choice for sending emails from WordPress. It also has open and click tracking, email logs, and email list management.
SendLayer is the best choice if you want a mailer that's reliable, fast, and easy to set up. You can send hundreds of emails for free when you sign up for a trial.
Read our <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-sendlayer-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme" rel="friend">SendLayer documentation</a> for more details.
Read our [SendLayer documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-sendlayer-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### SMTP.COM
**SMTP.COM**
SMTP.com is a recommended transactional email service.
@@ -82,9 +220,9 @@ With over 22 years of email delivery expertise, SMTP.com has been around for alm
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 <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-smtp-com-mailer-in-wp-mail-smtp" rel="friend">SMTP.com documentation</a> for more details.
Read our [SMTP.com documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-smtp-com-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### Brevo (formerly Sendinblue) SMTP
**Brevo (formerly Sendinblue) SMTP**
Brevo is a recommended transactional email service.
@@ -92,65 +230,65 @@ They serve 80,000+ growing companies around the world and send over 30 million e
Their email deliverability experts are constantly at work optimizing the reliability and speed of their SMTP infrastructure. Brevo provides users 300 free emails per day.
Read our <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-sendinblue-mailer-in-wp-mail-smtp/" rel="friend">Brevo documentation</a> for more details.
Read our [Brevo documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-sendinblue-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### Mailgun SMTP
**Mailgun SMTP**
Mailgun SMTP is a popular SMTP service provider that allows you to send large quantities of emails. They provide 5,000 free emails per month for 3 months.
WP Mail SMTP plugin offers a native integration with MailGun. All you have to do is connect your Mailgun account, and you will improve your email deliverability.
Read our <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-mailgun-mailer-in-wp-mail-smtp/" rel="friend">Mailgun documentation</a> for more details.
Read our [Mailgun documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-mailgun-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### SendGrid SMTP
**SendGrid SMTP**
SendGrid has a free SMTP plan that you can use to send up to 100 emails per day. With our native SendGrid SMTP integration, you can easily and securely set up SendGrid SMTP on your WordPress site.
Read our <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-sendgrid-mailer-in-wp-mail-smtp/" rel="friend">SendGrid documentation</a> for more details.
Read our [SendGrid documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-sendgrid-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### Postmark SMTP
**Postmark SMTP**
Send emails securely using your Postmark account with our API integration. You can sign up for a free trial without a credit card, which allows you to send up to 100 emails per month.
Read our <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-postmark-mailer-in-wp-mail-smtp/" rel="friend">Postmark documentation</a> for more details.
Read our [Postmark documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-postmark-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### SparkPost SMTP
**SparkPost SMTP**
SparkPost is a transactional email provider that's trusted by big brands and small businesses. It sends more than 4 trillion emails each year and reports 99.9% uptime. You can get started with the free test account that lets you send up to 500 emails per month.
Read our <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-sparkpost-mailer-in-wp-mail-smtp/" rel="friend">SparkPost documentation</a> for more details.
Read our [SparkPost documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-sparkpost-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### Gmail SMTP (Gmail, Google Workspace, G Suite)
**Gmail SMTP (Gmail, Google Workspace, G Suite)**
Often bloggers and small business owners don't want to use third-party SMTP services. Well you can use your Gmail or Google Workspace (also known as G Suite/Google Apps) account for SMTP emails.
This allows you to use your <a href="http://www.wpbeginner.com/beginners-guide/how-to-setup-a-professional-email-address-with-gmail-and-google-apps/" rel="friend">professional email address</a> and improve email deliverability.
This allows you to use your [professional email address](http://www.wpbeginner.com/beginners-guide/how-to-setup-a-professional-email-address-with-gmail-and-google-apps/) and improve email deliverability.
Unlike other Gmail SMTP plugins, our Gmail SMTP option uses OAuth to authenticate your Google account, keeping your login information 100% secure.
Our plugin also offers the "One-Click Setup" option, which allows you to start sending emails from your Gmail account with just a few clicks. It eliminates the need to manually configure your own Google App, which is a technical and time-consuming process.
Read our <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-gmail-mailer-in-wp-mail-smtp/" rel="friend">Gmail documentation</a> for more details.
Read our [Gmail documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-gmail-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### Microsoft SMTP (Outlook.com and Office 365)
**Microsoft SMTP (Outlook.com and Office 365)**
Many businesses use Outlook.com or Microsoft 365 to power their email. Our Microsoft mailer integration allows you to use your existing Outlook.com or Microsoft 365 account to send emails from WordPress for better deliverability.
Read our <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-outlook-mailer-in-wp-mail-smtp/" rel="friend">Outlook and Microsoft 365 documentation</a> for more details.
Read our [Outlook and Microsoft 365 documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-outlook-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### Amazon SES SMTP
**Amazon SES SMTP**
Advanced or technical users can harness the power of Amazon AWS (Amazon Web Services) with the Amazon SES mailer. With this integration, you can send a high volume of emails at a very reasonable rate.
Read our <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-amazon-ses-mailer-in-wp-mail-smtp/" rel="friend">Amazon SES documentation</a> for more details.
Read our [Amazon SES documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-amazon-ses-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### Zoho Mail SMTP
**Zoho Mail SMTP**
Send emails using your personal or business Zoho Mail account, all while keeping your login credentials safe.
Read our <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-zoho-mailer-in-wp-mail-smtp/" rel="friend">Zoho Mail documentation</a> for more details.
Read our [Zoho Mail documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-zoho-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) for more details.
#### Other SMTP
**Other SMTP**
WP Mail SMTP plugin also works with all major email services such as Gmail, Yahoo, Outlook, Microsoft Live, and any other email sending service that offers SMTP.
@@ -162,9 +300,23 @@ You can set the following options:
* Choose to use SMTP authentication or not.
* Specify an SMTP username and password.
To see recommended settings for the popular services as well as troubleshooting tips, check out our <a href="https://wpmailsmtp.com/docs/how-to-set-up-the-other-smtp-mailer-in-wp-mail-smtp/" rel="friend">SMTP documentation</a>.
To see recommended settings for the popular services as well as troubleshooting tips, check out our [SMTP documentation](https://wpmailsmtp.com/docs/how-to-set-up-the-other-smtp-mailer-in-wp-mail-smtp/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme).
#### One-Click Migration
= Can I use this plugin to send email via Gmail, G Suite, Outlook.com, Office 365, Hotmail, Yahoo, or AOL SMTP? =
Yes! We have extensive documentation that covers setting up SMTP most popular email services.
[Read our docs](https://wpmailsmtp.com/docs/a-complete-guide-to-wp-mail-smtp-mailers/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme) to see the correct SMTP settings for each service.
= Help! I need support or have an issue. =
Please read [our support policy](https://wordpress.org/support/topic/wp-mail-smtp-support-policy/) for more information.
Limited support is available for WP Mail SMTP users via WordPress.org support forums.
Email support and set up assistance is available to WP Mail SMTP Pro users.
= How can I migrate from a different SMTP plugin to WP Mail SMTP? =
Want to switch from your old SMTP plugin to WP Mail SMTP? We made it easy for you to migrate your SMTP settings in one click!
@@ -178,107 +330,7 @@ Our one-click migration tool supports all of these plugins:
- SMTP Mailer
- WP SMTP
### WP Mail SMTP PRO
In addition to native Microsoft, Amazon SES, and Zoho Mail integrations, WP Mail SMTP Pro provides access to many other powerful features and services.
<a href="https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme" rel="friend">Click here to purchase WP Mail SMTP Pro now!</a>
### Email Log
Email Logging lets you log and view all emails sent from your site. Email logs are helpful for storing emails for your records, auditing outgoing emails, and debugging during site development.
But that's just the beginning. Our powerful <a href="https://wpmailsmtp.com/log-emails-wordpress/" rel="friend">WordPress email logs</a> unlock extra tools to help you measure email engagement and improve email deliverability:
#### Email Log Details
Each Email Log entry includes a lot of useful information about the email, including the subject, sender, recipients (TO, CC and BCC), email content, email headers, open&click tracking stats, delivery status, which WordPress plugin sent the email, and more!
#### Resend Emails
You resend any email or forward it to one or more email addresses, right from your email log. From the overview page, you can also resend multiple emails in bulk. This is an awesome way to resend emails that failed or forward important emails to an alternative email address.
#### Store Email Attachments
WP Mail SMTP lets you store all of the email attachments that are sent from your WordPress site. That makes it easy to review an attachment or archive it locally.
#### Export Email Logs
Easily export your WordPress email logs to CSV, EML, or Excel. You can filter the email logs before you export and only download the data you need. This feature lets you easily create your own deliverability reports. You can also use the data in 3rd party dashboards to track deliverability along with your other website statistics.
#### Print Emails
Once you've activated email logging, any individual log file can be printed in an easy-to-read format. If you want to archive an email log digitally, it's easy to export it to a PDF document too.
### Email Reports
Email reports make it easy to track deliverability and engagement at-a-glance. Your open and click-through rates are grouped by subject line, making it easy to review the performance of campaigns or notifications. The report also displays Sent and Failed emails each week so you can spot any issues quickly. You'll also see an email report chart right in your WordPress dashboard.
#### Weekly Email Summary
Get statistics about WordPress emails sent directly into your inbox. Our weekly emails reveal how many emails are being sent from your WordPress site, and which ones are getting opens and clicks. The Summary also shows you deliverability statistics at-a-glance so you can spot any issues without logging into WordPress.
#### Track Email Opens and Clicks
Wondering if your important emails were actually opened, or if any links in the email were clicked? Our email log allows you <a href="https://wpmailsmtp.com/enable-wordpress-email-tracking/" rel="friend">view open and click tracking stats for your WordPress emails</a> and our Email Reports feature groups these stats by subject, so you can analyze their performance.
### Email Alerts
Get instantly notified about failed emails! If your site's mailer or SMTP service stops sending your emails, you'll immediately receive a notification. Choose from several helpful alert methods, including:
- Email Notifications
- Slack Notifications
- SMS/Twilio Notifications
- Webhook Notifications
In combination with Email Logging and Email Resend, Email Alerts let you ensure that no important email will ever be lost.
### Backup Connection
WP Mail SMTP Pro allows you to configure multiple mailer providers. The main configuration will be your Primary Connection, and you can set another as your Backup Connection.
If an email fails to send via your Primary Connection, WP Mail SMTP will automatically route it through your Backup Connection and try to send it again. This means fewer missed emails, even when something goes wrong.
### Smart Conditional Routing
Smart Routing enables you to send emails through different mailer providers based on custom criteria. Easily configure your Smart Routing conditions using dozens of pre-determined options, including the contents of the email Subject or Message, From or To addresses, or which plugin initiated the email, just to name a few.
Using Smart Routing lets you choose the best mailer for each type of email you send. Select a transactional mailer to send out your eCommerce order confirmations, another mailer for your newsletter and marketing emails, and more!
Selecting the best mailer for each type of email you need to send will improve your overall deliverability and make sure your emails arrive in users' inboxes.
### Manage WordPress Emails and Notifications
The Manage Notification feature gives you full control over which email notifications WordPress sends. This means you can disable different WordPress notification emails. Don't want to receive emails when new users are created? No problem, turn it off.
### WordPress Multisite
#### WordPress Multisite Network Settings
For users running a multisite network, our network settings provide a centralized location to easily configure your SMTP settings for all sites, saving you time.
#### Manage Multisite Email Logs Easily
WP Mail SMTP makes it easy for Network Admins to view and manage email logs for subsites. You can access all of your deliverability information from the Network Admin dashboard and quickly switch between subsites. That makes it easy to review email logging data for all subsites on one centralized page.
### Expert Support
We provide <a href="https://wordpress.org/support/topic/wp-mail-smtp-support-policy/">limited support</a> for the WP Mail SMTP plugin on the WordPress.org forums. Access to our world class one-on-one email support is available to <a href="https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme" rel="friend">WP Mail SMTP Pro</a> users.
#### White Glove Setup
Our White Glove Setup service is a great option that anyone can benefit from. Whether you don't have the time or maybe you feel a bit in over your head - we've got you covered.
You can sit back and relax while we set up everything for you. White glove setup includes WP Mail SMTP plugin installation and setup, configuration adjustments to your DNS for proper email domain name verification, SMTP.com or Mailgun setup, and final testing to confirm everything is passing with flying colors.
### Security
The WP Mail SMTP team takes security very seriously. Not only does the plugin follow all security best practices, but we have several options available to ensure your site is safe and secure.
- Direct SMTP mailer integrations (recommended), such as SMTP.com, Brevo (formerly Sendinblue), Mailgun, SendGrid, Postmark and SparkPost, use the official provider APIs. This means you never enter your username or password in the plugin settings and these credentials are not stored in the database. Instead, we use tokens or API keys which are much more secure.
- When using Other SMTP mailer, we provide the option to insert your password in your `wp-config.php` file, so it's not visible in your WordPress settings or saved in the database.
### Languages
= Is WP Mail SMTP available in other languages? =
We know that majority of people do not speak English, so we professionally translated WP Mail SMTP and WP Mail SMTP Pro into the following languages:
@@ -293,71 +345,24 @@ We know that majority of people do not speak English, so we professionally trans
- Russian,
- Turkish
If you have one of these languages configured in your WordPress admin area, then WP Mail SMTP's user interface will use that language as well.
= How can I increase plugin security? =
### Credits
The WP Mail SMTP team takes security very seriously. Not only does the plugin follow all security best practices, but we have several options available to ensure your site is safe and secure.
WP Mail SMTP plugin was originally created by Callum Macdonald. It is now owned and maintained by the team behind <a href="https://wpforms.com/" rel="friend">WPForms</a> - the best drag & drop form builder for WordPress.
- Direct SMTP mailer integrations (recommended), such as SendLayer, SMTP.com, Brevo (formerly Sendinblue), Mailgun, SendGrid, Postmark and SparkPost, use the official provider APIs. This means you never enter your username or password in the plugin settings and these credentials are not stored in the database. Instead, we use tokens or API keys which are much more secure.
You can try the <a href="https://wordpress.org/plugins/wpforms-lite/" rel="friend">free version of WPForms plugin</a> to see why it's the best in the market.
### What's Next
If you like our WP Mail SMTP plugin, then consider checking out our other projects:
* <a href="https://optinmonster.com/" rel="friend" title="OptinMonster">OptinMonster</a> - Get more email subscribers with the most popular conversion optimization plugin for WordPress.
* <a href="https://wpforms.com/" rel="friend" title="WPForms">WPForms</a> - #1 drag & drop online form builder for WordPress (trusted by 5 million sites).
* <a href="https://aioseo.com/" rel="friend" title="AIOSEO">AIOSEO</a> - The original WordPress SEO plugin to help you rank higher in search results (trusted by over 3 million sites).
* <a href="https://www.monsterinsights.com/" rel="friend" title="MonsterInsights">MonsterInsights</a> - See the stats that matter and grow your business with confidence. Best Google Analytics plugin for WordPress.
* <a href="https://www.seedprod.com/" rel="friend" title="SeedProd">SeedProd</a> - Create beautiful landing pages with our powerful drag & drop landing page builder.
* <a href="https://smashballoon.com/" rel="friend" title="Smash Balloon">Smash Balloon</a> - #1 social feeds plugin for WordPress - display social media content in WordPress without code.
* <a href="https://wpcode.com/" rel="friend" title="WPCode">WPCode</a> - must have WordPress code snippet management plugin to help you future-proof website customization (trusted by 1.5 million sites).
* <a href="https://duplicator.com/" rel="friend" title="Duplicator">Duplicator</a> - popular WordPress backup and migration plugin used by over 1 million websites.
* <a href="https://wpsimplepay.com/" rel="friend" title="WP Simple Pay">WP Simple Pay</a> - #1 Stripe payments plugin for WordPress. Start accepting one-time or recurring payments without a shopping cart.
* <a href="https://www.pushengage.com/" rel="friend" title="PushEngage">PushEngage</a> - Connect with visitors after they leave your website with the leading web push notification plugin.
* <a href="https://rafflepress.com/" rel="friend" title="RafflePress">RafflePress</a> - Best WordPress giveaway and contest plugin to grow traffic and social followers.
* <a href="https://trustpulse.com/" rel="friend" title="TrustPulse">TrustPulse</a> - Add real-time social proof notifications to boost your store conversions by up to 15%.
* <a href="https://searchwp.com/" rel="friend" title="SearchWP">SearchWP</a> - The most advanced custom WordPress search plugin to improve WordPress search quality.
* <a href="https://affiliatewp.com/" rel="friend" title="AffiliateWP">AffiliateWP</a> - #1 affiliate management plugin for WordPress. Add a referral program to your online store.
* <a href="https://easydigitaldownloads.com/" rel="friend" title="Easy Digital Downloads">Easy Digital Downloads</a> - The best WordPress eCommerce plugin to sell digital products (eBooks, software, music, and more).
* <a href="https://www.wpcharitable.com/" rel="friend" title="WPCharitable">WPCharitable</a> - Top-rated WordPress donation and fundraising plugin for WordPress.
Visit <a href="http://www.wpbeginner.com/" rel="friend" title="WPBeginner">WPBeginner</a> to learn from our <a href="http://www.wpbeginner.com/category/wp-tutorials/" rel="friend" title="WordPress Tutorials">WordPress Tutorials</a> and about the <a href="https://www.wpbeginner.com/category/plugins/" rel="friend" title="Best WordPress plugins">best WordPress plugins</a>.
== Installation ==
1. Install WP Mail SMTP by WPForms either via the WordPress.org plugin repository or by uploading the files to your server. (See instructions on <a href="http://www.wpbeginner.com/beginners-guide/step-by-step-guide-to-install-a-wordpress-plugin-for-beginners/" rel="friend">how to install a WordPress plugin</a>)
2. Activate WP Mail SMTP by WPForms.
3. Navigate to the Settings area of WP Mail SMTP in the WordPress admin.
4. Choose your SMTP option (SMTP.com, Brevo (formerly Sendinblue), Mailgun SMTP, SendGrid SMTP, Postmark, SparkPost, Gmail SMTP, or Other SMTP) and follow the instructions to set it up.
5. Need more help? Get support with <a href="https://wpmailsmtp.com/?utm_source=wprepo&utm_medium=link&utm_campaign=liteplugin&utm_content=readme" rel="friend" title="WPForms">WP Mail SMTP PRO</a>.
== Frequently Asked Questions ==
= Can I use this plugin to send email via Gmail, G Suite, Outlook.com, Office 365, Hotmail, Yahoo, or AOL SMTP? =
Yes! We have extensive documentation that covers setting up SMTP most popular email services.
<a href="https://wpmailsmtp.com/docs/a-complete-guide-to-wp-mail-smtp-mailers/" rel="friend">Read our docs</a> to see the correct SMTP settings for each service.
= Help! I need support or have an issue. =
Please read <a href="https://wordpress.org/support/topic/wp-mail-smtp-support-policy/">our support policy</a> for more information.
Limited support is available for WP Mail SMTP users via WordPress.org support forums.
Email support and set up assistance is available to WP Mail SMTP Pro users.
- When using Other SMTP mailer, we provide the option to insert your password in your `wp-config.php` file, so it's not visible in your WordPress settings or saved in the database.
= I found a bug, now what? =
If you've stumbled upon a bug, the best place to report it is in the <a href="https://github.com/awesomemotive/wp-mail-smtp">WP Mail SMTP GitHub repository</a>. GitHub is where the plugin is actively developed, and posting there will get your issue quickly seen by our developers (myself and Slava). Once posted, we'll review your bug report and triage the bug. When creating an issue, the more details you can add to your report, the faster the bug can be solved.
If you've stumbled upon a bug, the best place to report it is in the [WP Mail SMTP GitHub repository](https://github.com/awesomemotive/wp-mail-smtp). GitHub is where the plugin is actively developed, and posting there will get your issue quickly seen by our developers (myself and Slava). Once posted, we'll review your bug report and triage the bug. When creating an issue, the more details you can add to your report, the faster the bug can be solved.
= Can you add feature x, y or z to the plugin? =
Short answer: maybe.
By all means please contact us to discuss features or options you'd like to see added to the plugin. We can't guarantee to add all of them, but we will consider all sensible requests. We can be contacted here:
<a href="https://wpmailsmtp.com/contact/" rel="friend">https://wpmailsmtp.com/contact/</a>
[https://wpmailsmtp.com/contact/](https://wpmailsmtp.com/contact/).
== Screenshots ==
@@ -380,6 +385,12 @@ By all means please contact us to discuss features or options you'd like to see
== Changelog ==
= 4.0.1 - 2024-02-29 =
- Added: Optimized Email Sending - move email sending requests in the background process and speed up your site.
- Added: Automatic database table structure migrations after plugin update.
- Changed: Improved error handling when sending emails.
- Fixed: Database error while adding debug events if the `wpmailsmtp_debug_events` table does not exist.
= 3.11.1 - 2024-01-22 =
- Fixed: Setup Wizard texts.
- Fixed: Compatibility for List-Unsubscribe header.
@@ -509,294 +520,3 @@ By all means please contact us to discuss features or options you'd like to see
- Changed: Updated Action Scheduler library to 3.2.1.
- Fixed: WP core admin spinner for the dashboard widget.
- Fixed: PHP error when objects implementing `__invoke()` method were used as hook callbacks for admin notices.
= 2.9.0 - 2021-06-24 =
* Added: Action Scheduler table to the Tools page.
* Added: Dashboard Widget with total emails sent counter.
* Changed: Notifications design.
* Changed: Sodium Compat library loading improved.
* Fixed: Plugin conflict with plugins that populate $_POST data (Ultimate Addons for Elementor, WishList Member, ...).
* Fixed: Sendinblue WooCommerce Email Marketing plugin conflict admin notice display.
* Fixed: jQuery deprecated notices.
* Fixed: Action Scheduler library loading issue.
* Fixed: Canceled Setup Wizard's OAuth authorization redirecting to the Setup Wizard when connecting via regular plugin settings.
* Fixed: Meta DB table not existing error notices on a WP Multisite subsite.
= 2.8.0 - 2021-05-06 =
* Added: WP Site Health status check for the sending domain.
* Added: WP Mail SMTP WordPress admin menu position filter hook.
* Changed: Moved the Email Test tab to the new WP Mail SMTP > Tools page.
* Changed: Updated the list of conflicting plugins.
* Fixed: Removed the empty admin dashboard menu item for the Setup Wizard.
* Fixed: The Setup Wizard conflicting issue with Admin 2020 plugin.
* Fixed: The plugin settings pages not opening when WishList Member plugin was active.
= 2.7.0 - 2021-03-25 =
* IMPORTANT: Support for PHP 5.5 has been discontinued. If you are running that version, you MUST upgrade PHP before installing or upgrading to WP Mail SMTP v2.7. Failure to do that will disable WP Mail SMTP functionality.
* Changed: Updated About us plugin page.
* Changed: Improved Domain Check Results section in Email Test tab.
* Changed: Allow the use of different Gmail aliases as From Email address by disabling the Force From Email setting.
* Changed: The Setup Wizard can now be launched via a button in the plugin settings. The Setup Wizard admin dashboard menu item was removed.
* Fixed: WP Multisite subsite admins couldn't remove oAuth connections (in the Gmail mailer).
= 2.6.0 - 2021-02-04 =
* Added: New plugin Setup Wizard.
* Added: SendGrid Invalid API key error message and mitigation steps on the Email Test page.
* Fixed: PHP 8 support.
= 2.5.1 - 2020-10-28 =
* Fixed: The automatic updates issue with Gmail mailer token refresh.
* Fixed: The 'wp-amil-smtp' typo in a plugin text-domain and a HTML class.
= 2.5.0 - 2020-10-22 =
* Added: Other SMTP mailer password encryption/decryption.
* Changed: Gmail mailer suggested steps for `invalid_grant` error on the Settings > Email Test page.
* Changed: Gmail mailer redirect URI was changed to fix issues with `mod_security` or redirect blocking plugins/solutions.
* Fixed: Plugin options re-saving with unescaped magic quote characters.
* Fixed: SMTP.com mailer email delivery for certain SMTP servers if attachment's encoded string is too long.
= 2.4.0 - 2020-09-17 =
* Added: Prefix all 3rd-party libraries to avoid compatibility issues with other plugins using different versions of the same libraries.
* Changed: Sendinblue SDK library version to 6.4.
* Changed: Google apiclient library version to 2.7.
* Changed: Improve plugin settings input and toggle focus states.
* Fixed: Hide admin bar menu when errors are present and the "Hide Email Delivery Errors" setting is enabled.
* Fixed: CSS sourcemaps warning messages in browser dev tools.
* Fixed: Action Scheduler tasks being registered too early and not getting assigned to the plugin group.
* Fixed: Admin bar CSS asset loading when the admin bar is not showing.
* Fixed: Fatal error on plugin uninstall if `ActionScheduler_QueueRunner::unhook_dispatch_async_request` method does not exist.
* Fixed: PHP Deprecated notice for `base_convert()` function usage in the Mailgun mailer.
= 2.3.1 - 2020-08-20 =
* Added: A WP Mail SMTP admin bar menu if there is an email delivery error or notifications.
* Added: WordPress 5.5 compatibility.
* Changed: Improve copy button user experience for Gmail Authorized redirect URI option.
* Changed: Email delivery error admin notices are now displayed only on plugin pages.
* Changed: Improve plugin settings UI by hiding certain options if the mailer does not support them.
* Changed: Pepipost API mailer is no longer available for new installs.
* Fixed: WP Site Health check for missing DB tables.
* Fixed: PHP errors caused by Actions Scheduler library used inside the plugin.
* Fixed: PHP error on plugin settings and WP Site Health pages if the plugin mailer option is empty for some reason.
= 2.2.1 - 2020-07-09 =
* Added: Gmail mailer now supports aliases.
* Added: Support both old PHPMailer v5 (WordPress <=5.4) and PHPMailer v6 (WordPress >=5.5).
* Changed: Pepipost mailer is now using the native API v5 instead of the SendGrid migration API.
* Fixed: Incorrect Mailgun Domain Name option was not showing an email delivery error.
* Fixed: Empty debug errors for the Sendinblue mailer are no more.
* Fixed: Properly compare From Email option value with a correct default email address from WP core.
= 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.
* Fixed: Downgrade internal Guzzle dependency to 6.4 to temporarily fix compatibility issues with WordPress and Guzzle 6.5. Affects Gmail mailer.
= 2.0.0 - 2020-04-27 =
* IMPORTANT: Support for PHP 5.2-5.4 has been discontinued. If you are running one of those versions, you MUST upgrade PHP before installing or upgrading to WP Mail SMTP v2.0. Failure to do that will disable WP Mail SMTP functionality.
* Added: new mailer - SMTP.com integration.
* Changed: Plugin filters that change the FROM Name/Email in emails are now always running last.
* Fixed: `false` value of the `WPMS_SMTP_AUTH`/`WPMS_SMTP_AUTOTLS` constants was not properly handled in UI.
* Fixed: various minor code and internal links improvements.
= 1.9.0 - 2020-03-23 =
* Added: Add various Status tests and Info section on Tools > Site Health page.
* Added: Notify admin if there are unsaved changes in plugin admin area options.
* Fixed: Test email now has a proper bottom margin for better look.
* Changed: Update "About us" plugin page with relevant information.
* Changed: Save default WordPress FROM Email address when incorrect FROM Email address is saved by a user.
= 1.8.1 - 2019-12-13 =
* Fixed: Revert Guzzle version to 6.4.1 because Sendinblue and Gmail mailers may experience issues under certain circumstances while sending emails (not all sites are affected).
* Fixed: Make compatible the WordPress PhpMailer class inline attachments management with the Sendgrid API.
= 1.8.0 - 2019-12-12 =
* Added: New recommended mailer: Pepipost.
* Added: "Suggest a Mailer" link in a list of mailers to send us your ideas about new ones.
* Fixed: Sendgrid: Content ID for attachments missing.
* Changed: Timeout to HTTP requests (pepipost, sendgrid, mailgun), same as max_execution_time, to prevent fails when sending emails with big attachments.
= 1.7.1 - 2019-11-11 =
* Fixed: Compatibility with WordPress 5.3.
* Fixed: `Processor::get_default_email()` always returns empty value when server incorrectly configured.
= 1.7.0 - 2019-10-24 =
* Added: Add a new constant `WPMS_DO_NOT_SEND` to block email sending.
* Fixed: Default email (wordpress@example.com) rewriting in CLI mode.
* Fixed: Incorrect conflicts detection with certain plugins.
* Fixed: various typos in plugin settings.
= 1.6.2 - 2019-09-02 =
* Fixed: Race condition when loading with certain plugins, that send emails very early. Makes email delivery more reliable.
= 1.6.0 - 2019-08-21 =
* Added: New transactional mailer: Sendinblue.
* Added: Educate users to use transactional mailers for better deliverability.
* Added: New option and filter to disable admin area delivery error notices.
* Changed: Hide private API key saved in the DB for API based mailers using `input[type=password]`.
* Changed: Update links to various docs, pointing now to https://wpmailsmtp.com.
= 1.5.2 - 2019-07-18 =
* Fixed: "Redirect URI mismatch" error for "Gmail" mailer when trying to re-authorize an account that was initially created with version < v1.5.0.
* Changed: Make "Authentication" setting in "Other SMTP" mailer ON by default for new users.
* Changed: Mailers docs links now point to wpmailsmtp.com own site.
= 1.5.1 - 2019-07-12 =
* Fixed: Duplicated emails sent to the first recipient in a loop (and others not receiving their emails).
= 1.5.0 - 2019-07-09 =
* Added: Loсo plugin support.
* Added: "About us" admin area page.
* Added: Display in debug output a possible conflicting plugin existence.
* Added: Lots of actions and filters to improve flexibility of the plugin.
* Changed: Plugin menu is now top level.
* Changed: Hide secrets/API keys in page DOM in plugin admin area.
* Changed: Do not save constant values into the database when plugin settings are saved.
* Changed: Lots of i18n improvements to support translation for both free and paid version of the plugin.
* Changed: Gmail mailer - allow to change From Name email header.
* Changed: Gmail mailer - display email used to create a connection.
* Changed: WordPress 4.9 is the minimum WordPress version we support.
* Fixed: X-Mailer header should be present in all emails.
* Fixed: PHP notices when migrating under certain circumstances from 0.x version of the plugin.
* Fixed: Options::get_group() now supports values set via constants.
= 1.4.2 - 2019-03-23 =
* Changed: Tested up to WordPress 5.1.x.
* Changed: Removed TGMPA library.
= 1.4.1 - 2018-12-03 =
* Fixed: correctly process backslashes in SMTP passwords defined via constants.
* Changed: allow to send a Test Email when Default (none) mailer is selected in plugin settings.
= 1.4.0 - 2018-11-29 =
* Added: New option: Do Not Send - block emails from being sent.
* Added: New option: Send HTML or plain text emails when doing an Email Test.
* Added: New option: Mailgun region selection - US and EU (US is default to preserve compatibility).
* Fixed: Compatibility with WordPress 3.6+.
* Fixed: Compatibility with WordPress 5.0.
* Fixed: Constants usage is much more reliable now, works correctly on Multisite. Constants are global accross the whole network.
* Fixed: Preserve multipart emails when using Sendgrid/Mailgun mailers (were converted to HTML-only).
* Fixed: Security hardening.
* Changed: Prefill Email Test page From field with currently logged in user email.
* Changed: Update libraries: google/apiclient-services, google/auth, phpseclib/phpseclib and their dependecies.
* Changed: Display in debug output cURL version if Gmail mailing failed.
* Changed: Display in debug output OpenSSL version if it exists if Gmail/SMTP mailing failed.
* Changed: Display plugin version in dashboard error notice when emailing failed.
* Changed: Do not allow to send Test Email if mailer not configured properly.
* Changed: Notify in plugin admin area that Gmail doesn't allow to redefine From Name/Email etc.
* Changed: List all constants with descriptions in plugin main file: wp_mail_smtp.php.
* Changed: TGMPA: change descriptions from "Required" to "Recommended" (labels were incorrect).
= 1.3.3 - 2018-07-05 =
* Fixed: Compatibility with other plugins, that are using Google Service or Google Client classes.
* Changed: Optimize code loading.
= 1.3.2 - 2018-06-29 =
* Make sure that other plugins/themes are not conflicting with our TGMPA library.
= 1.3.1 - 2018-06-29 =
* Fixed: Other SMTP: Clear new Debug messages about failed email delivery on next successful email sending.
* Fixed: Introduce conditional autoloader to workaround Gmail PHP 5.5 requirement and its library compatibility issues vs PHP 5.3+ minimum viable plugin version.
= 1.3.0 - 2018-06-28 =
* Added: New option: force From Email rewrite regardless of the current value.
* Added: New option: force From Name rewrite regardless of the current value.
* Added: New option: remove all plugin data on plugin uninstall (when user deletes it).
* Added: Notify site admins in wp-admin area with a notice about last failed email delivery. Cleans up on successful delivery.
* Added: Notify site admins in wp-admin area with a notice about possible compatibility issues with other SMTP and email delivery plugins.
* Added: Improve User Debug Experience when doing Email Test - display helpful description and steps to fix the issue.
* Added: New users: provide default SMTP Port value for new users based on Encryption selection.
* Added: New users: notify about not configured plugin settings.
* Added: New users: Recommend free WPForms Lite plugin for those who don't have it.
* Added: SendGrid/Mailgun: provide support for multipart/alternative types of emails.
* Added: Gmail: new button to remove connection and to connect a new Google account.
* Fixed: Support plugin installation into /mu-plugins/ directory.
* Fixed: SendGrid: required text/plain part of email being the first one - fixes plain text emails not having links.
* Fixed: SendGrid and Mailgun: improperly sending plain text emails in html format.
* Fixed: SMTP Debug output was empty in some cases.
* Fixed: Compatibility with lots of other plugins that use Google Analytics library of different versions.
* Fixed: "client_id is empty" is no more a problem, should be fixed.
* Changed: For SendGrid and Mailgun allow using custom defined attachments names if present. Fallback to file name.
* Changed: Gmail: switch to a wider scope to prevent possible issues in certain circumstances.
* Changed: Remove whitespaces start/end of keys, secrets etc.
* Changed: Improved helpful description tests of various options.
* Changed: Improved plugin autoloading functionality.
= 1.2.5 - 2017-02-05 =
* Fixed: `Return path` can't be turned off.
* Fixed: `Authentication` sometimes can't be turned off.
* Fixed: `Auto TLS` sometimes can't be turned off.
* Fixed: BCC support for Gmail was broken.
* Fixed: Debug output improved to handle SELinux and grsecurity.
* Fixed: Strip slashes from plugin settings (useful for `From Name` option).
* Fixed: Change the way sanitization is done to prevent accidental removal of useful data.
* Fixed: Plugin activation will not overwrite settings back to defaults.
* Fixed: Properly set `Auto TLS` option on plugin activation.
* Fixed: Providers autoloading improved for certain Windows-based installs.
* Fixed: Use the proper path to load translations from plugin's `/languages` directory.
* Changed: Do not autoload on each page request plugin settings from WordPress options table.
* Changed: Do not autoload Pepipost classes unless it's saved as active mailer in settings.
= 1.2.4 - 2017-01-28 =
* Fixed: Improved escaping in debug reporting.
= 1.2.3 - 2017-01-22 =
* Fixed: Gmail tokens were reset after clicking Save Settings.
* Fixed: Slight typo in Gmail success message.
= 1.2.2 - 2017-12-27 =
* Fixed: Correctly handle Mailgun debug message for an incorrect api key.
* Fixed: Fatal error for Gmail and SMTP mailers with Nginx web-server (without Apache at all).
* Changed: Update X-Mailer emails header to show the real sender with a mailer and plugin version.
= 1.2.1 - 2017-12-21 =
* Fixed: Failed SMTP connections generate fatal errors.
= 1.2.0 - 2017-12-21 =
* Fixed: Decrease the factual minimum WordPress version from 3.9 to 3.6.
* Changed: Improve debug output for all mail providers.
= 1.1.0 - 2017-12-18 =
* Added: New option "Auto TLS" for SMTP mailer. Default is enabled. Migration routine for all sites.
* Changed: Improve debug output - clear styles and context-aware content.
* Changed: Better exceptions handling for Google authentication process.
* Changed: Do not sanitize passwords, api keys etc - as they may contain special characters in certain order and sanitization will break those values.
* Changed: Improve wording of some helpful texts inside plugin admin area.
* Fixed: Do not include certain files in dependency libraries that are not used by Google mailer. This should stop flagging plugin by Wordfence and VaultPress.
* Fixed: Constants usage is working now, to define the SMTP password, for example.
* Fixed: Notice for default mailer.
= 1.0.2 - 2017-12-12 =
* Fixed: PHPMailer using incorrect SMTPSecure value.
= 1.0.1 - 2017-12-12 =
* Fixed: Global POST processing conflict.
= 1.0.0 - 2017-12-12 =
* Added: Automatic migration tool to move options from older storage format to a new one.
* Added: Added Gmail & G Suite email provider integration - without your email and password.
* Added: Added SendGrid email provider integration - using the API key only.
* Added: Added Mailgun email provider integration - using the API key and configured domain only.
* Added: New compatibility mode - for PHP 5.2 old plugin will be loaded, for PHP 5.3 and higher - new version of admin area and new functionality.
* Changed: The new look of the admin area.
* Changed: SMTP password field now has "password" type.
* Changed: SMTP password field does not display real password at all when using constants in `wp-config.php` to define it.
* Changed: Escape properly all translations.
* Changed: More helpful test email content (with a mailer name).

View File

@@ -53,17 +53,15 @@ class Area {
*
* @since 1.0.0
*/
public function __construct() {
$this->hooks();
}
public function __construct() {}
/**
* Assign all hooks to proper places.
*
* @since 1.0.0
* @since 4.0.0 Changed visibility to public.
*/
protected function hooks() {
public function hooks() {
// Add the Settings link to a plugin on Plugins page.
add_filter( 'plugin_action_links_' . plugin_basename( WPMS_PLUGIN_FILE ), [ $this, 'add_plugin_action_link' ], 10, 1 );
@@ -559,6 +557,10 @@ class Area {
'one_click_setup_upgrade_title' => wp_kses( __( 'One-Click Setup for Google Mailer <br> is a Pro Feature', 'wp-mail-smtp' ), [ 'br' => [] ] ),
'one_click_setup_upgrade_content' => esc_html__( 'We\'re sorry, One-Click Setup for Google Mailer is not available on your plan. Please upgrade to the Pro plan to unlock all these awesome features.', 'wp-mail-smtp' ),
],
'rate_limit' => [
'upgrade_title' => wp_kses( __( 'Email Rate Limiting <br> is a Pro Feature', 'wp-mail-smtp' ), [ 'br' => [] ] ),
'upgrade_content' => esc_html__( 'We\'re sorry, Email Rate Limiting is not available on your plan. Please upgrade to the Pro plan to unlock all these awesome features.', 'wp-mail-smtp' ),
],
],
'all_mailers_supports' => wp_mail_smtp()->get_providers()->get_supports_all(),
'nonce' => wp_create_nonce( 'wp-mail-smtp-admin' ),

View File

@@ -40,15 +40,7 @@ class DashboardWidget {
*
* @since 2.9.0
*/
public function __construct() {
// Prevent the class initialization, if the dashboard widget hidden setting is enabled.
if ( Options::init()->get( 'general', 'dashboard_widget_hidden' ) ) {
return;
}
add_action( 'admin_init', [ $this, 'init' ] );
}
public function __construct() {}
/**
* Init class.
@@ -57,23 +49,34 @@ class DashboardWidget {
*/
public function init() {
// This widget should be displayed for certain high-level users only.
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
// Prevent the class initialization, if the dashboard widget hidden setting is enabled.
if ( Options::init()->get( 'general', 'dashboard_widget_hidden' ) ) {
return;
}
/**
* Filters whether the initialization of the dashboard widget should be allowed.
*
* @since 2.9.0
*
* @param bool $var If the dashboard widget should be initialized.
*/
if ( ! apply_filters( 'wp_mail_smtp_admin_dashboard_widget', '__return_true' ) ) {
return;
}
add_action(
'admin_init',
function() {
$this->hooks();
// This widget should be displayed for certain high-level users only.
if ( ! current_user_can( wp_mail_smtp()->get_capability_manage_options() ) ) {
return;
}
/**
* Filters whether the initialization of the dashboard widget should be allowed.
*
* @since 2.9.0
*
* @param bool $var If the dashboard widget should be initialized.
*/
if ( ! apply_filters( 'wp_mail_smtp_admin_dashboard_widget', '__return_true' ) ) {
return;
}
$this->hooks();
}
);
}
/**

View File

@@ -104,6 +104,10 @@ class DebugEvents {
wp_send_json_error( esc_html__( 'You don\'t have the capability to perform this action.', 'wp-mail-smtp' ) );
}
if ( ! self::is_valid_db() ) {
wp_send_json_error( esc_html__( 'For some reason the database table was not installed correctly. Please contact plugin support team to diagnose and fix the issue.', 'wp-mail-smtp' ) );
}
global $wpdb;
$table = self::get_table_name();
@@ -143,6 +147,10 @@ class DebugEvents {
wp_send_json_error( esc_html__( 'You don\'t have the capability to perform this action.', 'wp-mail-smtp' ) );
}
if ( ! self::is_valid_db() ) {
wp_send_json_error( esc_html__( 'For some reason the database table was not installed correctly. Please contact plugin support team to diagnose and fix the issue.', 'wp-mail-smtp' ) );
}
$event_id = isset( $_POST['id'] ) ? intval( $_POST['id'] ) : false;
if ( empty( $event_id ) ) {
@@ -171,6 +179,10 @@ class DebugEvents {
*/
public static function add( $message = '', $type = 0 ) {
if ( ! self::is_valid_db() ) {
return false;
}
if ( ! in_array( $type, array_keys( Event::get_types() ), true ) ) {
return false;
}
@@ -277,6 +289,10 @@ class DebugEvents {
return new WP_Error( 'wp_mail_smtp_admin_debug_events_get_error_debug_events_count_invalid_time', 'Invalid time span.' );
}
if ( ! self::is_valid_db() ) {
return 0;
}
$transient_key = self::ERROR_DEBUG_EVENTS_TRANSIENT . '_' . sanitize_title_with_dashes( $span_of_time );
$cached_error_events_count = get_transient( $transient_key );

View File

@@ -645,6 +645,10 @@ class AboutTab extends PageAbstract {
$plugin_basename = $installer->plugin_info();
if ( $plugin_basename === 'wpforms-lite/wpforms.php' ) {
add_option( 'wpforms_installation_source', 'wp-mail-smtp-about-us' );
}
// Activate the plugin silently.
$activated = activate_plugin( $plugin_basename );

View File

@@ -470,6 +470,24 @@ class DebugEventsTab extends PageAbstract {
private function display_debug_events_not_installed() {
$error_message = get_option( Migration::ERROR_OPTION_NAME );
$create_missing_tables_url = wp_nonce_url(
add_query_arg(
[
'create-missing-db-tables' => 1,
],
$this->get_link()
),
Area::SLUG . '-create-missing-db-tables'
);
$contact_support_url = wp_mail_smtp()->get_utm_url(
'https://wpmailsmtp.com/account/support/',
[
'medium' => 'debug-events',
'content' => 'Debug Events not installed correctly',
]
);
?>
<div class="notice-inline notice-error">
@@ -478,11 +496,37 @@ class DebugEventsTab extends PageAbstract {
<p>
<?php
if ( ! empty( $error_message ) ) {
esc_html_e( 'The database table was not installed correctly. Please contact plugin support to diagnose and fix the issue. Provide them the error message below:', 'wp-mail-smtp' );
echo wp_kses(
sprintf( /* translators: %1$s - create missing tables link; %2$s - contact support link. */
__( 'WP Mail SMTP is using custom database tables for some of its features. In order to work properly, the custom tables should be created, and it seems they are missing. Please try to <a href="%1$s">create the missing DB tables by clicking on this link</a>. If this issue persists, please <a href="%2$s" target="_blank" rel="noopener noreferrer">contact our support</a> and provide the error message below:', 'wp-mail-smtp' ),
esc_url( $create_missing_tables_url ),
esc_url( $contact_support_url )
),
[
'a' => [
'href' => [],
'target' => [],
'rel' => [],
],
]
);
echo '<br><br>';
echo '<code>' . esc_html( $error_message ) . '</code>';
} else {
esc_html_e( 'For some reason the database table was not installed correctly. Please contact plugin support team to diagnose and fix the issue.', 'wp-mail-smtp' );
echo wp_kses(
sprintf( /* translators: %1$s - create missing tables link; %2$s - contact support link. */
__( 'WP Mail SMTP is using custom database tables for some of its features. In order to work properly, the custom tables should be created, and it seems they are missing. Please try to <a href="%1$s">create the missing DB tables by clicking on this link</a>. If this issue persists, please <a href="%2$s" target="_blank" rel="noopener noreferrer">contact our support</a>.', 'wp-mail-smtp' ),
esc_url( $create_missing_tables_url ),
esc_url( $contact_support_url )
),
[
'a' => [
'href' => [],
'target' => [],
'rel' => [],
],
]
);
}
?>
</p>

View File

@@ -5,6 +5,7 @@ namespace WPMailSMTP\Admin\Pages;
use WPMailSMTP\Admin\Area;
use WPMailSMTP\Admin\PageAbstract;
use WPMailSMTP\Helpers\UI;
use WPMailSMTP\OptimizedEmailSending;
use WPMailSMTP\Options;
use WPMailSMTP\UsageTracking\UsageTracking;
use WPMailSMTP\Reports\Emails\Summary as SummaryReportEmail;
@@ -309,6 +310,55 @@ class MiscTab extends PageAbstract {
</div>
</div>
<!-- Optimize email sending -->
<div id="wp-mail-smtp-setting-row-optimize-email-sending" class="wp-mail-smtp-setting-row wp-mail-smtp-clear">
<div class="wp-mail-smtp-setting-label">
<label for="wp-mail-smtp-setting-optimize-email-sending">
<?php esc_html_e( 'Optimize Email Sending', 'wp-mail-smtp' ); ?>
</label>
</div>
<div class="wp-mail-smtp-setting-field">
<?php
UI::toggle(
[
'name' => 'wp-mail-smtp[general][' . OptimizedEmailSending::SETTINGS_SLUG . ']',
'id' => 'wp-mail-smtp-setting-optimize-email-sending',
'value' => 'true',
'checked' => (bool) OptimizedEmailSending::is_enabled(),
]
);
?>
<p class="desc">
<?php
printf(
wp_kses( /* translators: %1$s - Documentation URL. */
__( 'Send emails asynchronously, which will make pages with email requests load faster, but may delay email delivery by a minute or two. <a href="%1$s" target="_blank" rel="noopener noreferrer">Learn More</a>', 'wp-mail-smtp' ),
[
'a' => [
'href' => [],
'rel' => [],
'target' => [],
],
]
),
esc_url(
wp_mail_smtp()->get_utm_url(
'https://wpmailsmtp.com/docs/a-complete-guide-to-miscellaneous-settings/#optimize-email-sending',
[
'medium' => 'misc-settings',
'content' => 'Optimize Email Sending - support article',
]
)
)
);
?>
</p>
</div>
</div>
<!-- Rate limit -->
<?php $this->display_rate_limit_settings(); ?>
<!-- Uninstall -->
<div id="wp-mail-smtp-setting-row-uninstall" class="wp-mail-smtp-setting-row wp-mail-smtp-clear">
<div class="wp-mail-smtp-setting-label">
@@ -343,6 +393,57 @@ class MiscTab extends PageAbstract {
<?php
}
/**
* Display rate limit settings.
*
* @since 4.0.0
*/
protected function display_rate_limit_settings() {
?>
<div id="wp-mail-smtp-setting-row-<?php echo esc_attr( $this->get_slug() ); ?>-rate_limit-lite" class="wp-mail-smtp-setting-row wp-mail-smtp-clear">
<div class="wp-mail-smtp-setting-label">
<label for="<?php echo 'wp-mail-smtp-setting-' . esc_attr( $this->get_slug() ) . '-rate_limit-lite'; ?>">
<?php esc_html_e( 'Email Rate Limiting', 'wp-mail-smtp' ); ?>
</label>
</div>
<div class="wp-mail-smtp-setting-field">
<?php
UI::toggle(
[
'id' => 'wp-mail-smtp-setting-' . esc_attr( $this->get_slug() ) . '-rate_limit-lite',
]
);
?>
<p class="desc">
<?php
printf(
wp_kses( /* translators: %1$s - Documentation URL. */
__( 'Limit the number of emails this site will send in each time interval (per minute, hour, day, week and month). Emails that will cross those set limits will be queued and sent as soon as your limits allow. <a href="%1$s" target="_blank" rel="noopener noreferrer">Learn More</a>', 'wp-mail-smtp' ),
[
'a' => [
'href' => [],
'rel' => [],
'target' => [],
],
]
),
esc_url(
wp_mail_smtp()->get_utm_url(
'https://wpmailsmtp.com/docs/a-complete-guide-to-miscellaneous-settings/#email-rate-limiting',
[
'medium' => 'misc-settings',
'content' => 'Email Rate Limiting - support article',
]
)
)
);
?>
</p>
</div>
</div>
<?php
}
/**
* Process tab form submission ($_POST).
*
@@ -379,6 +480,9 @@ class MiscTab extends PageAbstract {
if ( empty( $data['general'][ SummaryReportEmail::SETTINGS_SLUG ] ) ) {
$data['general'][ SummaryReportEmail::SETTINGS_SLUG ] = false;
}
if ( empty( $data['general'][ OptimizedEmailSending::SETTINGS_SLUG ] ) ) {
$data['general'][ OptimizedEmailSending::SETTINGS_SLUG ] = false;
}
$is_summary_report_email_opt_changed = $options->is_option_changed(
$options->parse_boolean( $data['general'][ SummaryReportEmail::SETTINGS_SLUG ] ),

View File

@@ -136,8 +136,8 @@ class Review {
<div class="wp-mail-smtp-review-step wp-mail-smtp-review-step-1">
<p><?php esc_html_e( 'Are you enjoying WP Mail SMTP?', 'wp-mail-smtp' ); ?></p>
<p>
<a href="#" class="wp-mail-smtp-review-switch-step" data-step="3"><?php esc_html_e( 'Yes', 'wp-mail-smtp' ); ?></a><br />
<a href="#" class="wp-mail-smtp-review-switch-step" data-step="2"><?php esc_html_e( 'Not Really', 'wp-mail-smtp' ); ?></a>
<a href="#" class="wp-mail-smtp-review-switch-step" data-step="3"><?php esc_html_e( 'Yes', 'wp-mail-smtp' ); ?></a>&nbsp;&bull;&nbsp;
<a href="#" class="wp-mail-smtp-review-switch-step" data-step="2"><?php esc_html_e( 'No', 'wp-mail-smtp' ); ?></a>
</p>
</div>
<div class="wp-mail-smtp-review-step wp-mail-smtp-review-step-2" style="display: none">
@@ -147,24 +147,23 @@ class Review {
printf(
'<a href="%1$s" class="wp-mail-smtp-dismiss-review-notice wp-mail-smtp-review-out" target="_blank" rel="noopener noreferrer">%2$s</a>',
// phpcs:ignore WordPress.Arrays.ArrayDeclarationSpacing.AssociativeArrayFound
esc_url( wp_mail_smtp()->get_utm_url( 'https://wpmailsmtp.com/plugin-feedback/', [ 'medium' => 'review-notice', 'content' => 'Give Feedback' ] ) ),
esc_html__( 'Give Feedback', 'wp-mail-smtp' )
esc_url( wp_mail_smtp()->get_utm_url( 'https://wpmailsmtp.com/plugin-feedback/', [ 'medium' => 'review-notice', 'content' => 'Provide Feedback' ] ) ),
esc_html__( 'Provide Feedback', 'wp-mail-smtp' )
);
?>
<br>
&nbsp;&bull;&nbsp;
<a href="#" class="wp-mail-smtp-dismiss-review-notice" target="_blank" rel="noopener noreferrer">
<?php esc_html_e( 'No thanks', 'wp-mail-smtp' ); ?>
</a>
</p>
</div>
<div class="wp-mail-smtp-review-step wp-mail-smtp-review-step-3" style="display: none">
<p><?php esc_html_e( 'Thats 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?', 'wp-mail-smtp' ); ?></p>
<p><strong><?php echo wp_kses( __( '~ Jared Atchison<br>Co-Founder, WP Mail SMTP', 'wp-mail-smtp' ), [ 'br' => [] ] ); ?></strong></p>
<p><?php esc_html_e( 'That\'s fantastic! Would you consider giving it a 5-star rating on WordPress.org? It will help other users with email issues and it will mean the world to us!', 'wp-mail-smtp' ); ?></p>
<p>
<a href="https://wordpress.org/support/plugin/wp-mail-smtp/reviews/?filter=5#new-post" class="wp-mail-smtp-dismiss-review-notice wp-mail-smtp-review-out" target="_blank" rel="noopener noreferrer">
<?php esc_html_e( 'Ok, you deserve it', 'wp-mail-smtp' ); ?>
</a><br>
<a href="#" class="wp-mail-smtp-dismiss-review-notice" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Nope, maybe later', 'wp-mail-smtp' ); ?></a><br>
<?php esc_html_e( 'Yes, I\'ll rate it with 5-stars', 'wp-mail-smtp' ); ?>
</a>&nbsp;&bull;&nbsp;
<a href="#" class="wp-mail-smtp-dismiss-review-notice" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'No, maybe later', 'wp-mail-smtp' ); ?></a>&nbsp;&bull;&nbsp;
<a href="#" class="wp-mail-smtp-dismiss-review-notice" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'I already did', 'wp-mail-smtp' ); ?></a>
</p>
</div>

View File

@@ -944,6 +944,7 @@ class SetupWizard {
// Disable the WPForms redirect after plugin activation.
if ( $slug === 'wpforms-lite' ) {
update_option( 'wpforms_activation_redirect', true );
add_option( 'wpforms_installation_source', 'wp-mail-smtp-setup-wizard' );
}
// Disable the AIOSEO redirect after plugin activation.

View File

@@ -28,10 +28,7 @@ class Compatibility {
*/
public function init() {
// Setup compatibility only in admin area.
if ( WP::in_wp_admin() ) {
$this->setup_compatibility();
}
$this->setup_compatibility();
}
/**
@@ -42,7 +39,10 @@ class Compatibility {
public function setup_compatibility() {
$plugins = [
'admin-2020' => '\WPMailSMTP\Compatibility\Plugin\Admin2020',
'admin-2020' => '\WPMailSMTP\Compatibility\Plugin\Admin2020',
'wpforms-lite' => '\WPMailSMTP\Compatibility\Plugin\WPFormsLite',
'wpforms' => '\WPMailSMTP\Compatibility\Plugin\WPForms',
'woocommerce' => '\WPMailSMTP\Compatibility\Plugin\WooCommerce',
];
foreach ( $plugins as $key => $classname ) {

View File

@@ -2,6 +2,8 @@
namespace WPMailSMTP\Compatibility\Plugin;
use WPMailSMTP\WP;
/**
* Admin 2020 Lite compatibility plugin.
*
@@ -9,6 +11,18 @@ namespace WPMailSMTP\Compatibility\Plugin;
*/
class Admin2020 extends PluginAbstract {
/**
* If plugin can be loaded.
*
* @since 4.0.0
*
* @return bool
*/
public static function is_applicable() {
return parent::is_applicable() && WP::in_wp_admin();
}
/**
* Get plugin name.
*

View File

@@ -0,0 +1,35 @@
<?php
namespace WPMailSMTP\Compatibility\Plugin;
/**
* WPForms compatibility plugin.
*
* @since 4.0.0
*/
class WPForms extends WPFormsLite {
/**
* Get plugin name.
*
* @since 4.0.0
*
* @return string
*/
public static function get_name() {
return 'WPForms';
}
/**
* Get plugin path.
*
* @since 4.0.0
*
* @return string
*/
public static function get_path() {
return 'wpforms/wpforms.php';
}
}

View File

@@ -0,0 +1,47 @@
<?php
namespace WPMailSMTP\Compatibility\Plugin;
/**
* WPForms Lite compatibility plugin.
*
* @since 4.0.0
*/
class WPFormsLite extends PluginAbstract {
/**
* Get plugin name.
*
* @since 4.0.0
*
* @return string
*/
public static function get_name() {
return 'WPForms Lite';
}
/**
* Get plugin path.
*
* @since 4.0.0
*
* @return string
*/
public static function get_path() {
return 'wpforms-lite/wpforms.php';
}
/**
* Execute on init action.
*
* @since 4.0.0
*/
public function load() { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
if ( wp_mail_smtp()->get_queue()->is_enabled() ) {
add_filter( 'wpforms_tasks_entry_emails_trigger_send_same_process', '__return_true', PHP_INT_MAX );
}
}
}

View File

@@ -0,0 +1,47 @@
<?php
namespace WPMailSMTP\Compatibility\Plugin;
/**
* WooCommerce compatibility plugin.
*
* @since 4.0.0
*/
class WooCommerce extends PluginAbstract {
/**
* Get plugin name.
*
* @since 4.0.0
*
* @return string
*/
public static function get_name() {
return 'WooCommerce';
}
/**
* Get plugin path.
*
* @since 4.0.0
*
* @return string
*/
public static function get_path() {
return 'woocommerce/woocommerce.php';
}
/**
* Execute on init action.
*
* @since 4.0.0
*/
public function load() { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
if ( wp_mail_smtp()->get_queue()->is_enabled() ) {
add_filter( 'woocommerce_defer_transactional_emails', '__return_false', PHP_INT_MAX );
}
}
}

View File

@@ -6,13 +6,13 @@ use WPMailSMTP\Admin\AdminBarMenu;
use WPMailSMTP\Admin\DashboardWidget;
use WPMailSMTP\Admin\DebugEvents\DebugEvents;
use WPMailSMTP\Admin\Notifications;
use WPMailSMTP\Helpers\Helpers;
use WPMailSMTP\Tasks\Meta;
use WPMailSMTP\UsageTracking\UsageTracking;
use WPMailSMTP\Compatibility\Compatibility;
use WPMailSMTP\Reports\Reports;
use ReflectionFunction;
use Exception;
use WPMailSMTP\Queue\Queue;
/**
* Class Core to handle all plugin initialization.
@@ -114,6 +114,9 @@ class Core {
// Activation hook.
register_activation_hook( WPMS_PLUGIN_FILE, [ $this, 'activate' ] );
// Initialize DB migrations.
add_action( 'plugins_loaded', [ $this, 'get_migrations' ] );
// Load Pro if available.
add_action( 'plugins_loaded', [ $this, 'get_pro' ] );
@@ -129,9 +132,6 @@ class Core {
// Initialize Action Scheduler tasks.
add_action( 'init', [ $this, 'get_tasks' ], 5 );
// Initialize DB migrations.
add_action( 'admin_init', [ $this, 'init_migrations' ] );
add_action( 'plugins_loaded', [ $this, 'get_usage_tracking' ] );
add_action( 'plugins_loaded', [ $this, 'get_admin_bar_menu' ] );
add_action( 'plugins_loaded', [ $this, 'get_notifications' ] );
@@ -142,6 +142,13 @@ class Core {
add_action( 'plugins_loaded', [ $this, 'get_db_repair' ] );
add_action( 'plugins_loaded', [ $this, 'get_connections_manager' ], 20 );
add_action( 'plugins_loaded', [ $this, 'get_wp_mail_initiator' ] );
add_action( 'plugins_loaded', [ $this, 'get_queue' ] );
add_action(
'plugins_loaded',
function() {
( new OptimizedEmailSending() )->hooks();
}
);
}
/**
@@ -284,7 +291,18 @@ class Core {
static $processor;
if ( ! isset( $processor ) ) {
$processor = apply_filters( 'wp_mail_smtp_core_get_processor', new Processor() );
/**
* Filters Processor instance.
*
* @since 4.0.0
*
* @param Processor $processor Processor instance.
*/
$processor = apply_filters(
'wp_mail_smtp_core_get_processor',
new Processor()
);
if ( method_exists( $processor, 'hooks' ) ) {
$processor->hooks();
@@ -307,6 +325,10 @@ class Core {
if ( ! isset( $admin ) ) {
$admin = apply_filters( 'wp_mail_smtp_core_get_admin', new Admin\Area() );
if ( method_exists( $admin, 'hooks' ) ) {
$admin->hooks();
}
}
return $admin;
@@ -355,34 +377,35 @@ class Core {
/**
* Initialize DB migrations.
*
* @deprecated 4.0.0
*
* @since 3.0.0
*/
public function init_migrations() {
if ( WP::is_doing_ajax() || wp_doing_cron() ) {
return;
_deprecated_function( __METHOD__, '3.10.0', '\WPMailSMTP\Migrations::init_migrations_on_request' );
$this->get_migrations()->init_migrations_on_request();
}
/**
* Get the Migrations object.
*
* @since 4.0.0
*
* @return Migrations
*/
public function get_migrations() {
static $migrations;
if ( ! isset( $migrations ) ) {
$migrations = new Migrations();
$migrations->hooks();
}
$migrations = [
Migration::class,
\WPMailSMTP\Admin\DebugEvents\Migration::class,
];
/**
* Filters DB migrations.
*
* @since 3.0.0
*
* @param array $migrations Migrations classes.
*/
$migrations = apply_filters( 'wp_mail_smtp_core_init_migrations', $migrations );
foreach ( $migrations as $migration ) {
if ( is_subclass_of( $migration, '\WPMailSMTP\MigrationAbstract' ) && $migration::is_enabled() ) {
$new_migration = new $migration();
$new_migration->init();
}
}
return $migrations;
}
/**
@@ -398,6 +421,10 @@ class Core {
if ( ! isset( $upgrade ) ) {
$upgrade = apply_filters( 'wp_mail_smtp_core_get_upgrade', new Upgrade() );
if ( method_exists( $upgrade, 'run' ) ) {
$upgrade->run();
}
}
return $upgrade;
@@ -871,6 +898,10 @@ class Core {
DebugEvents::get_table_name(),
];
if ( $this->get_queue()->is_enabled() ) {
$tables[] = Queue::get_table_name();
}
return apply_filters( 'wp_mail_smtp_core_get_custom_db_tables', $tables );
}
@@ -1147,6 +1178,10 @@ class Core {
*/
$class_name = apply_filters( 'wp_mail_smtp_core_get_dashboard_widget', DashboardWidget::class );
$dashboard_widget = new $class_name();
if ( method_exists( $dashboard_widget, 'init' ) ) {
$dashboard_widget->init();
}
}
return $dashboard_widget;
@@ -1365,4 +1400,29 @@ class Core {
*/
return apply_filters( 'wp_mail_smtp_core_get_capability_manage_options', 'manage_options' );
}
/**
* Load the queue functionality.
*
* @since 4.0.0
*
* @return Queue
*/
public function get_queue() {
static $queue;
if ( ! isset( $queue ) ) {
/**
* Filter the Queue object.
*
* @since 4.0.0
*
* @param Queue $queue The Queue object.
*/
$queue = apply_filters( 'wp_mail_smtp_core_get_queue', new Queue() );
}
return $queue;
}
}

View File

@@ -5,6 +5,8 @@ namespace WPMailSMTP;
use WPMailSMTP\Admin\Area;
use WPMailSMTP\Admin\DebugEvents\DebugEvents;
use WPMailSMTP\Admin\DebugEvents\Migration as DebugMigration;
use WPMailSMTP\Queue\Migration as QueueMigration;
use WPMailSMTP\Queue\Queue;
use WPMailSMTP\Tasks\Meta;
/**
@@ -49,11 +51,17 @@ class DBRepair {
}
$redirect_page = isset( $_GET['page'] ) ? sanitize_key( $_GET['page'] ) : Area::SLUG;
$redirect_tab = isset( $_GET['tab'] ) ? sanitize_key( $_GET['tab'] ) : '';
$query_args = [
'check-db-tables' => 1,
];
if ( ! empty( $redirect_tab ) ) {
$query_args['tab'] = $redirect_tab;
}
$redirect_url = add_query_arg(
[
'check-db-tables' => 1,
],
$query_args,
wp_mail_smtp()->get_admin()->get_admin_page_url( $redirect_page )
);
@@ -76,6 +84,8 @@ class DBRepair {
update_option( DebugMigration::OPTION_NAME, 0 );
} elseif ( $missing_table === Meta::get_table_name() ) {
update_option( Migration::OPTION_NAME, 1 );
} elseif ( $missing_table === Queue::get_table_name() ) {
update_option( QueueMigration::OPTION_NAME, 0 );
}
}
@@ -122,6 +132,11 @@ class DBRepair {
$missing_table,
get_option( Migration::ERROR_OPTION_NAME, $this->get_missing_table_default_error_message() )
);
} elseif ( $missing_table === Queue::get_table_name() ) {
$reason .= $this->get_reason_output_message(
$missing_table,
get_option( QueueMigration::ERROR_OPTION_NAME, $this->get_missing_table_default_error_message() )
);
}
$reasons[] = $reason;

View File

@@ -167,4 +167,14 @@ class Helpers {
/** \Plugin_Upgrader class */
require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
}
/**
* Whether the current request is a WP CLI request.
*
* @since 4.0.0
*/
public static function is_wp_cli() {
return defined( 'WP_CLI' ) && WP_CLI;
}
}

View File

@@ -2,6 +2,8 @@
namespace WPMailSMTP;
use phpmailerException;
// Load PHPMailer class, so we can subclass it.
if ( ! class_exists( 'PHPMailer', false ) ) {
require_once ABSPATH . WPINC . '/class-phpmailer.php';
@@ -54,4 +56,18 @@ class MailCatcher extends \PHPMailer implements MailCatcherInterface {
return $this->LE; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
}
/**
* Throw PHPMailer exception.
*
* @since 4.0.0
*
* @param string $error Error message.
*
* @throws phpmailerException PHPMailer exception.
*/
protected function throw_exception( $error ) {
throw new phpmailerException( $error );
}
}

View File

@@ -79,10 +79,7 @@ trait MailCatcherTrait {
*
* @return bool
*/
public function send() { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.MaxExceeded, Generic.Metrics.NestingLevel.MaxExceeded
$connection = wp_mail_smtp()->get_connections_manager()->get_mail_connection();
$mail_mailer = $connection->get_mailer_slug();
public function send() { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh
// Reset email related variables.
$this->debug_event_id = false;
@@ -116,171 +113,257 @@ trait MailCatcherTrait {
return false;
}
// If it's not a test email,
// check if the email should be enqueued
// instead of being sent immediately.
if ( ! $this->is_test_email && ! $this->is_setup_wizard_test_email ) {
/**
* Filters whether an email should be enqueued or sent immediately.
*
* @since 4.0.0
*
* @param bool $should_enqueue Whether to enqueue an email, or send it.
* @param array $wp_mail_args Original arguments of the `wp_mail` call.
*/
$should_enqueue_email = apply_filters(
'wp_mail_smtp_mail_catcher_send_enqueue_email',
false,
wp_mail_smtp()->get_processor()->get_filtered_wp_mail_args()
);
$queue = wp_mail_smtp()->get_queue();
// If we should enqueue the email,
// and the email has been enqueued,
// bail.
if ( $should_enqueue_email && $queue->enqueue_email() ) {
return true;
}
}
$connection = wp_mail_smtp()->get_connections_manager()->get_mail_connection();
$mailer_slug = $connection->get_mailer_slug();
// Define a custom header, that will be used to identify the plugin and the mailer.
$this->XMailer = 'WPMailSMTP/Mailer/' . $mail_mailer . ' ' . WPMS_PLUGIN_VER; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
// phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
$this->XMailer = 'WPMailSMTP/Mailer/' . $mailer_slug . ' ' . WPMS_PLUGIN_VER;
// Use the default PHPMailer, as we inject our settings there for certain providers.
if (
$mail_mailer === 'mail' ||
$mail_mailer === 'smtp' ||
$mail_mailer === 'pepipost'
$mailer_slug === 'mail' ||
$mailer_slug === 'smtp' ||
$mailer_slug === 'pepipost'
) {
try {
if ( DebugEvents::is_debug_enabled() && ! $this->is_test_email ) {
$this->SMTPDebug = 3; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
$this->Debugoutput = [ $this, 'debug_output_callback' ]; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
}
return $this->smtp_send( $connection );
} else {
return $this->api_send( $connection );
}
}
/**
* Fires before email pre send via SMTP.
*
* Allow to hook early to catch any early failed emails.
*
* @since 2.9.0
*
* @param MailCatcherInterface $mailcatcher The MailCatcher object.
*/
do_action( 'wp_mail_smtp_mailcatcher_smtp_pre_send_before', $this );
/**
* Send email via SMTP.
*
* @since 4.0.0
*
* @param ConnectionInterface $connection The connection object.
*
* @throws Exception When sending via PhpMailer fails for some reason.
*
* @return bool
*/
private function smtp_send( $connection ) { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh
// Prepare all the headers.
if ( ! $this->preSend() ) {
return false;
}
$mailer_slug = $connection->get_mailer_slug();
/**
* Fires before email send via SMTP.
*
* Allow to hook after all the preparation before the actual sending.
*
* @since 2.9.0
*
* @param MailCatcherInterface $mailcatcher The MailCatcher object.
*/
do_action( 'wp_mail_smtp_mailcatcher_smtp_send_before', $this );
$post_send = $this->postSend();
DebugEvents::add_debug(
esc_html__( 'An email request was sent.', 'wp-mail-smtp' )
);
return $post_send;
} catch ( Exception $e ) {
// phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
$this->mailHeader = '';
$this->setError( $e->getMessage() );
// phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
$error_message = 'Mailer: ' . esc_html( wp_mail_smtp()->get_providers()->get_options( $mail_mailer )->get_title() ) . "\r\n" . $this->ErrorInfo;
// Set the debug error, but not for default PHP mailer.
if ( $mail_mailer !== 'mail' ) {
$this->debug_event_id = Debug::set( $error_message );
$this->latest_error = $error_message;
if ( DebugEvents::is_debug_enabled() && ! empty( $this->debug_output_buffer ) ) {
$debug_message = $error_message . "\r\n" . esc_html__( 'Debug Output:', 'wp-mail-smtp' ) . "\r\n";
$debug_message .= implode( "\r\n", $this->debug_output_buffer );
$this->debug_event_id = DebugEvents::add_debug( $debug_message );
}
}
/**
* Fires after email sent failure via SMTP.
*
* @since 3.5.0
*
* @param string $error_message Error message.
* @param MailCatcherInterface $mailcatcher The MailCatcher object.
* @param string $mail_mailer Current mailer name.
*/
do_action( 'wp_mail_smtp_mailcatcher_send_failed', $error_message, $this, $mail_mailer );
if ( $this->exceptions ) {
throw $e;
}
return false;
} finally {
// Clear debug output buffer.
$this->debug_output_buffer = [];
// phpcs:disable WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
try {
if ( DebugEvents::is_debug_enabled() && ! $this->is_test_email ) {
$this->SMTPDebug = 3;
$this->Debugoutput = [ $this, 'debug_output_callback' ];
}
}
// We need this so that the \PHPMailer class will correctly prepare all the headers.
$this->Mailer = 'mail'; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
/**
* Fires before email pre send via SMTP.
*
* Allow to hook early to catch any early failed emails.
*
* @since 2.9.0
*
* @param MailCatcherInterface $mailcatcher The MailCatcher object.
*/
do_action( 'wp_mail_smtp_mailcatcher_smtp_pre_send_before', $this );
/**
* Fires before email pre send.
*
* Allow to hook early to catch any early failed emails.
*
* @since 2.9.0
*
* @param MailCatcherInterface $mailcatcher The MailCatcher object.
*/
do_action( 'wp_mail_smtp_mailcatcher_pre_send_before', $this );
// Prepare all the headers.
if ( ! $this->preSend() ) {
$this->throw_exception( $this->ErrorInfo );
}
// Prepare everything (including the message) for sending.
if ( ! $this->preSend() ) {
return false;
}
/**
* Fires before email send via SMTP.
*
* Allow to hook after all the preparation before the actual sending.
*
* @since 2.9.0
*
* @param MailCatcherInterface $mailcatcher The MailCatcher object.
*/
do_action( 'wp_mail_smtp_mailcatcher_smtp_send_before', $this );
$mailer = wp_mail_smtp()->get_providers()->get_mailer( $mail_mailer, $this, $connection );
if ( ! $this->postSend() ) {
$this->throw_exception( $this->ErrorInfo );
}
if ( ! $mailer ) {
return false;
}
DebugEvents::add_debug(
esc_html__( 'An email request was sent.', 'wp-mail-smtp' )
);
if ( ! $mailer->is_php_compatible() ) {
return false;
}
return true;
} catch ( Exception $e ) {
$this->mailHeader = '';
/**
* Fires before email send.
*
* Allows to hook after all the preparation before the actual sending.
*
* @since 3.3.0
*
* @param MailerAbstract $mailer The Mailer object.
*/
do_action( 'wp_mail_smtp_mailcatcher_send_before', $mailer );
// We need this to append SMTP error to the `PHPMailer::ErrorInfo` property.
$this->setError( $e->getMessage() );
/*
* Send the actual email.
* We reuse everything, that was preprocessed for usage in \PHPMailer.
*/
$mailer->send();
$is_sent = $mailer->is_email_sent();
if ( ! $is_sent ) {
$error = $mailer->get_response_error();
$error_message = '';
if ( ! empty( $error ) ) {
// Add mailer to the beginning and save to display later.
$message = 'Mailer: ' . esc_html( wp_mail_smtp()->get_providers()->get_options( $mailer->get_mailer_name() )->get_title() ) . "\r\n";
$conflicts = new Conflicts();
if ( $conflicts->is_detected() ) {
$conflict_plugin_names = implode( ', ', $conflicts->get_all_conflict_names() );
$message .= 'Conflicts: ' . esc_html( $conflict_plugin_names ) . "\r\n";
}
$error_message = $message . $error;
// Set the debug error, but not for default PHP mailer.
if ( $mailer_slug !== 'mail' ) {
$error_message = 'Mailer: ' . esc_html( wp_mail_smtp()->get_providers()->get_options( $mailer_slug )->get_title() ) . "\r\n" . $this->ErrorInfo;
$this->debug_event_id = Debug::set( $error_message );
$this->latest_error = $error_message;
if ( DebugEvents::is_debug_enabled() && ! empty( $this->debug_output_buffer ) ) {
$debug_message = $error_message . "\r\n" . esc_html__( 'Debug Output:', 'wp-mail-smtp' ) . "\r\n";
$debug_message .= implode( "\r\n", $this->debug_output_buffer );
$this->debug_event_id = DebugEvents::add_debug( $debug_message );
}
}
/**
* Fires after email sent failure via SMTP.
*
* @since 3.5.0
*
* @param string $error_message Error message.
* @param MailCatcherInterface $mailcatcher The MailCatcher object.
* @param string $mailer_slug Current mailer name.
*/
do_action( 'wp_mail_smtp_mailcatcher_send_failed', $this->ErrorInfo, $this, $mailer_slug );
if ( $this->exceptions ) {
throw $e;
}
return false;
} finally {
// Clear debug output buffer.
$this->debug_output_buffer = [];
}
// phpcs:enable WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
}
/**
* Send email via API integration.
*
* @since 4.0.0
*
* @param ConnectionInterface $connection The connection object.
*
* @throws Exception When sending fails for some reason.
*
* @return bool
*/
private function api_send( $connection ) { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh
$mailer_slug = $connection->get_mailer_slug();
// phpcs:disable WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
try {
// We need this so that the \PHPMailer class will correctly prepare all the headers.
$this->Mailer = 'mail';
/**
* Fires before email pre send.
*
* Allow to hook early to catch any early failed emails.
*
* @since 2.9.0
*
* @param MailCatcherInterface $mailcatcher The MailCatcher object.
*/
do_action( 'wp_mail_smtp_mailcatcher_pre_send_before', $this );
// Prepare everything (including the message) for sending.
if ( ! $this->preSend() ) {
$this->throw_exception( $this->ErrorInfo );
}
$mailer = wp_mail_smtp()->get_providers()->get_mailer( $mailer_slug, $this, $connection );
if ( ! $mailer ) {
$this->throw_exception( esc_html__( 'The selected mailer not found.', 'wp-mail-smtp' ) );
}
if ( ! $mailer->is_php_compatible() ) {
$this->throw_exception( esc_html__( 'The selected mailer is not compatible with your PHP version.', 'wp-mail-smtp' ) );
}
/**
* Fires before email send.
*
* Allows to hook after all the preparation before the actual sending.
*
* @since 3.3.0
*
* @param MailerAbstract $mailer The Mailer object.
*/
do_action( 'wp_mail_smtp_mailcatcher_send_before', $mailer );
/*
* Send the actual email.
* We reuse everything, that was preprocessed for usage in \PHPMailer.
*/
$mailer->send();
$is_sent = $mailer->is_email_sent();
/**
* Fires after email send.
*
* Allow to perform any actions with the data.
*
* @since 3.5.0
*
* @param MailerAbstract $mailer The Mailer object.
* @param MailCatcherInterface $mailcatcher The MailCatcher object.
*/
do_action( 'wp_mail_smtp_mailcatcher_send_after', $mailer, $this );
if ( $is_sent !== true ) {
$this->throw_exception( $mailer->get_response_error() );
}
// Clear debug messages if email is successfully sent.
Debug::clear();
return true;
} catch ( Exception $e ) {
// Add mailer to the beginning and save to display later.
$message = 'Mailer: ' . esc_html( wp_mail_smtp()->get_providers()->get_options( $mailer_slug )->get_title() ) . "\r\n";
$conflicts = new Conflicts();
if ( $conflicts->is_detected() ) {
$conflict_plugin_names = implode( ', ', $conflicts->get_all_conflict_names() );
$message .= 'Conflicts: ' . esc_html( $conflict_plugin_names ) . "\r\n";
}
$error_message = $message . $e->getMessage();
$this->debug_event_id = Debug::set( $error_message );
$this->latest_error = $error_message;
/**
* Fires after email sent failure.
*
@@ -288,28 +371,17 @@ trait MailCatcherTrait {
*
* @param string $error_message Error message.
* @param MailCatcherInterface $mailcatcher The MailCatcher object.
* @param string $mail_mailer Current mailer name.
* @param string $mailer_slug Current mailer name.
*/
do_action( 'wp_mail_smtp_mailcatcher_send_failed', $error_message, $this, $mail_mailer );
} else {
do_action( 'wp_mail_smtp_mailcatcher_send_failed', $e->getMessage(), $this, $mailer_slug );
// Clear debug messages if email is successfully sent.
Debug::clear();
if ( $this->exceptions ) {
throw $e;
}
return false;
}
/**
* Fires after email send.
*
* Allow to perform any actions with the data.
*
* @since 3.5.0
*
* @param MailerAbstract $mailer The Mailer object.
* @param MailCatcherInterface $mailcatcher The MailCatcher object.
*/
do_action( 'wp_mail_smtp_mailcatcher_send_after', $mailer, $this );
return $is_sent;
// phpcs:enable WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
}
/**
@@ -393,4 +465,84 @@ trait MailCatcherTrait {
return $this->is_emailing_blocked;
}
/**
* Return the list of properties representing
* this class' state.
*
* @since 4.0.0
*
* @return array State of this class.
*/
private function get_state_properties() {
return [
'CharSet',
'ContentType',
'Encoding',
'CustomHeader',
'Subject',
'Body',
'AltBody',
'ReplyTo',
'to',
'cc',
'bcc',
'attachment',
];
}
/**
* Return an array of relevant properties.
*
* @since 4.0.0
*
* @return array State of this class.
*/
public function get_state() {
$state = [];
foreach ( $this->get_state_properties() as $property ) {
$state[ $property ] = $this->{$property};
}
return $state;
}
/**
* Set properties from a provided array of data.
*
* @since 4.0.0
*
* @param array $state Array of properties to apply.
*/
public function set_state( $state ) { // phpcs:ignore Generic.Metrics.NestingLevel.MaxExceeded
// Filter out non-allowed properties.
$state = array_intersect_key(
$state,
array_flip( $this->get_state_properties() )
);
foreach ( $state as $property => $value ) {
if ( $property !== 'attachment' ) {
$this->{$property} = $value;
} else {
// Handle potential I/O exceptions
// in PHPMailer when attaching files.
$this->clearAttachments();
foreach ( $state['attachment'] as $attachment ) {
[ $path, , $name ] = $attachment;
try {
$this->addAttachment( $path, $name );
} catch ( Exception $e ) {
continue;
}
}
}
}
}
}

View File

@@ -2,6 +2,8 @@
namespace WPMailSMTP;
use PHPMailer\PHPMailer\Exception;
/**
* Class MailCatcher replaces the \PHPMailer\PHPMailer\PHPMailer introduced in WP 5.5 and
* modifies the email sending logic. Thus, we can use other mailers API to do what we need, or stop emails completely.
@@ -47,4 +49,18 @@ class MailCatcherV6 extends \PHPMailer\PHPMailer\PHPMailer implements MailCatche
return static::$LE; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
}
/**
* Throw PHPMailer exception.
*
* @since 4.0.0
*
* @param string $error Error message.
*
* @throws Exception PHPMailer exception.
*/
protected function throw_exception( $error ) {
throw new Exception( $error );
}
}

View File

@@ -0,0 +1,170 @@
<?php
namespace WPMailSMTP;
use WP_Upgrader;
use WPMailSMTP\Admin\DebugEvents\Migration as DebugEventsMigration;
use WPMailSMTP\Queue\Migration as QueueMigration;
/**
* Class Migrations.
*
* @since 4.0.0
*/
class Migrations {
/**
* Register hooks.
*
* @since 4.0.0
*/
public function hooks() {
// Initialize migrations during request in the admin panel only.
add_action( 'admin_init', [ $this, 'init_migrations_on_request' ] );
// Initialize migrations after plugin update.
add_action( 'upgrader_process_complete', [ $this, 'init_migrations_after_upgrade' ], PHP_INT_MAX, 2 );
add_action(
'wp_ajax_nopriv_wp_mail_smtp_init_migrations',
[ $this, 'init_migrations_ajax_handler' ]
);
}
/**
* Initialize DB migrations during request.
*
* @since 4.0.0
*/
public function init_migrations_on_request() {
// Do not initialize migrations during AJAX and cron requests.
if ( WP::is_doing_ajax() || wp_doing_cron() ) {
return;
}
$this->init_migrations();
}
/**
* Initialize DB migrations.
*
* @since 4.0.0
*/
private function init_migrations() {
$migrations = $this->get_migrations();
foreach ( $migrations as $migration ) {
if ( is_subclass_of( $migration, MigrationAbstract::class ) && $migration::is_enabled() ) {
( new $migration() )->init();
}
}
}
/**
* Get migrations classes.
*
* @since 4.0.0
*
* @return array Migrations classes.
*/
private function get_migrations() {
$migrations = [
Migration::class,
DebugEventsMigration::class,
QueueMigration::class,
];
/**
* Filters DB migrations classes.
*
* @deprecated 4.0.0
*
* @since 3.0.0
*
* @param array $migrations Migrations classes.
*/
$migrations = apply_filters_deprecated(
'wp_mail_smtp_core_init_migrations',
[ $migrations ],
'3.10.0',
'wp_mail_smtp_migrations_get_migrations'
);
/**
* Filters DB migrations classes.
*
* @since 4.0.0
*
* @param array $migrations Migrations classes.
*/
return apply_filters( 'wp_mail_smtp_migrations_get_migrations', $migrations );
}
/**
* Initialize DB migrations after plugin update.
* Initiate ajax call to perform the migration with the new plugin version code.
*
* @since 4.0.0
*
* @param WP_Upgrader $upgrader WP_Upgrader instance.
* @param array $options Array of update data.
*/
public function init_migrations_after_upgrade( $upgrader, $options ) {
if (
// Skip if in admin panel.
( is_admin() && ! wp_doing_ajax() ) ||
// Skip if it's update from plugins list page.
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
( wp_doing_ajax() && isset( $_REQUEST['action'] ) && $_REQUEST['action'] === 'update-plugin' )
) {
return;
}
$plugins = [];
if ( isset( $options['plugins'] ) && is_array( $options['plugins'] ) ) {
$plugins = $options['plugins'];
} elseif ( isset( $options['plugin'] ) && is_string( $options['plugin'] ) ) {
$plugins = [ $options['plugin'] ];
}
if (
! in_array( 'wp-mail-smtp/wp_mail_smtp.php', $plugins, true ) &&
! in_array( 'wp-mail-smtp-pro/wp_mail_smtp.php', $plugins, true )
) {
return;
}
$url = add_query_arg(
[
'action' => 'wp_mail_smtp_init_migrations',
],
admin_url( 'admin-ajax.php' )
);
$timeout = (int) ini_get( 'max_execution_time' );
$args = [
'sslverify' => false,
'timeout' => $timeout ? $timeout : 30,
];
wp_remote_post( $url, $args );
}
/**
* Initialize migrations via AJAX request.
*
* @since 4.0.0
*/
public function init_migrations_ajax_handler() {
$this->init_migrations();
wp_send_json_success();
}
}

View File

@@ -0,0 +1,58 @@
<?php
namespace WPMailSMTP;
/**
* OptimizedEmailSending class.
*
* @since 4.0.0
*/
class OptimizedEmailSending {
/**
* The slug of the option that toggles optimized email sending.
*
* @since 4.0.0
*/
const SETTINGS_SLUG = 'optimize_email_sending_enabled';
/**
* Register hooks.
*
* @since 4.0.0
*/
public function hooks() {
// Avoid enqueueing emails if current request
// is a cron request, a CLI request,
// or an ActionScheduler task as 3rd party plugins might
// be carrying out their own sending optimizations
// through it.
if (
self::is_enabled() &&
! ( defined( 'WP_CLI' ) && WP_CLI ) &&
! wp_doing_cron() &&
! doing_action( 'action_scheduler_run_queue' )
) {
// Enable the queue.
add_filter( 'wp_mail_smtp_queue_is_enabled', '__return_true' );
// Start enqueueing emails.
add_filter( 'wp_mail_smtp_mail_catcher_send_enqueue_email', '__return_true' );
}
}
/**
* Whether optimized email sending is enabled.
*
* @since 4.0.0
*
* @return bool
*/
public static function is_enabled() {
$value = Options::init()->get( 'general', self::SETTINGS_SLUG );
return (bool) $value;
}
}

View File

@@ -785,12 +785,20 @@ class Options {
/** @noinspection PhpUndefinedConstantInspection */
$return = $this->is_const_defined( $group, $key ) ? WPMS_DO_NOT_SEND : $value;
break;
case SummaryReportEmail::SETTINGS_SLUG:
/** No inspection comment @noinspection PhpUndefinedConstantInspection */
$return = $this->is_const_defined( $group, $key ) ?
$this->parse_boolean( WPMS_SUMMARY_REPORT_EMAIL_DISABLED ) :
$value;
break;
case OptimizedEmailSending::SETTINGS_SLUG:
/** No inspection comment @noinspection PhpUndefinedConstantInspection */
$return = $this->is_const_defined( $group, $key ) ?
$this->parse_boolean( WPMS_OPTIMIZED_EMAIL_SENDING_ENABLED ) :
$value;
break;
}
break;
@@ -1108,9 +1116,14 @@ class Options {
/** @noinspection PhpUndefinedConstantInspection */
$return = defined( 'WPMS_DO_NOT_SEND' ) && WPMS_DO_NOT_SEND;
break;
case SummaryReportEmail::SETTINGS_SLUG:
$return = defined( 'WPMS_SUMMARY_REPORT_EMAIL_DISABLED' );
break;
case OptimizedEmailSending::SETTINGS_SLUG:
$return = defined( 'WPMS_OPTIMIZED_EMAIL_SENDING_ENABLED' );
break;
}
break;
@@ -1236,6 +1249,7 @@ class Options {
case 'uninstall':
case UsageTracking::SETTINGS_SLUG:
case SummaryReportEmail::SETTINGS_SLUG:
case OptimizedEmailSending::SETTINGS_SLUG:
$options[ $group ][ $option_name ] = (bool) $option_value;
break;
}

View File

@@ -30,6 +30,42 @@ class Processor {
*/
private $connections_manager;
/**
* This attribute will hold the arguments passed to the `wp_mail` function.
*
* @since 4.0.0
*
* @var array
*/
private $original_wp_mail_args;
/**
* This attribute will hold the arguments passed to the `wp_mail` function and filtered via `wp_mail` filter.
*
* @since 4.0.0
*
* @var array
*/
private $filtered_wp_mail_args;
/**
* This attribute will hold the From address filtered via the `wp_mail_from` filter.
*
* @since 4.0.0
*
* @var string
*/
private $filtered_from_email;
/**
* This attribute will hold the From name filtered via the `wp_mail_from_name` filter.
*
* @since 4.0.0
*
* @var string
*/
private $filtered_from_name;
/**
* Class constructor.
*
@@ -58,6 +94,9 @@ class Processor {
// High priority number tries to ensure our plugin code executes last and respects previous hooks, if not forced.
add_filter( 'wp_mail_from', array( $this, 'filter_mail_from_email' ), PHP_INT_MAX );
add_filter( 'wp_mail_from_name', array( $this, 'filter_mail_from_name' ), PHP_INT_MAX );
add_action( 'wp_mail', [ $this, 'capture_early_wp_mail_filter_call' ], - PHP_INT_MAX );
add_action( 'wp_mail', [ $this, 'capture_late_wp_mail_filter_call' ], PHP_INT_MAX );
}
/**
@@ -243,6 +282,9 @@ class Processor {
*/
public function filter_mail_from_email( $wp_email ) {
// Save the original from address.
$this->filtered_from_email = filter_var( $wp_email, FILTER_VALIDATE_EMAIL );
$connection = $this->connections_manager->get_mail_connection();
$connection_options = $connection->get_options();
$forced = $connection_options->get( 'mail', 'from_email_force' );
@@ -279,6 +321,9 @@ class Processor {
*/
public function filter_mail_from_name( $name ) {
// Save the original from name.
$this->filtered_from_name = $name;
$connection = $this->connections_manager->get_mail_connection();
$connection_options = $connection->get_options();
$force = $connection_options->get( 'mail', 'from_name_force' );
@@ -377,4 +422,106 @@ class Processor {
}
}
}
/**
* Capture `wp_mail` filter call on earliest priority.
*
* Currently used to capture the original `wp_mail` arguments before they are filtered.
*
* @since 4.0.0
*
* @param array $args The original `wp_mail` arguments.
*
* @return array
*/
public function capture_early_wp_mail_filter_call( $args ) {
$this->original_wp_mail_args = $args;
return $args;
}
/**
* Capture `wp_mail` filter call on latest priority.
*
* Currently used to capture the `wp_mail` arguments after they are filtered
* and capture `wp_mail` function call.
*
* @since 4.0.0
*
* @param array $args The filtered `wp_mail` arguments.
*
* @return array
*/
public function capture_late_wp_mail_filter_call( $args ) {
$this->filtered_wp_mail_args = $args;
$this->capture_wp_mail_call();
return $args;
}
/**
* Capture `wp_mail` function call.
*
* @since 4.0.0
*/
private function capture_wp_mail_call() {
/**
* Fires on `wp_mail` function call.
*
* @since 4.0.0
*/
do_action( 'wp_mail_smtp_processor_capture_wp_mail_call' );
}
/**
* Get the original `wp_mail` arguments.
*
* @since 4.0.0
*
* @return array
*/
public function get_original_wp_mail_args() {
return $this->original_wp_mail_args;
}
/**
* Get the filtered `wp_mail` arguments.
*
* @since 4.0.0
*
* @return array
*/
public function get_filtered_wp_mail_args() {
return $this->filtered_wp_mail_args;
}
/**
* Get the filtered `wp_mail_from` value.
*
* @since 4.0.0
*
* @return string
*/
public function get_filtered_from_email() {
return $this->filtered_from_email;
}
/**
* Get the filtered `wp_mail_from_name` value.
*
* @since 4.0.0
*
* @return string
*/
public function get_filtered_from_name() {
return $this->filtered_from_name;
}
}

View File

@@ -0,0 +1,242 @@
<?php
namespace WPMailSMTP\Queue;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
use WPMailSMTP\Uploads;
/**
* Class Attachments.
*
* @since 4.0.0
*/
class Attachments {
/**
* Process a list of file attachments.
*
* @since 4.0.0
*
* @param array $attachments List of attachments.
*
* @return array List of attachments.
*/
public function process_attachments( $attachments ) {
$attachments = array_map(
function( $attachment ) {
[ $path, , $name, , , $is_string_attachment ] = $attachment;
$path = $this->process_attachment( $path, $name, $is_string_attachment );
if ( ! empty( $path ) ) {
$attachment[0] = $path;
}
return $attachment;
},
$attachments
);
return $attachments;
}
/**
* Process an attachment,obfuscating its path
* and storing its file on disk.
*
* @since 4.0.0
*
* @param string $path The path to obfuscate.
* @param string $name The name of the file at $path.
* @param bool $is_string_attachment Whether this attachment is a string attachment.
*
* @return string|false New path of the attachment, or false for no path.
*/
private function process_attachment( $path, $name = '', $is_string_attachment = false ) {
$file_content = $this->get_attachment_file_content( $path, $is_string_attachment );
if ( $file_content === false ) {
return false;
}
if ( ! $is_string_attachment && $name === '' ) {
$name = wp_basename( $path );
}
$name = sanitize_file_name( $name );
$obfuscated_path = $this->store_file( $file_content, $name );
if ( empty( $obfuscated_path ) ) {
return $path;
}
return $obfuscated_path;
}
/**
* Return the contents of a given file.
*
* @since 4.0.0
*
* @param string $path The file's path.
* @param bool $is_string_attachment Whether this file is a string attachment.
*
* @return string File contents.
*/
private function get_attachment_file_content( $path, $is_string_attachment ) {
if ( ! $is_string_attachment ) {
if ( ! file_exists( $path ) ) {
return false;
}
return file_get_contents( $path );
}
return $path;
}
/**
* Store a file.
*
* @since 4.0.0
*
* @param string $file_content The file's contents.
* @param string $original_filename The original file's name.
*
* @return string The file's path.
*/
private function store_file( $file_content, $original_filename ) {
$uploads_directory = $this->get_uploads_directory();
if ( is_wp_error( $uploads_directory ) ) {
return false;
}
if ( ! is_dir( $uploads_directory ) ) {
wp_mkdir_p( $uploads_directory );
// Check if the .htaccess exists in the root upload directory, if not - create it.
Uploads::create_upload_dir_htaccess_file();
// Check if the index.html exists in the directories, if not - create them.
Uploads::create_index_html_file( Uploads::upload_dir()['path'] );
Uploads::create_index_html_file( $uploads_directory );
}
$file_extension = pathinfo( $original_filename, PATHINFO_EXTENSION );
$filename = wp_unique_filename( $uploads_directory, wp_generate_password( 32, false, false ) . '.' . $file_extension );
$uploads_directory = trailingslashit( $uploads_directory );
if ( ! is_writeable( $uploads_directory ) ) {
return false;
}
$upload_path = $uploads_directory . $filename;
if ( file_put_contents( $upload_path, $file_content ) !== false ) { // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_read_file_put_contents
return $upload_path;
}
return false;
}
/**
* Delete attachments, removing their files from disk.
*
* @since 4.0.0
*
* @param null|array $attachments List of attachments to cleanup, or null for all attachments.
* @param null|DateTime $before_datetime The datetime attachments should be older than
* to be removed, or null for all attachments.
*
* @return void.
*/
public function delete_attachments( $attachments = null, $before_datetime = null ) { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh
$uploads_directory = $this->get_uploads_directory();
if (
is_wp_error( $uploads_directory ) ||
! is_dir( $uploads_directory )
) {
return;
}
$files = [];
// If no attachment list is provided, just iterate over all files in our uploads directory.
if ( is_null( $attachments ) ) {
$nodes = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator( $uploads_directory, RecursiveDirectoryIterator::SKIP_DOTS ),
RecursiveIteratorIterator::CHILD_FIRST
);
$files = [];
foreach ( $nodes as $fileinfo ) {
if ( ! $fileinfo->isDir() ) {
$files[] = $fileinfo->getRealPath();
}
}
} else {
// Map attachments to their paths.
$files = wp_list_pluck( $attachments, 0 );
// Exclude any files that aren't in our uploads directory.
$files = array_filter(
$files,
function( $file ) use ( $uploads_directory ) {
return trailingslashit( dirname( $file ) ) === $uploads_directory;
}
);
}
// Skip any file that doesn't exist.
$files = array_filter(
$files,
function( $file ) {
return file_exists( $file );
}
);
if ( ! is_null( $before_datetime ) ) {
// Skip any file that isn't older than the provided datetime.
$before_timestamp = $before_datetime->getTimestamp();
$files = array_filter(
$files,
function( $file ) use ( $before_timestamp ) {
return (
filemtime( $file ) !== false &&
filemtime( $file ) < $before_timestamp
);
}
);
}
foreach ( $files as $file ) {
@unlink( $file );
}
}
/**
* Get the upload directory path.
*
* @since 4.0.0
*
* @return string|WP_Error The upload directory path.
*/
private function get_uploads_directory() {
$uploads_directory = Uploads::upload_dir();
if ( is_wp_error( $uploads_directory ) ) {
return $uploads_directory;
}
return trailingslashit( trailingslashit( $uploads_directory['path'] ) . 'queue_attachments' );
}
}

View File

@@ -0,0 +1,608 @@
<?php
namespace WPMailSMTP\Queue;
use WPMailSMTP\WP;
use DateTime;
use DateTimeZone;
use Exception;
/**
* Class Email.
*
* @since 4.0.0
*/
class Email {
/**
* This email is enqueued.
*
* @since 4.0.0
*/
const STATUS_QUEUED = 0;
/**
* This email is being processed.
*
* @since 4.0.0
*/
const STATUS_PROCESSING = 1;
/**
* This email has been processed.
*
* @since 4.0.0
*/
const STATUS_PROCESSED = 2;
/**
* ID of the email.
*
* @since 4.0.0
*
* @var int
*/
private $id = 0;
/**
* Serialized WPMailInitiator state of this email.
*
* @since 4.0.0
*
* @var array
*/
private $initiator_state = [];
/**
* Serialized arguments of this email's original wp_mail call.
*
* @since 4.0.0
*
* @var array
*/
private $wp_mail_args = [];
/**
* Serialized connection data of this email.
*
* @since 4.0.0
*
* @var array
*/
private $connection_data = [];
/**
* Serialized MailCatcher state of this email.
*
* @since 4.0.0
*
* @var array
*/
private $mailer_state = [];
/**
* Status of this email.
*
* @since 4.0.0
*
* @var int
*/
private $status = 0;
/**
* Date and time this email was enqueued at.
*
* @since 4.0.0
*
* @var DateTime
*/
private $date_enqueued;
/**
* Date and time this email was processed at.
*
* @since 4.0.0
*
* @var DateTime
*/
private $date_processed;
/**
* Email constructor.
*
* @since 4.0.0
*/
public function __construct() {
$this->date_enqueued = new DateTime( 'now', new DateTimeZone( 'UTC' ) );
}
/**
* Get a list of allowed statuses.
*
* @since 4.0.0
*
* @return array
*/
public static function get_statuses() {
return [
self::STATUS_QUEUED,
self::STATUS_PROCESSING,
self::STATUS_PROCESSED,
];
}
/**
* Construct an email from an array of data.
*
* @since 4.0.0
*
* @param object $data Database row object.
*
* @throws Exception If supplied data is missing or malformed.
*
* @return Email
*/
public static function from_data( $data ) { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh
if ( is_null( $data ) ) {
throw new Exception( esc_html__( 'Record not found in DB', 'wp-mail-smtp' ) );
}
if (
! is_object( $data ) ||
! property_exists( $data, 'data' ) ||
! isset(
$data->id,
$data->status,
$data->date_enqueued
)
) {
throw new Exception( esc_html__( 'Invalid record format', 'wp-mail-smtp' ) );
}
// Data can be null if email has been anonymized.
// Only check for valid JSON if data isn't null.
if ( ! is_null( $data->data ) && ! WP::is_json( $data->data ) ) {
throw new Exception(
sprintf(
/* translators: %1$s - JSON error message. */
esc_html__( 'Data JSON decoding error: %1$s', 'wp-mail-smtp' ),
esc_html( json_last_error_msg() )
)
);
}
$email = new Email();
$email_data = is_null( $data->data ) ? [] : json_decode( $data->data, true );
$email_data = wp_parse_args(
$email_data,
[
'initiator_state' => [],
'wp_mail_args' => [],
'connection_data' => [],
'mailer_state' => [],
]
);
$email->id = (int) $data->id;
$email->initiator_state = $email_data['initiator_state'];
$email->wp_mail_args = $email_data['wp_mail_args'];
$email->connection_data = $email_data['connection_data'];
$email->mailer_state = $email_data['mailer_state'];
$email->status = (int) $data->status;
$email->date_enqueued = $email->get_datetime( $data->date_enqueued );
if ( isset( $data->date_processed ) ) {
$email->date_processed = $email->get_datetime( $data->date_processed );
}
return $email;
}
/**
* Get this email's ID.
*
* @since 4.0.0
*
* @return int
*/
public function get_id() {
return (int) $this->id;
}
/**
* Get this email's status.
*
* @since 4.0.0
*
* @return int
*/
public function get_status() {
return $this->status;
}
/**
* Set this email's status.
*
* @since 4.0.0
*
* @param int $status Email status.
*
* @return Email
*/
public function set_status( $status ) {
$status = (int) $status;
if ( ! in_array( $status, self::get_statuses(), true ) ) {
$status = self::STATUS_QUEUED;
}
$this->status = $status;
return $this;
}
/**
* Get this email's `wp_mail` call arguments.
*
* @since 4.0.0
*
* @return array
*/
public function get_wp_mail_args() {
return $this->wp_mail_args;
}
/**
* Set this email's `wp_mail` call arguments.
*
* @since 4.0.0
*
* @param array $args Array of arguments.
*
* @return Email
*/
public function set_wp_mail_args( $args ) {
$args = wp_parse_args(
$args,
[
'headers' => '',
'attachments' => [],
]
);
$this->wp_mail_args = $args;
return $this;
}
/**
* Get this email's MailCatcher state.
*
* @since 4.0.0
*
* @return array
*/
public function get_connection_data() {
return $this->connection_data;
}
/**
* Set this email's connection data.
*
* @since 4.0.0
*
* @param array $data Connection data.
*
* @return Email
*/
public function set_connection_data( $data ) {
$this->connection_data = wp_parse_args(
$data,
[
'from_email' => '',
'from_name' => '',
]
);
return $this;
}
/**
* Get this email's MailCatcher state.
*
* @since 4.0.0
*
* @return array
*/
public function get_mailer_state() {
return $this->mailer_state;
}
/**
* Set this email's MailCatcher state.
*
* @since 4.0.0
*
* @param array $state MailCatcher state.
*
* @return Email
*/
public function set_mailer_state( $state ) {
$this->mailer_state = wp_parse_args(
$state,
[
'CharSet' => '',
'ContentType' => '',
'Encoding' => '',
'CustomHeader' => '',
'Subject' => '',
'Body' => '',
'AltBody' => '',
'ReplyTo' => '',
'to' => '',
'cc' => '',
'bcc' => '',
'attachment' => '',
]
);
return $this;
}
/**
* Get this email's WPMailInitiator state.
*
* @since 4.0.0
*
* @return array
*/
public function get_initiator_state() {
return $this->initiator_state;
}
/**
* Set this email's WPMailInitiator state.
*
* @since 4.0.0
*
* @param array $state MailCatcher state.
*
* @return Email
*/
public function set_initiator_state( $state ) {
$this->initiator_state = wp_parse_args(
$state,
[
'file' => '',
'line' => '',
'backtrace' => '',
]
);
return $this;
}
/**
* Get the date and time this email
* was enqueued at.
*
* @since 4.0.0
*
* @return DateTime
*/
public function get_date_enqueued() {
return $this->date_enqueued;
}
/**
* Set the date and time this email
* was enqueued at.
*
* @since 4.0.0
*
* @param DateTime $datetime Date and time of enqueueing.
*
* @return Email
*/
public function set_date_enqueued( $datetime ) {
$this->date_enqueued = $this->get_datetime( $datetime );
return $this;
}
/**
* Get the date and time this email
* was processed at.
*
* @since 4.0.0
*
* @return DateTime
*/
public function get_date_processed() {
return $this->date_processed;
}
/**
* Set the date and time this email
* was processed at.
*
* @since 4.0.0
*
* @param DateTime $datetime Date and time of processing.
*
* @return Email
*/
public function set_date_processed( $datetime ) {
$this->date_processed = $this->get_datetime( $datetime );
return $this;
}
/**
* Convert a database string to a DateTime
* object, if necessary.
*
* @since 4.0.0
*
* @param string $datetime Date and time.
*
* @return DateTime
*/
private function get_datetime( $datetime ) {
if ( ! is_a( $datetime, DateTime::class ) ) {
// Validate the date. Time is ignored.
$mm = substr( $datetime, 5, 2 );
$jj = substr( $datetime, 8, 2 );
$aa = substr( $datetime, 0, 4 );
$valid_date = wp_checkdate( $mm, $jj, $aa, $datetime );
$timezone = new DateTimeZone( 'UTC' );
if ( $valid_date ) {
$datetime = DateTime::createFromFormat( WP::datetime_mysql_format(), $datetime, $timezone );
} else {
$datetime = new DateTime( 'now', $timezone );
}
}
return $datetime;
}
/**
* Erase any potentially sensitive data.
*
* @since 4.0.0
*
* @return @return Email
*/
public function anonymize() {
$this->initiator_state = null;
$this->wp_mail_args = null;
$this->connection_data = null;
$this->mailer_state = null;
return $this;
}
/**
* Save a new or modified email in DB.
*
* @since 4.0.0
*
* @throws Exception If data can't be encoded,
* or a database error occurred.
*
* @return int New or updated email ID.
*/
public function save() {
global $wpdb;
$table = Queue::get_table_name();
$data = [
'initiator_state' => $this->initiator_state,
'wp_mail_args' => $this->wp_mail_args,
'connection_data' => $this->connection_data,
'mailer_state' => $this->mailer_state,
];
$data = array_filter( $data );
if ( ! empty( $data ) ) {
$data = wp_json_encode(
[
'initiator_state' => $this->initiator_state,
'wp_mail_args' => $this->wp_mail_args,
'connection_data' => $this->connection_data,
'mailer_state' => $this->mailer_state,
]
);
if ( $data === false ) {
throw new Exception(
sprintf(
/* translators: %1$s - JSON error message. */
esc_html__( 'Data JSON encoding error: %1$s', 'wp-mail-smtp' ),
esc_html( json_last_error_msg() )
)
);
}
} else {
$data = null;
}
if ( (bool) $this->get_id() ) {
// Update the existing DB table record.
$result = $wpdb->update( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching
$table,
[
'data' => $data,
'status' => $this->status,
'date_processed' => $this->get_date_processed()->format( WP::datetime_mysql_format() ),
],
[
'id' => $this->get_id(),
],
[
'%s', // data.
'%s', // status.
'%s', // date_processed.
],
[
'%d',
]
);
$email_id = $this->get_id();
} else {
// Create a new DB table record.
$result = $wpdb->insert(
$table,
[
'data' => $data,
'status' => $this->status,
'date_enqueued' => $this->get_date_enqueued()->format( WP::datetime_mysql_format() ),
],
[
'%s', // data.
'%s', // status.
'%s', // date_enqueued.
]
);
$email_id = $wpdb->insert_id;
}
if ( $result === false ) {
throw new Exception(
sprintf(
/* translators: %1$s - Database error message. */
esc_html__( 'Insert/update SQL query error: %1$s', 'wp-mail-smtp' ),
esc_html( $wpdb->last_error )
)
);
}
return (int) $email_id;
}
}

View File

@@ -0,0 +1,87 @@
<?php
namespace WPMailSMTP\Queue;
use WPMailSMTP\MigrationAbstract;
/**
* Class Migration.
*
* @since 4.0.0
*/
class Migration extends MigrationAbstract {
/**
* Version of the database table(s) for queue functionality.
*
* @since 4.0.0
*/
const DB_VERSION = 1;
/**
* Option key where we save the current DB version for queue functionality.
*
* @since 4.0.0
*/
const OPTION_NAME = 'wp_mail_smtp_queue_db_version';
/**
* Option key where we save any errors while creating the queue DB table.
*
* @since 4.0.0
*/
const ERROR_OPTION_NAME = 'wp_mail_smtp_queue_db_error';
/**
* Whether the queue is enabled.
*
* @since 4.0.0
*
* @return bool
*/
public static function is_enabled() {
return wp_mail_smtp()->get_queue()->is_enabled();
}
/**
* Initial migration - create the table structure.
*
* @since 4.0.0
*/
protected function migrate_to_1() {
global $wpdb;
$table = Queue::get_table_name();
$collate = ! empty( $wpdb->collate ) ? "COLLATE='{$wpdb->collate}'" : '';
/*
* Create the table.
*/
$sql = "
CREATE TABLE `$table` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`data` LONGTEXT NULL,
`status` TINYINT UNSIGNED NOT NULL DEFAULT '0',
`date_enqueued` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`date_processed` TIMESTAMP NULL,
PRIMARY KEY (id),
INDEX status (status),
INDEX date_processed (date_processed)
)
ENGINE='InnoDB'
{$collate};";
$result = $wpdb->query( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
if ( ! empty( $wpdb->last_error ) ) {
update_option( self::ERROR_OPTION_NAME, $wpdb->last_error, false );
}
// Save the current version to DB.
if ( $result !== false ) {
$this->update_db_ver( 1 );
}
}
}

View File

@@ -0,0 +1,760 @@
<?php
namespace WPMailSMTP\Queue;
use DateTime;
use DateTimeZone;
use Exception;
use WPMailSMTP\Admin\DebugEvents\DebugEvents;
use WPMailSMTP\Tasks\Queue\SendEnqueuedEmailTask;
use WPMailSMTP\WPMailArgs;
use WPMailSMTP\WP;
/**
* Class Queue.
*
* @since 4.0.0
*/
class Queue {
/**
* The email being currently handled.
*
* @since 4.0.0
*
* @var Email
*/
private $email;
/**
* A list of registered hooks at the time
* of email sending.
*
* @since 4.0.0
*
* @var array
*/
private $registered_wp_mail_hooks = [];
/**
* Whether the queue is currently enabled.
*
* @since 4.0.0
*
* @return bool
*/
public function is_enabled() {
/**
* Filters whether the queue is currently enabled.
*
* @since 4.0.0
*
* @param bool $enabled Whether the queue is currently enabled.
*/
return apply_filters( 'wp_mail_smtp_queue_is_enabled', false );
}
/**
* Short-circuit and handle an ongoing PHPMailer `send` call.
*
* @since 4.0.0
*
* @return bool
*/
public function enqueue_email() { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
if ( ! $this->is_valid_db() ) {
return false;
}
global $phpmailer;
$wp_mail_args = wp_mail_smtp()->get_processor()->get_filtered_wp_mail_args();
$initiator = wp_mail_smtp()->get_wp_mail_initiator();
$processor = wp_mail_smtp()->get_processor();
$initiator_state = [
'file' => $initiator->get_file(),
'line' => $initiator->get_line(),
'backtrace' => $initiator->get_backtrace(),
];
$connection_data = [
'from_email' => $processor->get_filtered_from_email(),
'from_name' => $processor->get_filtered_from_name(),
];
// Keep a reference to the original attachments,
// if something goes wrong while enqueueing the email.
$original_attachments = $phpmailer->getAttachments();
// Obfuscate attachment paths for the enqueued email.
$processed_attachments = ( new Attachments() )->process_attachments( $original_attachments );
// Set obfuscated path attachments.
$this->set_attachments( $processed_attachments );
// Add queued date header in the same format as "Date" header.
$phpmailer->addCustomHeader( 'X-WP-Mail-SMTP-Queued', $phpmailer::rfcDate() );
$email = ( new Email() )
->set_wp_mail_args( $wp_mail_args )
->set_initiator_state( $initiator_state )
->set_connection_data( $connection_data )
->set_mailer_state( $phpmailer->get_state() );
// Add the email to the queue.
try {
$this->add_email( $email );
} catch ( Exception $e ) {
// Cleanup any obfuscated path attachments.
$this->cleanup_attachments();
// Reset original attachments.
$this->set_attachments( $original_attachments );
$message = sprintf(
/* translators: %1$s - exception message. */
esc_html__( '[Emails Queue] Skipped enqueueing email. %1$s.', 'wp-mail-smtp' ),
esc_html( $e->getMessage() )
);
DebugEvents::add_debug( $message );
return false;
}
return true;
}
/**
* Send an email. Can only be called
* by a running SendEnqueuedEmailTask.
*
* @since 4.0.0
*
* @param int|string $email_id Email's ID.
*/
public function send_email( $email_id ) { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
// This method can't be called directly.
if ( ! doing_action( SendEnqueuedEmailTask::ACTION ) ) {
$message = sprintf(
/* translators: %1$d - email ID. */
esc_html__( '[Emails Queue] Skipped email sending from the queue. Queue::send_email method was called directly. Email ID: %1$d.', 'wp-mail-smtp' ),
$email_id
);
DebugEvents::add_debug( $message );
return;
}
try {
$email = $this->get_email( $email_id );
} catch ( Exception $e ) {
$this->delete_email( $email_id );
$message = sprintf(
/* translators: %1$s - exception message; %2$s - email ID. */
esc_html__( '[Emails Queue] Skipped email sending from the queue. %1$s. Email ID: %2$s', 'wp-mail-smtp' ),
esc_html( $e->getMessage() ),
$email_id
);
DebugEvents::add_debug( $message );
return;
}
// Bail early if the email still enqueued, or already processed.
if ( $email->get_status() !== Email::STATUS_PROCESSING ) {
$message = sprintf(
/* translators: %1$d - email ID; %2$s - email status. */
esc_html__( '[Emails Queue] Skipped email sending from the queue. Wrong email status. Email ID: %1$d, email status: %2$s.', 'wp-mail-smtp' ),
$email_id,
$email->get_status()
);
DebugEvents::add_debug( $message );
return;
}
// Keep a reference to the email
// being sent so that it's accessible
// across hooks.
$this->email = $email;
// Un-hook all user-defined hooks.
$this->clear_wp_mail_hooks();
// Stop enqueueing emails.
add_filter( 'wp_mail_smtp_mail_catcher_send_enqueue_email', '__return_false', PHP_INT_MAX );
// Re-hook Processor functionality, before applying PHPMailer state,
// so that From and From Name are correctly filtered.
wp_mail_smtp()->get_processor()->hooks();
// Apply the email's PHPMailer state.
add_action( 'phpmailer_init', [ $this, 'apply_mailer_state' ], PHP_INT_MAX );
// Retrieve original wp_mail arguments.
$wp_mail_args = new WPMailArgs( $email->get_wp_mail_args() );
// Inject user-filtered From and From Name.
$wp_mail_headers = $wp_mail_args->get_headers();
$wp_mail_headers[] = $this->get_connection_from_header( $email->get_connection_data() );
// Inject the original initiator state.
add_filter( 'wp_mail_smtp_wp_mail_initiator_set_initiator', [ $this, 'apply_initiator_state' ] );
// Send the email.
wp_mail(
$wp_mail_args->get_to_email(),
$wp_mail_args->get_subject(),
$wp_mail_args->get_message(),
$wp_mail_headers,
$wp_mail_args->get_attachments()
);
// Update the email.
try {
$this->email->set_status( Email::STATUS_PROCESSED )
->set_date_processed( new DateTime( 'now', new DateTimeZone( 'UTC' ) ) )
->anonymize()
->save();
} catch ( Exception $e ) {
$this->delete_email( $email_id );
$message = sprintf(
/* translators: %1$s - exception message; %2$d - email ID. */
esc_html__( '[Emails Queue] Failed to update queue record after sending email from the queue. %1$s. Email ID: %2$d', 'wp-mail-smtp' ),
esc_html( $e->getMessage() ),
$email_id
);
DebugEvents::add_debug( $message );
}
// Cleanup any attachments.
$this->cleanup_attachments();
// Stop applying PHPMailer state.
remove_action( 'phpmailer_init', [ $this, 'apply_mailer_state' ], PHP_INT_MAX );
// Clear the email reference.
$this->email = null;
// Re-hook all user-defined hooks.
$this->restore_wp_mail_hooks();
// Start enqueueing emails again.
remove_filter( 'wp_mail_smtp_mail_catcher_send_enqueue_email', '__return_false', PHP_INT_MAX );
}
/**
* Return the current email's WPMailInitiator state.
*
* @since 4.0.0
*
* @return array WPMailInitiator state.
*/
public function apply_initiator_state() {
return $this->email->get_initiator_state();
}
/**
* Apply state to the current mailer.
*
* @since 4.0.0
*
* @param PHPMailer $phpmailer PHPMailer instance.
*/
public function apply_mailer_state( &$phpmailer ) {
$phpmailer->set_state( $this->email->get_mailer_state() );
}
/**
* Get the table name.
*
* @since 4.0.0
*
* @return string Table name, prefixed.
*/
public static function get_table_name() {
global $wpdb;
return $wpdb->prefix . 'wpmailsmtp_emails_queue';
}
/**
* Count processing or processed emails since a given date.
*
* @since 4.0.0
*
* @param null|DateTime $since_datetime Date to count from, or null for all emails.
*
* @return int Email count.
*/
public function count_processed_emails( DateTime $since_datetime = null ) {
if ( ! $this->is_valid_db() ) {
return 0;
}
global $wpdb;
$table = self::get_table_name();
$where = $wpdb->prepare(
'status IN (%d, %d)',
Email::STATUS_PROCESSING,
Email::STATUS_PROCESSED
);
if ( ! is_null( $since_datetime ) ) {
$where .= $wpdb->prepare(
' AND date_processed >= %s',
$since_datetime->format( WP::datetime_mysql_format() )
);
}
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$count = $wpdb->get_var(
"SELECT COUNT(*)
FROM $table
WHERE $where;"
);
// phpcs:enable WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
return (int) $count;
}
/**
* Count queued emails.
*
* @since 4.0.0
*
* @return int Email count.
*/
public function count_queued_emails() {
if ( ! $this->is_valid_db() ) {
return 0;
}
global $wpdb;
$table = self::get_table_name();
$where = $wpdb->prepare( 'status = %d', Email::STATUS_QUEUED );
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$count = $wpdb->get_var(
"SELECT COUNT(*)
FROM $table
WHERE $where;"
);
// phpcs:enable WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
return (int) $count;
}
/**
* Schedule emails for sending.
*
* @since 4.0.0
*/
public function process() { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
if ( ! $this->is_valid_db() ) {
return;
}
/**
* Filters the amount of emails the queue should process.
*
* @since 4.0.0
*
* @param int|null $count Amount of emails to process.
*/
$count = apply_filters( 'wp_mail_smtp_queue_process_count', null );
// If the queue has been disabled, just process all emails.
if ( ! $this->is_enabled() ) {
$count = null;
}
$emails = $this->get_emails( $count );
$task = new SendEnqueuedEmailTask();
foreach ( $emails as $email ) {
try {
$email->set_status( Email::STATUS_PROCESSING )
->set_date_processed( new DateTime( 'now', new DateTimeZone( 'UTC' ) ) )
->save();
} catch ( Exception $e ) {
$this->delete_email( $email->get_id() );
$message = sprintf(
/* translators: %1$s - exception message. */
esc_html__( '[Emails Queue] Skipped processing enqueued email. %1$s. Email ID: %2$d', 'wp-mail-smtp' ),
esc_html( $e->getMessage() ),
$email->get_id()
);
DebugEvents::add_debug( $message );
continue;
}
$task->schedule( $email->get_id() );
}
}
/**
* Cleanup emails processed before a given date.
*
* @since 4.0.0
*/
public function cleanup() { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
/**
* Filters the date before which emails should
* be removed from the queue.
*
* @since 4.0.0
*
* @param DateTime|null $datetime Date before which to remove emails.
*/
$datetime = apply_filters( 'wp_mail_smtp_queue_cleanup_before_datetime', null );
// If the queue has been disabled, just cleanup all emails.
if ( ! $this->is_enabled() ) {
$datetime = null;
}
$this->delete_emails_before( $datetime );
}
/**
* Whether the DB table exists.
*
* @since 4.0.0
*
* @return bool
*/
public function is_valid_db() {
global $wpdb;
static $is_valid = null;
// Return cached value only if table already exists.
if ( $is_valid === true ) {
return true;
}
$table = self::get_table_name();
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching
$is_valid = (bool) $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s;', $table ) );
return $is_valid;
}
/**
* Set current email's attachments.
*
* @since 4.0.0
*
* @param array $attachments List of attachments.
*/
private function set_attachments( $attachments ) {
global $phpmailer;
$phpmailer->clearAttachments();
foreach ( $attachments as $attachment ) {
[ $path, , $name, $encoding, $type, , $disposition ] = $attachment;
try {
$phpmailer->addAttachment( $path, $name, $encoding, $type, $disposition );
} catch ( Exception $e ) {
continue;
}
}
}
/**
* Remove email attachments after sending.
*
* @since 4.0.0
*/
private function cleanup_attachments() {
global $phpmailer;
$attachments = $phpmailer->getAttachments();
( new Attachments() )->delete_attachments( $attachments );
}
/**
* Get the From/From Name header
* from an email's connection data.
*
* @since 4.0.0
*
* @param array $connection_data Email's connection data.
*/
private function get_connection_from_header( $connection_data ) {
[
'from_email' => $from_email,
'from_name' => $from_name
] = $connection_data;
$from = (
$from_name === '' ?
$from_email :
sprintf( '%1s <%2s>', $from_name, $from_email )
);
$from_header = sprintf(
'From:%s',
$from
);
return $from_header;
}
/**
* Return a list of the `wp_mail` related hooks
* that should be de-registered before sending
* an enqueued email.
*
* @since 4.0.0
*
* @return array List of hooks.
*/
private function get_wp_mail_hooks() {
return [
'wp_mail',
'pre_wp_mail',
'wp_mail_from',
'wp_mail_from_name',
'wp_mail_succeeded',
'wp_mail_failed',
];
}
/**
* Clear any user-defined `wp_mail` related hooks
* before sending an enqueued email.
*
* @since 4.0.0
*/
private function clear_wp_mail_hooks() {
global $wp_filter;
$wp_mail_hooks = array_intersect_key(
$wp_filter,
array_flip( $this->get_wp_mail_hooks() )
);
foreach ( $wp_mail_hooks as $hook_name => $hook ) {
foreach ( $hook->callbacks as $priority => $callbacks ) {
foreach ( $callbacks as $callback ) {
$this->registered_wp_mail_hooks[] = [
$hook_name,
$callback['function'],
$priority,
$callback['accepted_args'],
];
}
}
remove_all_filters( $hook_name );
}
}
/**
* Re-register any previous de-registered `wp_mail` related hooks
* after sending an enqueued email.
*
* @since 4.0.0
*/
private function restore_wp_mail_hooks() { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
foreach ( $this->registered_wp_mail_hooks as $hook ) {
list( $hook_name, $callback, $priority, $accepted_args ) = $hook;
add_filter( $hook_name, $callback, $priority, $accepted_args );
}
}
/**
* Add an email to the queue.
*
* @since 4.0.0
*
* @throws Exception When email couldn't be saved.
*
* @param Email $email The email to enqueue.
*/
private function add_email( Email $email ) {
if ( ! $this->is_valid_db() ) {
return;
}
$email->set_date_enqueued( new DateTime( 'now', new DateTimeZone( 'UTC' ) ) )
->set_status( Email::STATUS_QUEUED )
->save();
}
/**
* Get an email.
*
* @since 4.0.0
*
* @param int|string $email_id The email's ID.
*
* @return null|Email The email, or null if not found.
*/
private function get_email( $email_id ) {
if ( ! $this->is_valid_db() ) {
return null;
}
global $wpdb;
$table = self::get_table_name();
$where = $wpdb->prepare( 'ID = %d', (int) $email_id );
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$data = $wpdb->get_row( "SELECT * FROM $table WHERE $where" );
// phpcs:enable WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$email = Email::from_data( $data );
return $email;
}
/**
* Get queued emails from the queue.
*
* @since 4.0.0
*
* @param null|int $count Amount of emails to return, or null for all emails.
*
* @return Email[] Array of emails.
*/
private function get_emails( $count = null ) {
if ( ! $this->is_valid_db() ) {
return [];
}
global $wpdb;
$table = self::get_table_name();
$where = $wpdb->prepare( 'status = %d', Email::STATUS_QUEUED );
$limit = '';
if ( ! is_null( $count ) ) {
$limit = $wpdb->prepare(
'LIMIT 0, %d',
max( 0, intval( $count ) )
);
}
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$data = $wpdb->get_results(
"SELECT *
FROM $table
WHERE $where
ORDER BY date_enqueued ASC
$limit;"
);
// phpcs:enable WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$emails = [];
foreach ( $data as $row ) {
try {
$emails[] = Email::from_data( $row );
} catch ( Exception $e ) {
$this->delete_email( $row->id );
$message = sprintf(
/* translators: %1$s - exception message. */
esc_html__( '[Emails Queue] Skipped processing enqueued email. %1$s. Email ID: %2$d', 'wp-mail-smtp' ),
esc_html( $e->getMessage() ),
$row->id
);
DebugEvents::add_debug( $message );
}
}
return $emails;
}
/**
* Delete emails processed before a given date.
*
* @since 4.0.0
*
* @param DateTime|null $before_datetime Date before which to remove emails, or null for all emails.
*/
private function delete_emails_before( $before_datetime ) {
if ( ! $this->is_valid_db() ) {
return;
}
global $wpdb;
$table = self::get_table_name();
$where = $wpdb->prepare( 'status = %d', Email::STATUS_PROCESSED );
if ( is_a( $before_datetime, DateTime::class ) ) {
$where .= $wpdb->prepare(
' AND date_processed < %s',
$before_datetime->format( WP::datetime_mysql_format() )
);
}
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$wpdb->query( "DELETE FROM $table WHERE $where" );
// phpcs:enable WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
}
/**
* Delete an email.
*
* @since 4.0.0
*
* @param int $email_id ID of the email.
*/
private function delete_email( $email_id ) {
if ( ! $this->is_valid_db() ) {
return;
}
global $wpdb;
$table = self::get_table_name();
// phpcs:disable WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
$wpdb->query(
$wpdb->prepare( "DELETE FROM $table WHERE ID = %d", $email_id )
);
// phpcs:enable WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
}
}

View File

@@ -0,0 +1,90 @@
<?php
namespace WPMailSMTP\Tasks\Queue;
use DateTime;
use DateTimeZone;
use WPMailSMTP\Queue\Attachments;
use WPMailSMTP\Tasks\Task;
use WPMailSMTP\Tasks\Tasks;
/**
* Class CleanupQueueTask.
*
* @since 4.0.0
*/
class CleanupQueueTask extends Task {
/**
* Action name for this task.
*
* @since 4.0.0
*/
const ACTION = 'wp_mail_smtp_queue_cleanup';
/**
* Class constructor.
*
* @since 4.0.0
*/
public function __construct() {
parent::__construct( self::ACTION );
}
/**
* Initialize the task.
*
* @since 4.0.0
*/
public function init() { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
// Register the action handler.
add_action( self::ACTION, [ $this, 'process' ] );
// Exit if this task the queue is disabled, or it's already scheduled.
if (
! wp_mail_smtp()->get_queue()->is_enabled() ||
Tasks::is_scheduled( self::ACTION ) !== false
) {
return;
}
// Schedule the task.
$this->recurring( strtotime( 'now' ), DAY_IN_SECONDS )
->unique()
->register();
}
/**
* Perform email sending.
*
* @since 4.0.0
*/
public function process() {
$queue = wp_mail_smtp()->get_queue();
$attachments = new Attachments();
// Cleanup processed emails.
$queue->cleanup();
// Cleanup older-than-a-month attachments.
$attachments->delete_attachments( null, new DateTime( '1 month ago', new DateTimeZone( 'UTC' ) ) );
if ( ! $queue->is_enabled() ) {
// If the query has been disabled in the meanwhile,
// and there aren't any emails left,
// cancel the cleanup task.
$queued_emails_count = $queue->count_queued_emails();
$processed_emails_count = $queue->count_processed_emails();
if ( $queued_emails_count === 0 && $processed_emails_count === 0 ) {
// Cleanup any remaining, older-than-an-hour attachments.
$attachments->delete_attachments( null, new DateTime( '1 hour ago', new DateTimeZone( 'UTC' ) ) );
$this->cancel_force();
}
}
}
}

View File

@@ -0,0 +1,71 @@
<?php
namespace WPMailSMTP\Tasks\Queue;
use WPMailSMTP\Tasks\Task;
use WPMailSMTP\Tasks\Tasks;
/**
* Class ProcessQueueTask.
*
* @since 4.0.0
*/
class ProcessQueueTask extends Task {
/**
* Action name for this task.
*
* @since 4.0.0
*/
const ACTION = 'wp_mail_smtp_queue_process';
/**
* Class constructor.
*
* @since 4.0.0
*/
public function __construct() {
parent::__construct( self::ACTION );
}
/**
* Initialize the task.
*
* @since 4.0.0
*/
public function init() { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
// Register the action handler.
add_action( self::ACTION, [ $this, 'process' ] );
// Exit if this task the queue is disabled, or it's already scheduled.
if (
! wp_mail_smtp()->get_queue()->is_enabled() ||
Tasks::is_scheduled( self::ACTION ) !== false
) {
return;
}
// Schedule the task.
$this->recurring( strtotime( 'now' ), MINUTE_IN_SECONDS )
->unique()
->register();
}
/**
* Perform email sending.
*
* @since 4.0.0
*/
public function process() {
$queue = wp_mail_smtp()->get_queue();
$queue->process();
if ( ! $queue->is_enabled() ) {
$this->cancel_force();
}
}
}

View File

@@ -0,0 +1,84 @@
<?php
namespace WPMailSMTP\Tasks\Queue;
use WPMailSMTP\Tasks\Meta;
use WPMailSMTP\Tasks\Task;
/**
* Class SendEnqueuedEmailTask.
*
* @since 4.0.0
*/
class SendEnqueuedEmailTask extends Task {
/**
* Action name for this task.
*
* @since 4.0.0
*/
const ACTION = 'wp_mail_smtp_send_enqueued_email';
/**
* Class constructor.
*
* @since 4.0.0
*/
public function __construct() {
parent::__construct( self::ACTION );
}
/**
* Initialize the task.
*
* @since 4.0.0
*/
public function init() { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
// Register the action handler.
add_action( self::ACTION, [ $this, 'process' ] );
}
/**
* Schedule email sending.
*
* @since 4.0.0
*
* @param int $email_id Email id.
*/
public function schedule( $email_id ) {
// Exit if AS function does not exist.
if ( ! function_exists( 'as_has_scheduled_action' ) ) {
return;
}
// Schedule the task.
$this->async()
->params( $email_id )
->register();
}
/**
* Perform email sending.
*
* @since 4.0.0
*
* @param int $meta_id The Meta ID with the stored task parameters.
*/
public function process( $meta_id ) {
$task_meta = new Meta();
$meta = $task_meta->get( (int) $meta_id );
// We should actually receive the passed parameter.
if ( empty( $meta ) || empty( $meta->data ) || count( $meta->data ) < 1 ) {
return;
}
$email_id = $meta->data[0];
wp_mail_smtp()->get_queue()->send_email( $email_id );
}
}

View File

@@ -86,6 +86,15 @@ class Task {
*/
private $interval;
/**
* Whether this task is unique.
*
* @since 4.0.0
*
* @var bool
*/
private $unique = false;
/**
* Task constructor.
*
@@ -159,6 +168,20 @@ class Task {
return $this;
}
/**
* Set this task as unique.
*
* @since 4.0.0
*
* @return Task
*/
public function unique() {
$this->unique = true;
return $this;
}
/**
* Pass any number of params that should be saved to Meta table.
*
@@ -249,7 +272,8 @@ class Task {
return as_enqueue_async_action(
$this->action,
[ $this->meta_id ],
Tasks::GROUP
Tasks::GROUP,
$this->unique
);
}
@@ -271,7 +295,8 @@ class Task {
$this->interval,
$this->action,
[ $this->meta_id ],
Tasks::GROUP
Tasks::GROUP,
$this->unique
);
}
@@ -292,7 +317,8 @@ class Task {
$this->timestamp,
$this->action,
[ $this->meta_id ],
Tasks::GROUP
Tasks::GROUP,
$this->unique
);
}
@@ -316,4 +342,15 @@ class Task {
return true;
}
/**
* Cancel all occurrences of this task,
* preventing it from re-registering itself.
*
* @since 4.0.0
*/
public function cancel_force() { // phpcs:ignore WPForms.PHP.HooksMethod.InvalidPlaceForAddingHooks
add_action( 'shutdown', [ $this, 'cancel' ], PHP_INT_MAX );
}
}

View File

@@ -5,6 +5,9 @@ namespace WPMailSMTP\Tasks;
use ActionScheduler_Action;
use ActionScheduler_DataController;
use ActionScheduler_DBStore;
use WPMailSMTP\Tasks\Queue\CleanupQueueTask;
use WPMailSMTP\Tasks\Queue\ProcessQueueTask;
use WPMailSMTP\Tasks\Queue\SendEnqueuedEmailTask;
use WPMailSMTP\Tasks\Reports\SummaryEmailTask;
/**
@@ -77,6 +80,9 @@ class Tasks {
$tasks = [
SummaryEmailTask::class,
DebugEventsCleanupTask::class,
ProcessQueueTask::class,
CleanupQueueTask::class,
SendEnqueuedEmailTask::class,
];
/**

View File

@@ -15,7 +15,14 @@ class Upgrade {
*
* @since 1.1.0
*/
public function __construct() {
public function __construct() {}
/**
* Run upgrades.
*
* @since 4.0.0
*/
public function run() {
$upgrades = $this->upgrades();

View File

@@ -7,6 +7,7 @@ use WPMailSMTP\Admin\SetupWizard;
use WPMailSMTP\Conflicts;
use WPMailSMTP\Debug;
use WPMailSMTP\Helpers\Helpers;
use WPMailSMTP\OptimizedEmailSending;
use WPMailSMTP\Options;
use WPMailSMTP\WP;
@@ -144,6 +145,7 @@ class UsageTracking {
'wp_mail_smtp_setup_wizard_completed_time' => isset( $setup_wizard_stats['completed_time'] ) ? (int) $setup_wizard_stats['completed_time'] : 0,
'wp_mail_smtp_setup_wizard_completed_successfully' => ! empty( $setup_wizard_stats['was_successful'] ),
'wp_mail_smtp_source' => sanitize_title( get_option( 'wp_mail_smtp_source', '' ) ),
'wp_mail_smtp_optimize_email_sending' => (bool) OptimizedEmailSending::is_enabled(),
]
);

View File

@@ -0,0 +1,252 @@
<?php
namespace WPMailSMTP;
/**
* Class WPMailArgs. This class responsible for `wp_mail` function arguments parsing.
*
* Parsing algorithms copied from `wp_mail` function.
*
* @since 3.7.0
*/
class WPMailArgs {
/**
* Array of the `wp_mail` function arguments.
*
* @since 3.7.0
*
* @var array
*/
private $args;
/**
* Parsed headers.
*
* @since 3.7.0
*
* @var array
*/
private $headers = null;
/**
* Constructor.
*
* @since 3.7.0
*
* @param array $args {
* Array of the `wp_mail` function arguments.
*
* @type string|string[] $to Array or comma-separated list of email addresses to send message.
* @type string $subject Email subject.
* @type string $message Message contents.
* @type string|string[] $headers Additional headers.
* @type string|string[] $attachments Paths to files to attach.
* }
*/
public function __construct( $args ) {
$this->args = $args;
}
/**
* Get arguments.
*
* @since 3.7.0
*
* @return array
*/
public function get_args() {
return $this->args;
}
/**
* Get to email.
*
* @since 3.7.0
*
* @return string
*/
public function get_to_email() {
return $this->get_arg( 'to' );
}
/**
* Get subject.
*
* @since 3.7.0
*
* @return string
*/
public function get_subject() {
return $this->get_arg( 'subject' );
}
/**
* Get message.
*
* @since 3.7.0
*
* @return string
*/
public function get_message() {
return $this->get_arg( 'message' );
}
/**
* Get from email.
*
* @since 3.7.0
*
* @return string
*/
public function get_from_email() {
$from = $this->get_from();
return $from['email'];
}
/**
* Get from name.
*
* @since 3.7.0
*
* @return string
*/
public function get_from_name() {
$from = $this->get_from();
return $from['name'];
}
/**
* Get parsed headers.
*
* @since 3.7.0
*
* @return array
*/
public function get_headers() { // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh
if ( ! is_null( $this->headers ) ) {
return $this->headers;
}
$this->headers = [];
if ( ! empty( $this->args['headers'] ) ) {
if ( ! is_array( $this->args['headers'] ) ) {
$headers = explode( "\n", str_replace( "\r\n", "\n", $this->args['headers'] ) );
} else {
$headers = $this->args['headers'];
}
foreach ( (array) $headers as $header ) {
if ( strpos( $header, ':' ) === false ) {
continue;
}
list( $name, $content ) = array_map( 'trim', explode( ':', trim( $header ), 2 ) );
$name = strtolower( $name );
if ( isset( $this->headers[ $name ] ) && in_array( $name, [ 'cc', 'bcc', 'reply-to' ], true ) ) {
$this->headers[ $name ] .= ', ' . $content;
} else {
$this->headers[ $name ] = $content;
}
}
}
return $this->headers;
}
/**
* Get particular header value.
*
* @since 3.7.0
*
* @param string $name Header name.
*
* @return null|string
*/
public function get_header( $name ) {
$name = strtolower( $name );
$headers = $this->get_headers();
return isset( $headers[ $name ] ) ? $headers[ $name ] : null;
}
/**
* Get argument value.
*
* @since 3.7.0
*
* @param string $key Argument key.
* @param mixed $default Default value.
*
* @return string
*/
private function get_arg( $key, $default = '' ) {
return isset( $this->args[ $key ] ) ? $this->args[ $key ] : $default;
}
/**
* Get from address.
*
* @since 3.7.0
*
* @return array
*/
private function get_from() {
$from_email = '';
$from_name = '';
$value = $this->get_header( 'from' );
$value = is_null( $value ) ? '' : $value;
$bracket_pos = strpos( $value, '<' );
if ( $bracket_pos !== false ) {
// Text before the bracketed email is the "From" name.
if ( $bracket_pos > 0 ) {
$from_name = substr( $value, 0, $bracket_pos - 1 );
$from_name = str_replace( '"', '', $from_name );
$from_name = trim( $from_name );
}
$from_email = substr( $value, $bracket_pos + 1 );
$from_email = str_replace( '>', '', $from_email );
$from_email = trim( $from_email );
// Avoid setting an empty $from_email.
} elseif ( trim( $value ) !== '' ) {
$from_email = trim( $value );
}
return [
'email' => $from_email,
'name' => $from_name,
];
}
/**
* Get attachments.
*
* @since 4.0.0
*
* @return array
*/
public function get_attachments() {
return $this->get_arg( 'attachments', [] );
}
}

View File

@@ -79,15 +79,18 @@ class WPMailInitiator {
*/
public function hooks() {
// Initialize initiator data.
add_filter(
'wp_mail',
function ( $args ) {
$this->set_initiator();
// Capture `wp_mail` function call.
add_action( 'wp_mail_smtp_processor_capture_wp_mail_call', [ $this, 'capture_wp_mail_call' ], 0 );
}
return $args;
}
);
/**
* Capture `wp_mail` function call.
*
* @since 4.0.0
*/
public function capture_wp_mail_call() {
$this->set_initiator();
}
/**
@@ -180,6 +183,15 @@ class WPMailInitiator {
$backtrace = $this->get_wpmail_backtrace();
/**
* Filter the `wp_mail` function initiator data.
*
* @since 4.0.0
*
* @param array $backtrace Backtrace data.
*/
$backtrace = apply_filters( 'wp_mail_smtp_wp_mail_initiator_set_initiator', $backtrace );
if ( empty( $backtrace['file'] ) ) {
return;
}

View File

@@ -64,6 +64,7 @@ if ( class_exists( 'ActionScheduler_QueueRunner' ) ) {
}
// WP MS uninstall process.
//phpcs:disable WPForms.Formatting.EmptyLineAfterAssigmentVariables.AddEmptyLine, WPForms.PHP.BackSlash.UseShortSyntax
if ( is_multisite() ) {
$main_site_settings = get_blog_option( get_main_site_id(), 'wp_mail_smtp', [] );
$network_wide = ! empty( $main_site_settings['general']['network_wide'] );
@@ -119,6 +120,13 @@ if ( is_multisite() ) {
}
}
// Delete queue table.
$queue_table = \WPMailSMTP\Queue\Queue::get_table_name();
$wpdb->query( "DROP TABLE IF EXISTS $queue_table;" ); // phpcs:ignore WordPress.DB
// Delete all queue attachments.
( new \WPMailSMTP\Queue\Attachments() )->delete_attachments();
/*
* Cleanup network site data for Pro plugin only.
*/
@@ -201,6 +209,13 @@ if ( is_multisite() ) {
}
}
// Delete queue table.
$queue_table = \WPMailSMTP\Queue\Queue::get_table_name();
$wpdb->query( "DROP TABLE IF EXISTS $queue_table;" ); // phpcs:ignore WordPress.DB
// Delete all queue attachments.
( new \WPMailSMTP\Queue\Attachments() )->delete_attachments();
/*
* Cleanup data for Pro plugin only.
*/
@@ -239,3 +254,4 @@ if ( is_multisite() ) {
$meta_table = \WPMailSMTP\Tasks\Meta::get_table_name();
$wpdb->query( "DROP TABLE IF EXISTS $meta_table;" ); // phpcs:ignore WordPress.DB
}
//phpcs:enable WPForms.Formatting.EmptyLineAfterAssigmentVariables.AddEmptyLine, WPForms.PHP.BackSlash.UseShortSyntax

View File

@@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit295984e5919e750baa7d7284cfe56164::getLoader();
return ComposerAutoloaderInit473736c55a35b9a077f93cfc42f4bbf5::getLoader();

Some files were not shown because too many files have changed in this diff Show More