Ръководство за потребителя на Symelo SMTP
За Symelo SMTP версия 1.0.0.
Това ръководство обяснява как да настроите Symelo SMTP, какво прави всяка опция и как сами да отстранявате проблеми с доставката. Последният раздел, „За разработчици“, описва константите в wp-config.php, куките (hooks) и командите на WP-CLI.
Нужда от помощ? Пишете на [email protected] или посетете symelo.com.
Какво прави Symelo SMTP
WordPress изпраща имейли (за смяна на парола, потвърждения на поръчки, съобщения от формите за контакт) с вградената в PHP функция mail(). Много хостинги я блокират, а спам филтрите не ѝ се доверяват, затова имейлите се губят.
Symelo SMTP вместо това изпраща всеки имейл от WordPress през истинска имейл услуга:
- SMTP (Simple Mail Transfer Protocol) е стандартният начин, по който пощенските сървъри общуват помежду си. Почти всеки имейл доставчик предлага SMTP сървър, в който можете да влезете с акаунта си.
- API мейлърите изпращат през уеб API на доставчика по обикновен HTTPS. Често са по-бързи и работят и при хостинги, които блокират SMTP портовете.
- OAuth мейлърите (Gmail и Microsoft 365) ви позволяват да влезете с акаунта си в Google или Microsoft, вместо да съхранявате парола.
Освен това Symelo SMTP:
- записва всеки имейл в журнал заедно със статуса му, така че виждате какво е изпратено, какво не е успяло и защо;
- автоматично опитва резервна връзка, когато основната откаже;
- изпраща сигнали в Slack, Discord, Microsoft Teams или към произволен webhook, когато имейл не бъде изпратен;
- има режим Log only за тестови (staging) сайтове, така че тестовите копия никога да не изпращат имейли до реални клиенти;
- обяснява честите грешки на разбираем език.
Изисквания
- WordPress 6.4 или по-нова версия.
- PHP 7.4 или по-нова версия. При по-стар PHP плъгинът остава неактивен и показва: „Symelo SMTP needs PHP 7.4 or newer.“
- Акаунт при имейл доставчик (или пощенската кутия от хостинга ви) и възможност сървърът ви да се свързва с него:
- SMTP изисква отворен изходящ порт (обикновено 587 или 465). Някои хостинги ги блокират.
- API мейлърите изискват изходящ HTTPS, който почти всеки хостинг позволява.
- За Gmail / Google Workspace и Microsoft 365 / Outlook: приложение в Google Cloud или Microsoft Entra, което създавате сами (обяснено по-долу).
- Само администраторите виждат и променят настройките на плъгина (правото
manage_options). Разработчиците могат да променят това; вижте За разработчици. - Работи и с мултисайт (Multisite). Всеки сайт в мрежата има свои настройки, връзки и журнал.
Бърз старт
Така само за няколко минути стигате от инсталирането до успешно изпратен тестов имейл.
1. Инсталиране и активиране
- В wp-admin отидете в Разширения → Добавяне на разширение → Качване на разширение.
- Изберете .zip файла на плъгина, натиснете Инсталиране, след това Активиране.
В страничното меню на администрацията се появява ново меню Symelo SMTP (с икона на плик).
2. Добавете първата си връзка
Връзката е един начин за изпращане на имейли: мейлър (доставчик) заедно с данните за вход и адреса на подателя.
- Отидете в Symelo SMTP → Settings. Тъй като все още няма връзки, екранът се отваря директно на Set up email delivery с избора на мейлър.
- Под Mailer щракнете върху плочката на вашия доставчик. Ако доставчикът ви не е в списъка, изберете Other SMTP.
- Попълнете полетата на доставчика. Задължителните полета са отбелязани с червена звездичка (*). Линкът Setup guide до описанието на мейлъра отваря документацията на доставчика. Вижте Настройване на всеки доставчик, за да разберете откъде да вземете всяка стойност.
- Под Sender попълнете From email: адрес, от който доставчикът ви позволява да изпращате (потребителското ви име за SMTP или адрес в домейн, който сте потвърдили при доставчика).
- Оставете отметката Use this address for every email, even when a plugin sets its own From address. Това е най-сигурната настройка.
- По желание задайте From name (например името на магазина ви) и Connection name (използва се само в администрацията и в журнала).
- Натиснете Add connection.
Ще видите или „Connection saved.“, или „Connection saved, but it isn't ready yet:“, последвано от това, което липсва. Първата ви връзка автоматично става основната (Primary).
Само за Gmail и Microsoft 365: след запазване оставате на екрана на връзката. Натиснете Sign in with Google или Sign in with Microsoft в карето Authorization и разрешете достъпа. Първо прочетете Gmail / Google Workspace или Microsoft 365 / Outlook, защото трябва да създадете приложение при доставчика, преди да можете да влезете.
3. Изпратете тестов имейл
- Отворете раздела Send a Test.
- Полето Send to е попълнено с вашия собствен адрес. Променете го, ако желаете.
- Оставете Connection на Normal routing (primary, then backup).
- Натиснете Send test email.
Ако всичко е наред, ще видите Test email sent: „The provider accepted the email for … Check the inbox (and the spam folder).“ Ако изпращането е неуспешно, ще видите The test email failed с точната грешка, подсказки на разбираем език и опитите за доставка (Delivery attempts). Вижте Отстраняване на проблеми.
Това е всичко. Отсега нататък всеки имейл, изпратен от WordPress и вашите плъгини, минава през тази връзка и се появява в Email Log.
Къде да намерите всичко
Symelo SMTP има едно меню с две точки:
- Symelo SMTP → Settings: всички раздели с настройки на един екран. Разделите се превключват мигновено, без презареждане.
- Symelo SMTP → Email Log: журналът. Той използва същата лента с раздели, така че можете да стигнете до него и чрез раздела Email Log.
На екрана Разширения под Symelo SMTP има и линк Settings.
| Раздел | За какво служи |
|---|---|
| Connections | Добавяне, редактиране и изтриване на връзки; избор на основна и резервна връзка. |
| Send a Test | Изпращане на тестов имейл през нормалното маршрутизиране или през една конкретна връзка. |
| Email Log | Всеки изпратен, неуспешен или задържан имейл, с подробности, повторно изпращане и експорт в CSV. |
| General | Return path и режимът на доставка (Send emails или Log only). |
| Logging | Включване или изключване на журнала, дали да се пази съдържанието на съобщенията и колко дълго да се пазят записите. |
| Alerts | Сигнали в Slack, Discord, Microsoft Teams или чрез webhook, когато имейл не бъде изпратен. |
| Advanced | Състояние на ключа за криптиране, поведение при деинсталиране, конфигуриране с константи. |
| Guide | Това ръководство, вътре в плъгина, със съдържание и поле за търсене („Find in this guide“). |
| Support | Линкове за помощ, отчет със системна информация, който да изпратите на поддръжката, и данни за контакт. |
Раздел Connections
Обобщение на състоянието
Най-горната карта показва как се изпращат имейлите в момента:
- „Emails are sent through Name.“ и, ако сте задали резервна връзка, „If that fails, Name is tried next.“
- Червено съобщение след това, ако основната връзка има проблем (например липсваща парола).
- „No primary connection is selected, so emails are sent through the backup connection, Name, with nothing to fall back on. Choose a primary connection under Routing.“, когато има резервна, но няма основна връзка. Тогава имейлите минават само през резервната.
- „No primary connection is selected, so emails go out through the server's default mail setup.“, когато няма нито една от двете.
Бутонът Add connection отваря празен формуляр за връзка.
Списък с връзки
| Колона | Значение |
|---|---|
| Name | Името на връзката. Щракнете върху него, за да я редактирате. |
| Mailer | Доставчикът. |
| Status | Ready или Needs attention с първия открит проблем. При Gmail и Microsoft 365 Ready показва и акаунта, с който сте влезли. |
| Role | Primary или Backup. Празно за връзки, които не се използват. |
Действия за всеки ред:
- Edit (или View за връзка, дефинирана в wp-config.php).
- Send a test: отваря раздела Send a Test с вече избрана тази връзка.
- Delete: иска потвърждение, след което премахва връзката. При Gmail също отменя достъпа в Google; при Microsoft запазеният вход се изтрива. Ако изтритата връзка е била основна или резервна, тази роля остава празна. Без основна връзка имейлите минават само през резервната (картата със състоянието го показва), затова изберете нова Primary connection под Routing и натиснете Save routing.
Проблеми, които колоната Status може да покаже:
| Съобщение | Какво да направите |
|---|---|
| „… is required.“ | Редактирайте връзката и попълнете това поле. |
| „… can no longer be decrypted (the site keys changed). Enter it again.“ | Въведете отново паролата или ключа. Вижте Запазената стойност вече не може да се дешифрира. |
| „Set the From email: an address this provider lets you send from.“ | Попълнете Sender → From email. |
| „Not authorized yet.“ | Gmail или Microsoft 365: отворете връзката и натиснете Sign in with …. |
| „Access was revoked or expired. Sign in again.“ | Gmail или Microsoft 365: влезте отново. |
| „Unknown mailer.“ | Връзката използва мейлър, който вече не съществува (например от деактивирана добавка). |
Маршрутизиране
Картата Routing се появява, след като имате поне една връзка.
| Настройка | Какво прави | По подразбиране |
|---|---|---|
| Primary connection | Връзката, през която се изпраща всеки имейл. При None имейлите минават само през резервната връзка или през стандартната пощенска настройка на сървъра, ако няма и резервна. | Първата ви връзка. Връзка, добавена, докато няма избрана основна, става основна. |
| Backup connection | Опитва се автоматично, когато основната връзка откаже, така че имейлите продължават да излизат и при срив при доставчика. | None |
След промяна на която и да е от двете натиснете Save routing. Резервната връзка не може да е същата като основната.
Ако в wp-config.php е дефинирана връзка, основната е фиксирана към нея: „Fixed to the connection defined in wp-config.php (SYMELO_SMTP_MAILER).“ Пак можете да изберете резервна.
Как работи резервната връзка: за всеки имейл Symelo SMTP първо опитва основната връзка. Само ако този опит е неуспешен, опитва резервната. И двата опита се записват в журнала под Delivery attempts. Всяка връзка изпраща със собствен адрес на подателя (From), така че резервна връзка при друг доставчик може да използва адрес, който този доставчик приема.
Добавяне или редактиране на връзка
Формулярът за връзка има четири части.
1. Mailer. Щракнете върху плочка, за да изберете доставчика. Задръжте курсора над плочка, за да видите кратко описание. Нова връзка започва с Other SMTP. Налични мейлъри:
Other SMTP, Gmail / Google Workspace, Microsoft 365 / Outlook, Amazon SES, Brevo, Mailgun, SendGrid, Postmark, SendLayer, Resend, SMTP2GO, SparkPost, Mailjet, PHP mail().
Ако смените мейлъра на съществуваща връзка, запазените тайни данни (пароли, ключове) на стария мейлър не се прехвърлят, а входът в Gmail или Microsoft се премахва.
2. Provider settings. Полетата за избрания мейлър. Вижте Настройване на всеки доставчик.
- Паролите, API ключовете и клиентските тайни (client secrets) никога не се показват отново след запазване. Полето показва „Saved. Leave blank to keep it.“ Оставете го празно, за да запазите съхранената стойност, или въведете нова, за да я замените.
- За Gmail и Microsoft 365 се появява каре Authorized redirect URI с бутон Copy. Добавете точно този адрес към вашето OAuth приложение, преди да влезете.
3. Sender. Доставчиците изпращат имейли само от адреси, на които имат доверие: вашето потребителско име за SMTP или адрес в домейн, който сте потвърдили при тях. Другите адреси се отхвърлят (например „You are not allowed to send from this address“).
| Настройка | Какво прави | По подразбиране |
|---|---|---|
| From email | Адресът, от който изпраща тази връзка. Задължителен за повечето мейлъри. Незадължителен за Gmail и Microsoft 365 (ако е празен: акаунтът, с който сте влезли) и за PHP mail() (ако е празен: адресът, зададен от WordPress или от плъгина). | Празно. При Other SMTP, ако въведете имейл адрес като Username, това поле се попълва автоматично. |
| Use this address for every email, even when a plugin sets its own From address | Заменя всеки адрес на подателя, зададен от WordPress или от плъгин, с горния. Препоръчително: отговорите пак стигат до правилния човек, защото плъгини като Contact Form 7 и WooCommerce задават адрес Reply-To. | Включено |
| From name | Името на подателя, което виждат получателите. | Празно (подсказката в полето показва заглавието на сайта ви). |
| Use this name for every email | Заменя имената, зададени от плъгини, с горното. | Изключено |
4. Connection name. „Only shown here and in the email log. Defaults to the mailer's name.“ Името се показва само в администрацията и в журнала, а по подразбиране е името на мейлъра. Например „Mailgun (main)“.
Натиснете Add connection (за нова връзка) или Save connection (за съществуваща). Плъгинът проверява връзката и ви казва, ако нещо липсва. Невалиден From email не се запазва: „The From email isn't a valid address.“
Как се избира адресът на подателя
За всеки имейл адресът на подателя (From) се определя от връзката, която го изпраща:
| Ситуация | Използван From email |
|---|---|
| From email е зададен и Use this address for every email… е включено | Винаги From email на връзката. |
| From email е зададен и опцията е изключена | Адресът, зададен от WordPress или от плъгина. Само адресът по подразбиране на WordPress, wordpress@yourdomain, се заменя с From email на връзката. Microsoft 365: винаги From email на връзката, защото Microsoft изпраща само от адреси, които пощенската кутия има право да използва. |
| From email е празен | Other SMTP: Username, ако е имейл адрес. Gmail: акаунтът, с който сте влезли. Microsoft 365: винаги пощенската кутия, с която сте влезли, дори при изключена опция. В останалите случаи адресът, зададен от WordPress или от плъгина. |
| Ситуация | Използвано From name |
|---|---|
| From name е зададено и Use this name for every email е включено | Винаги From name на връзката. |
| From name е зададено и опцията е изключена | Името, зададено от плъгина, който изпраща имейла. Заменя се само името по подразбиране на WordPress, „WordPress“. |
| Във всички случаи | Ако името все още би било „WordPress“, вместо него се използва заглавието на сайта ви. |
Microsoft 365 / Outlook: ако From email не е пощенската кутия, с която сте влезли (например споделена пощенска кутия), кутията трябва да има право „Send As“ или „Send on Behalf“ за този адрес. Вижте Microsoft 365 / Outlook. Microsoft може да показва собственото показвано име на пощенската кутия вместо From name.
Упълномощаване (Gmail и Microsoft 365)
След като запазите връзка с Gmail или Microsoft 365, под формуляра се появява каре Authorization.
- Преди влизане: „Save the client ID and secret first, then sign in to allow this site to send email.“ Натиснете Sign in with Google или Sign in with Microsoft. Ако някое задължително поле все още е празно (например Tenant при Microsoft), ще видите „Finish the connection settings first:“, последвано от това, което липсва.
- След влизане: значка Connected и „Signed in as [email protected].“ Натиснете Disconnect, за да премахнете входа (при Google достъпът се отменя в самия Google; Microsoft няма прост начин за отмяна, затова токените се изтриват от сайта ви).
Влезте от същия браузър и със същия администраторски акаунт, от който сте започнали, и завършете в рамките на 10 минути. В противен случай ще видите „The sign-in link expired or was already used. Try again.“
След като сте влезли, плъгинът поддържа входа активен: ежедневна фонова задача опреснява входовете, които не са използвани 7 дни, за да не ги прекрати доставчикът поради неактивност.
Раздел Send a Test
Използвайте този раздел, за да проверите връзка, без да чакате истински имейл.
| Поле | Какво прави | По подразбиране |
|---|---|---|
| Send to | Получателят. | Вашият собствен имейл адрес. |
| Connection | Normal routing (primary, then backup) изпраща точно като истински имейл. Only Name изпраща само през тази една връзка, без резервна. | Normal routing |
| Format | HTML или Plain text. | HTML |
Натиснете Send test email. Темата е „Symelo SMTP test from името на сайта ви“.
Карето с резултата показва:
- Test email sent: доставчикът е приел имейла. Проверете входящата поща и папката за спам. „Приет“ означава, че доставчикът го е поел; доставката във входящата поща след това зависи от доставчика и от пощенския сървър на получателя.
- Test email logged, not sent: включен е режимът Log only, затова имейлът е само записан в журнала.
- The test email failed: грешката, до две подсказки как да я отстраните и Delivery attempts.
- Delivery attempts: по един ред за всяка опитана връзка, отбелязан с Accepted или Failed. Отворете Technical details, за да видите SMTP комуникацията или отговора на доставчика (паролите и ключовете са скрити).
Бележки:
- В режим Log only тест с Normal routing само се записва, без да се изпраща: „'Log only' mode is on, so the email to … was recorded in the log but not sent. Pick a specific connection to test real delivery.“ Тест през Only Name наистина изпраща имейл, дори в режим Log only.
- Ако резултатът казва „Symelo SMTP didn't handle this email“, друг плъгин поема имейлите на WordPress. Вижте Активен е друг SMTP плъгин.
Журнал на имейлите (Email Log)
Отидете в Symelo SMTP → Email Log.
Списъкът
Най-горе: Sent in the last 7 days, Failed in the last 7 days и, ако има такива, Logged only, not sent.
Ако журналът е изключен, предупреждение казва „Logging is turned off, so new emails aren't recorded.“ с линк към настройките в Logging.
| Колона | Значение |
|---|---|
| Subject | Щракнете, за да видите записа. При неуспешните имейли под темата се показва началото на грешката. |
| To | Всички получатели (To, Cc и Bcc). |
| Status | Sent, Failed или Not sent (log only). |
| Sent by | Плъгинът или темата, които са изпратили имейла, или „WordPress“. |
| Connection | Последната използвана връзка или „WordPress default“, когато не е настроена връзка. |
| Date | В часовата зона на сайта ви. |
Начини да стесните списъка:
- Изгледи по статус над таблицата: All, Sent, Failed, Not sent (log only) (изгледът се показва само когато има записи).
- Search emails: търси в темата, получателите, адреса на подателя и текста на грешката.
- Две полета за дата и Filter: показват имейлите между две дати.
- Сортиране по Subject, Status или Date с щракване върху заглавието на колоната.
- Настройки на екрана (горе вдясно): брой записи на страница, 20 по подразбиране, до 200.
Действия за ред: View, Resend (само за имейли, чието съдържание е запазено), Delete. За да изтриете много записи наведнъж, отметнете ги и изберете Delete от груповите действия.
Export to CSV изтегля записите, които отговарят на текущите филтри, с колоните Date (UTC), Status, From, To, Subject, Connection, Mailer, Sent by и Error. Текстът на съобщенията не се експортира.
Един запис
Щракнете върху тема, за да видите:
- Темата и статуса, а при неуспешните имейли и грешката с подсказки.
- Date, From, To, Cc, Bcc, Reply-To, Connection, Sent by, Message ID и Duration.
- Attachments: имена и размери на файловете. Самите файлове никога не се съхраняват.
- Message: безопасен преглед на HTML имейла. „Remote images are blocked for your privacy.“ Натиснете Load them, за да покажете изображенията от други сайтове, и Block them, за да ги скриете отново. Показва се и Plain-text version, когато имейлът има такава.
- Extra headers: допълнителните заглавки (headers), които е имал имейлът.
- Delivery attempts с Technical details.
Ако текстът не е запазен: „The content wasn't stored (Logging → Content is off).“
Повторно изпращане
Resend изпраща записания имейл отново през текущото маршрутизиране (не непременно през връзката, използвана първия път), до същите получатели и със същите тема, текст и заглавки.
- Прикачените файлове не се съхраняват, затова не се изпращат повторно: „Email resent, without its attachments (they aren't stored in the log).“
- Можете да изпращате повторно само имейли, чието съдържание е запазено, затова Resend се появява само за тях, както в списъка, така и в самия запис.
- Повторното изпращане създава нов запис в журнала. В режим Log only повторно изпратеният имейл само се записва.
Раздел General
| Настройка | Какво прави | Кога да я промените | По подразбиране |
|---|---|---|---|
| Return path → Send bounces to the From address | Задава адреса на подателя (From) като подател в плика на писмото (envelope sender), т.е. там, където отиват съобщенията за недоставени писма (bounces). Важи за Other SMTP и PHP mail(); API доставчиците обработват недоставените писма сами. | Включете, ако искате съобщенията за недоставени писма да стигат до пощенската кутия на подателя и SMTP сървърът ви го позволява. | Изключено |
| Mode → Send emails / Log only: record emails but never send them | Log only записва всеки имейл в журнала (статус Not sent (log only)), но никога не го изпраща. | Използвайте Log only на тестови копия или копия за разработка на работещ сайт, така че клиентите никога да не получават тестови имейли. | Send emails |
Заглавието Sender в този раздел само напомня, че адресът и името на подателя се задават поотделно за всяка връзка, и съдържа линк Edit connections.
Ако режимът е зададен в wp-config.php, изборът е неактивен (в сиво) с текст „Set by SYMELO_SMTP_DELIVERY in wp-config.php.“
Натиснете Save Changes.
Раздел Logging
| Настройка | Какво прави | По подразбиране |
|---|---|---|
| Email log → Keep a log of sent and failed emails | Записва всеки имейл. Когато е изключено, нищо ново не се записва и джаджата в таблото се скрива. Известията и сигналите за неуспешни имейли продължават да работят. | Включено |
| Content → Store the message body (needed to view and resend emails) | Пази текста и HTML кода на имейла. Получателите, темата и статусът винаги се записват. Изключете тази опция, ако имейлите съдържат чувствителни данни. Текст над 1 MB се отрязва. | Включено |
| Keep entries for … days | По-старите записи се изтриват веднъж дневно. 0 ги пази завинаги. Максимум 3650. | 30 |
Натиснете Save Changes.
Delete all log entries изтрива всички записи в журнала наведнъж (след потвърждение).
Раздел Alerts
Сигналите ви уведомяват, когато имейл не бъде изпратен, дори ако сайтът ви изобщо не може да изпраща имейли, защото се изпращат в чат приложение или към webhook, а не по имейл.
Канали за сигнали
Съществуващите канали са изброени с техните Type и Destination (показва се само името на хоста на webhook-а, защото пълният адрес е таен). Действия: Send test alert и Remove.
За да добавите канал, под Add a channel:
| Поле | Какво да въведете |
|---|---|
| Type | Slack, Discord, Microsoft Teams или Webhook (JSON). |
| Webhook URL | Публичен адрес, започващ с https://. Slack: входящ webhook (incoming webhook). Discord: настройки на канала → Integrations → Webhooks. Teams: поток в Workflows „When a Teams webhook request is received“. |
| Signing secret | Незадължително, само за Webhook (JSON). Тогава заявките съдържат заглавка X-Symelo-Signature: sha256=…: HMAC на тялото на заявката, създаден с тази тайна, така че получателят ви да може да провери, че заявката е истинска. |
Натиснете Add channel, след това Send test alert, за да го проверите. Можете да добавите до 10 канала.
Всеки сигнал съдържа името на сайта, темата на имейла, получателите, връзката, грешката и линк към записа в журнала.
Ограничаване на честотата
| Настройка | Какво прави | По подразбиране |
|---|---|---|
| At most one alert every … minutes | Предотвратява поток от сигнали по време на срив. Следващият сигнал казва колко неуспеха са пропуснати. 0 изпраща сигнал за всеки неуспех. Максимум 1440 (едно денонощие). | 60 |
Натиснете Save Changes.
Раздел Advanced
Криптиране
Паролите, API ключовете, OAuth токените и адресите на webhook-овете за сигнали се съхраняват криптирани в базата данни. Тази карта показва кой ключ ги защитава:
Dedicated key: криптирани са с
SYMELO_SMTP_KEYот wp-config.php. Това е най-сигурният вариант: копие само на базата данни не може да ги разкрие.Site salt: криптирани са с ключ, извлечен от солите (salts) на сайта ви (тайните ключове в wp-config.php). Картата показва готов ред със случаен ключ, който можете да поставите в wp-config.php:
define( 'SYMELO_SMTP_KEY', '…64 random characters…' );Ключът трябва да е дълъг поне 32 знака. Готовият е с 64.
Ако SYMELO_SMTP_KEY е дефиниран, но е по-кратък от 32 знака, той се пренебрегва и се използват солите на сайта. Тогава картата показва предупреждение („SYMELO_SMTP_KEY in wp-config.php is ignored because it's shorter than 32 characters…“) над нов ключ, с който да го замените, а „Здраве на сайта“ също го отчита.
След добавяне или смяна на ключа нищо от криптираното със стария ключ вече не може да бъде прочетено. Картата ви напомня за това. Трябва да направите следното:
- Въведете отново всяка запазена парола, API ключ и клиентска тайна (редактирайте всяка връзка).
- Влезте отново във връзките с Gmail и Microsoft 365.
- Премахнете и добавете отново каналите за сигнали, които показват „Unreadable, add it again“.
Деинсталиране
| Настройка | Какво прави | По подразбиране |
|---|---|---|
| Delete all settings and logs when the plugin is deleted | Когато изтриете плъгина от екрана Разширения, се изтриват и неговите настройки, връзки, OAuth входове и журналът на имейлите. | Изключено |
Натиснете Save Changes. Вижте Отмяна и деинсталиране.
Конфигуриране с константи
Агенциите и разработчиците могат вместо това да настроят Symelo SMTP в wp-config.php. Картата изброява всички поддържани константи. Вижте За разработчици.
Раздел Support
- Get help: линкове към Send a test email, View failed emails и Check Site Health, както и бутон Email support ([email protected]).
- System information: текстов отчет с версиите, режима на доставка, връзките (типовете мейлъри, без тайни данни), настройките на журнала, броя имейли за последната седмица, последния неуспех, типа на ключа за криптиране, другите активни SMTP плъгини и данни за сървъра. Никога не включва пароли, API ключове или токени. Натиснете Copy system information и поставете отчета в имейла си до поддръжката.
- About Symelo LTD: линк към symelo.com.
Джаджа в таблото, известия и Здраве на сайта
Джаджа в таблото
Email delivery в таблото на WordPress показва „Last 7 days: X sent, Y failed.“, последния неуспех (ако има такъв) и линкове към Email log и Send a test. Показва се на администраторите, докато журналът е включен.
Известия в администрацията
Те се показват в Табло, на екрана Разширения и на собствените екрани на плъгина (двете известия за липсваща основна връзка се показват само извън екраните на плъгина, защото там разделът Connections вече го казва):
| Известие | Значение |
|---|---|
| „Symelo SMTP: emails are not being delivered. 'Log only' mode is on, so emails are logged but never sent.“ | Включен е режимът Log only. Change this отваря раздела General. |
| „Symelo SMTP is active but no connection is set up yet, so emails still go out through the server's default mail setup.“ | Няма нито основна, нито резервна връзка. Set up a connection отваря раздела Connections. |
| „Symelo SMTP: no primary connection is selected, so emails are sent through the backup connection, Name, with nothing to fall back on.“ | Избрана е само резервна връзка. Choose a primary connection отваря раздела Connections. |
| „Symelo SMTP: check wp-config.php. SYMELO_SMTP_MAILER is set to "…", which isn't a mailer Symelo SMTP knows…“ | Показва се на екраните на плъгина, когато SYMELO_SMTP_MAILER е изписана грешно. Известието изброява валидните идентификатори на мейлъри. |
| „Symelo SMTP: an email failed to send.“ с грешката и подсказка | Имейл не е изпратен през последните 24 часа. View failed emails отваря филтрирания журнал; Dismiss скрива известието до следващия неуспех. Известието изчезва и само след следващия успешно изпратен имейл. |
Здраве на сайта
Инструменти → Здраве на сайта включва четири проверки на Symelo SMTP:
| Проверка | Добър резултат | В противен случай |
|---|---|---|
| Email delivery is set up | „Emails are sent through Name“ | „SYMELO_SMTP_MAILER in wp-config.php isn't a known mailer“, „Emails are logged but not sent ('Log only' mode)“, „No primary email connection is selected“ (имейлите минават само през резервната връзка), „No email connection is set up“ (имейлите минават през стандартната пощенска настройка на сървъра) или „The email connection needs attention“ с описание на проблема. |
| Recent emails were delivered | „No emails failed in the last 24 hours“ | „N emails failed in the last 24 hours“ с линк към неуспешните имейли. |
| Only one SMTP plugin is active | „Only one SMTP plugin is active“ | „More than one SMTP plugin is active“ с имената на другите. |
| Email credentials have a dedicated encryption key | „Email credentials have a dedicated encryption key“ | „Email credentials could use a dedicated encryption key“ или „The Symelo SMTP encryption key is too short“, когато SYMELO_SMTP_KEY има по-малко от 32 знака, с линк към раздела Advanced. |
Здраве на сайта → Информация → Symelo SMTP показва версията, основния и резервния мейлър, режима на доставка, журнала и дали е зададен отделен ключ (или дали е твърде кратък).
Настройка на всеки доставчик
Общи съвети, валидни за всеки доставчик:
- Преди да започнете, потвърдете при доставчика домейна, от който изпращате (или поне адреса на подателя). Непотвърдените адреси на подателя са най-честата причина имейлите да бъдат отхвърлени.
- За инструкциите на самия доставчик използвайте връзката Setup guide във формуляра на връзката.
- Таблата на доставчиците се променят често. Ако някое име на меню по-долу не съвпада точно, потърсете най-близкото до него.
Other SMTP
Използвайте го за всеки SMTP сървър: пощенската кутия при вашия хостинг, Zoho, Fastmail или SMTP relay на доставчик.
| Поле | Какво да въведете | По подразбиране |
|---|---|---|
| Fill in settings for | Изберете доставчик, за да се попълнят хостът, портът, криптирането и (когато е фиксирано) потребителското име. Показва кратка подсказка за този доставчик. | Choose a provider… |
| SMTP host (задължително) | Името на сървъра, например smtp.example.com. | Празно |
| Encryption | STARTTLS (usually port 587), SSL/TLS (usually port 465) или None. | STARTTLS |
| Port (задължително) | При смяна на криптирането портът се сменя на обичайния за него (587, 465 или 25), освен ако не сте въвели собствен порт. | 587 |
| Upgrade to TLS when the server offers it | Показва се само при криптиране None. Превключва към криптирана връзка, ако сървърът я поддържа. | Включено |
| Use authentication | Вход с потребителско име и парола. Изключете го само за сървъри, които не изискват вход. | Включено |
| Username (задължително при удостоверяване) | Обикновено пълният ви имейл адрес или SMTP потребителското име при доставчика. | Празно |
| Password (задължително при удостоверяване) | Паролата, паролата за приложение или SMTP ключът. | Празно |
| Verify the server's TLS certificate | Оставете го включено. Изключете го само за локален тестов сървър със самоподписан сертификат. | Включено |
Времето за изчакване на SMTP връзките е 20 секунди.
Готови настройки в Fill in settings for:
| Готова настройка | Хост | Порт / криптиране | Потребителско име | Показвана подсказка |
|---|---|---|---|---|
| Gmail / Google Workspace (app password) | smtp.gmail.com | 587 STARTTLS | – | Използвайте парола за приложение, а не паролата на акаунта си. Мейлърът Gmail (OAuth) е по-сигурният вариант. |
| Microsoft 365 / Outlook | smtp.office365.com | 587 STARTTLS | – | Microsoft постепенно спира SMTP с парола. За предпочитане е мейлърът Microsoft 365 / Outlook (OAuth). |
| Brevo | smtp-relay.brevo.com | 587 STARTTLS | – | Използвайте SMTP потребителското име и SMTP ключ от Brevo → SMTP & API (не API ключа). |
| Mailgun (US) | smtp.mailgun.org | 587 STARTTLS | – | Използвайте SMTP данните за вход на домейна, напр. [email protected]. |
| Mailgun (EU) | smtp.eu.mailgun.org | 587 STARTTLS | – | Същото като при Mailgun (US). |
| SendGrid | smtp.sendgrid.net | 587 STARTTLS | apikey | Потребителското име е буквално „apikey“; паролата е API ключ с право Mail Send. |
| Postmark | smtp.postmarkapp.com | 587 STARTTLS | – | Използвайте своя Server API token и като потребителско име, и като парола. |
| SendLayer | smtp.sendlayer.net | 587 STARTTLS | – | Използвайте SMTP данните за вход от SendLayer → Settings → SMTP Credentials. |
| Resend | smtp.resend.com | 587 STARTTLS | resend | Потребителското име е „resend“; паролата е вашият API ключ. |
| SMTP2GO | mail.smtp2go.com | 587 STARTTLS | – | Използвайте SMTP потребител от SMTP2GO → Sending → SMTP Users (не API ключа). |
| SparkPost (US) | smtp.sparkpostmail.com | 587 STARTTLS | SMTP_Injection | Паролата е API ключ с право „Send via SMTP“. Акаунтите в ЕС използват smtp.eu.sparkpostmail.com. |
| Mailjet | in-v3.mailjet.com | 587 STARTTLS | – | Потребителското име е вашият API ключ; паролата е вашият Secret key. |
| Amazon SES | email-smtp.us-east-1.amazonaws.com | 587 STARTTLS | – | Заменете us-east-1 с вашия SES регион. SMTP данните за вход на SES са различни от ключовете за достъп на IAM. |
| Zoho Mail | smtp.zoho.com | 465 SSL/TLS | – | Акаунтите в ЕС използват smtp.zoho.eu. |
| Mailpit / MailHog (local development) | localhost | 1025, без криптиране, без вход | – | Улавя всички имейли локално. Никога не го използвайте на работещ сайт. |
За повечето от тези доставчици специалният API мейлър по-долу е по-добър избор от SMTP: той работи дори когато хостингът ви блокира SMTP портовете.
Gmail / Google Workspace (OAuth)
Изпраща през Gmail API с вашия Google акаунт. Не се съхранява парола: влизате с Google, а плъгинът пази криптиран токен за достъп. Работи както с лични Gmail акаунти, така и с акаунти в Google Workspace.
Полета:
| Поле | Какво да въведете |
|---|---|
| Authorized redirect URI | Само за четене. Копирайте го в своето Google приложение (стъпка 4 по-долу). |
| Client ID (задължително) | Завършва на .apps.googleusercontent.com. |
| Client secret (задължително) | От същия OAuth клиент. |
Права (scopes), които плъгинът иска:
https://www.googleapis.com/auth/gmail.send: само изпращане на имейли. Плъгинът не може да чете пощенската ви кутия.openidиemail: за да разбере с кой адрес сте влезли.
Стъпки:
- Отворете Google Cloud Console и създайте проект (или изберете съществуващ).
- Включете Gmail API за проекта.
- Отворете Google Auth platform и настройте екрана за съгласие:
- Google Workspace: задайте аудиторията на Internal. Само хора от вашата организация могат да влизат, а достъпът не изтича.
- Личен Gmail: задайте аудиторията на External, добавете себе си като тестов потребител, ако бъдете попитани, и натиснете Publish app. В режим „Testing“ Google прекратява достъпа след 7 дни.
- Отидете в Clients → Create client, изберете Web application и в authorized redirect URIs поставете Authorized redirect URI от формуляра на връзката. Адресът трябва да съвпада точно.
- Копирайте Client ID и Client secret във формуляра на връзката, попълнете подателя (Sender) и натиснете Add connection (или Save connection).
- В блока Authorization натиснете Sign in with Google, изберете акаунта и разрешете изпращането на имейли. Тъй като приложението е ваше собствено, Google може да предупреди, че не го е проверил; можете да продължите.
- Връщате се във връзката: „Connected. Signed in as [email protected].“
Адрес на подателя: оставете From email празно, за да изпращате от името на акаунта, с който сте влезли. Ако зададете друг адрес, използвайте такъв, който сте добавили в Gmail като псевдоним „Send mail as“; иначе Google може да го замени с адреса на акаунта.
Лимити: имейли до 35 MB, включително прикачените файлове. Важат и дневните лимити за изпращане на самия Gmail. Когато бъдат достигнати, се показва „Gmail's sending limit was reached. It can take several hours to reset.“ (нулирането на лимита може да отнеме няколко часа).
Microsoft 365 / Outlook (OAuth)
Изпраща през Microsoft Graph с пощенска кутия в Microsoft 365 или Outlook.com. Изпратените имейли се запазват и в папката Sent Items („Изпратени“) на пощенската кутия.
Полета:
| Поле | Какво да въведете | По подразбиране |
|---|---|---|
| Authorized redirect URI | Само за четене. Копирайте го в своето Microsoft приложение (стъпка 3 по-долу). | – |
| Application (client) ID (задължително) | От страницата Overview на приложението. | Празно |
| Client secret (задължително) | Value на тайната, а не Secret ID. | Празно |
| Tenant (задължително) | Кои акаунти могат да влизат (вижте таблицата по-долу). Помощният текст на полето казва същото. | Празно за нови връзки. Връзките, дефинирани в wp-config.php без SYMELO_SMTP_TENANT, използват common. |
| „Supported account types“ на вашето приложение | Въведете като Tenant |
|---|---|
| Single tenant only (по подразбиране за нови регистрации; в по-старите екрани се нарича „Accounts in this organizational directory only“) | Вашия Directory (tenant) ID от страницата Overview на приложението |
| Multiple Entra ID tenants | organizations |
| Any Entra ID tenant + personal Microsoft accounts | common |
| Personal accounts only (Outlook.com, Hotmail) | consumers |
Ако Tenant е common и влизането се провали с AADSTS50194 („…isn't configured as a multitenant application…“), приложението ви е single tenant: въведете вместо това неговия Directory (tenant) ID. Съобщението за грешка също го казва.
Права (scopes), които плъгинът иска: Mail.Send и User.Read (делегирани права за Microsoft Graph), плюс openid, email и offline_access (за да продължи входът да работи без ваше участие). Когато връзката има From email и Tenant не е consumers, плъгинът иска и Mail.Send.Shared, което Microsoft изисква за изпращане от друг адрес.
Стъпки:
- Отворете Microsoft Entra admin center и отидете в App registrations → New registration.
- Дайте име на приложението и изберете поддържаните типове акаунти.
- Добавете redirect URI с платформа Web и поставете Authorized redirect URI от формуляра на връзката.
- В API permissions добавете делегираните права за Microsoft Graph Mail.Send и User.Read, както и Mail.Send.Shared, ако ще изпращате от друг адрес (например от споделена пощенска кутия). Ако организацията ви го изисква, дайте администраторско съгласие (admin consent).
- В Certificates & secrets → New client secret създайте тайна и веднага копирайте нейното Value.
- Попълнете Application (client) ID, Client secret и Tenant (вижте таблицата по-горе), задайте подателя в Sender (или оставете From email празно, за да изпращате от името на пощенската кутия, с която ще влезете) и натиснете Add connection (или Save connection).
- Натиснете Sign in with Microsoft, изберете пощенската кутия и приемете.
Какво трябва да знаете:
- Адрес на подателя: оставете From email празно, за да изпращате от името на пощенската кутия, с която сте влезли. За да изпращате от друг адрес, например от споделена пощенска кутия, въведете го като From email. Тогава пощенската кутия, с която сте влезли, се нуждае от право „Send As“ или „Send on Behalf“ за този адрес (дава го администратор на Microsoft 365), а след задаването на адреса трябва да влезете отново, за да включва входът
Mail.Send.Shared. Личните акаунти в Outlook.com могат да изпращат само от собствения си адрес. - Без това право изпращането се проваля с
ErrorSendAsDenied: „The signed-in mailbox isn't allowed to send from this From email. Either leave the connection's From email empty (or enter the signed-in mailbox), or have a Microsoft 365 admin give the mailbox "Send As" or "Send on Behalf" permission for this address, then open the connection and sign in with Microsoft once more.“ - Microsoft може да показва собственото показвано име на пощенската кутия вместо From name. За да промените името, което виждат получателите, сменете показваното име на пощенската кутия в Microsoft 365.
- Пощенската кутия се нуждае от лиценз за Exchange Online. При другите грешки 403 съобщението гласи: „The mailbox may not have an Exchange Online license, or the sign-in is missing a permission. Open the connection and sign in again.“
- Тайните на клиента (client secrets) изтичат (най-късно след 24 месеца). Добавете нова тайна преди това и я въведете във връзката.
- Имейлите са ограничени до 4 MB, включително прикачените файлове.
- Ако сайтът ви използва постоянни връзки Обикновени, redirect URI съдържа
?rest_route=и под него се появява предупреждение. Microsoft не приема redirect URI с query string за приложения, в които влизат лични акаунти на Microsoft. Изберете друга структура в Настройки → Постоянни връзки, след което копирайте новия адрес.
Amazon SES
Евтино изпращане на големи обеми от AWS, през SES v2 API.
| Поле | Какво да въведете | По подразбиране |
|---|---|---|
| Access key ID (задължително) | Създайте IAM потребител, на когото е разрешено само ses:SendEmail, и му създайте ключ за достъп. Това не са SMTP данните за вход на SES. | Празно |
| Secret access key (задължително) | Тайната на този ключ за достъп. | Празно |
| Region | Регионът, в който е потвърдена самоличността ви за изпращане (домейн или адрес). | US East (N. Virginia) – us-east-1 |
| Configuration set | По желание, за публикуване на събития. | Празно |
Новите SES акаунти започват в „sandbox“ и могат да изпращат само до потвърдени адреси. Поискайте от AWS production access, преди да пуснете сайта на живо.
Лимити: 50 получатели на имейл (To, Cc и Bcc общо), 40 MB на имейл.
Brevo
Бившият Sendinblue.
| Поле | Какво да въведете |
|---|---|
| API key (задължително) | Brevo → Settings → SMTP & API → API keys. |
- Адресът на подателя трябва да е потвърден в Brevo.
- Brevo може да блокира API заявки от непознати IP адреси. Ако получите грешка HTTP 401, проверете ключа и разрешете IP адреса на сървъра си в Security → Authorized IPs.
- Brevo приема само един Reply-To адрес; използва се първият.
- Лимит: 20 MB на имейл.
Mailgun
| Поле | Какво да въведете | По подразбиране |
|---|---|---|
| API key (задължително) | Най-добре е domain Sending API key: с него могат да се изпращат имейли само за този домейн. | Празно |
| Sending domain (задължително) | Домейнът, настроен в Mailgun, например mg.example.com. | Празно |
| Region | US или EU: регионът, в който е създаден домейнът. | US |
Грешен регион или домейн води до грешка HTTP 401 или 404: „Check the API key, the sending domain, and that the region matches where the domain was created.“ Лимит: 25 MB на имейл.
SendGrid
| Поле | Какво да въведете | По подразбиране |
|---|---|---|
| API key (задължително) | Settings → API Keys. Достатъчен е „Restricted access“ само с Mail Send. | Празно |
| Region | Global или EU (regional subusers only). | Global |
Подателят трябва да е потвърден Sender Identity. Лимит: 30 MB на имейл.
Postmark
| Поле | Какво да въведете | По подразбиране |
|---|---|---|
| Server API token (задължително) | Servers → вашият сървър → API Tokens. Account token няма да работи. | Празно |
| Message stream | „outbound“ е транзакционният поток по подразбиране. | outbound |
Лимити: 50 получатели на имейл, 10 MB на имейл.
SendLayer
| Поле | Какво да въведете |
|---|---|
| API key (задължително) | SendLayer → Settings → API Keys. |
Изпращайте от адрес в домейн, разрешен в SendLayer. Лимити: 10 получатели в „to“, 10 в „cc“ и 5 в „bcc“ на имейл, 10 MB на имейл.
Resend
| Поле | Какво да въведете |
|---|---|
| API key (задължително) | Resend → API Keys, с „Sending access“. Започва с re_. |
Домейнът на подателя трябва да е потвърден в Resend. Лимити: 50 получатели в „to“ на имейл, 40 MB на имейл.
SMTP2GO
| Поле | Какво да въведете | По подразбиране |
|---|---|---|
| API key (задължително) | SMTP2GO → Sending → API Keys, с право „Emails“. Започва с api-. | Празно |
| Region | Automatic (nearest), US, EU или Australia. | Automatic (nearest) |
Лимит: 50 MB на имейл.
SparkPost
| Поле | Какво да въведете | По подразбиране |
|---|---|---|
| API key (задължително) | Account → API Keys, с право „Transmissions: Read/Write“. | Празно |
| Region | US (sparkpost.com) или EU (eu.sparkpost.com), според вашия акаунт. | US |
Symelo SMTP изпраща през SparkPost като транзакционен имейл, с изключено проследяване на отварянията и кликванията. Лимит: 20 MB на имейл.
Mailjet
| Поле | Какво да въведете |
|---|---|
| API key (задължително) | Account settings → REST API → API Key Management. |
| Secret key (задължително) | От същата страница. |
Адресът на подателя трябва да е валидиран в Mailjet. Mailjet приема само един Reply-To адрес; използва се първият. Лимити: 50 получатели на имейл, 15 MB на имейл.
PHP mail()
Вградената функция за поща на сървъра. Не са нужни настройки („No settings needed.“), но доставяемостта е слаба и много хостинги не я поддържат. Използвайте я само като резервна връзка в краен случай. From email не е задължително за този мейлър: ако остане празно, имейлите запазват адреса на подателя, зададен от WordPress или от плъгина, който ги изпраща.
Лимитите накратко
Symelo SMTP проверява тези лимити преди изпращане, така че получавате ясна грешка вместо отхвърлена заявка.
| Мейлър | Най-голям имейл (вкл. прикачени файлове) | Получатели на имейл |
|---|---|---|
| Gmail / Google Workspace | 35 MB | – |
| Microsoft 365 / Outlook | 4 MB | – |
| Amazon SES | 40 MB | общо 50 |
| Brevo | 20 MB | – |
| Mailgun | 25 MB | – |
| SendGrid | 30 MB | – |
| Postmark | 10 MB | общо 50 |
| SendLayer | 10 MB | 10 to, 10 cc, 5 bcc |
| Resend | 40 MB | 50 „to“ |
| SMTP2GO | 50 MB | – |
| SparkPost | 20 MB | – |
| Mailjet | 15 MB | общо 50 |
Тире означава, че Symelo SMTP сам не проверява лимит; лимитите на доставчика пак важат. Времето за изчакване на API заявките е 30 секунди.
Практически рецепти
Изпращане през Brevo с резервна връзка
- В Brevo потвърдете домейна или адреса на подателя и създайте API ключ (Settings → SMTP & API → API keys).
- В WordPress отидете в Symelo SMTP → Settings и натиснете Add connection.
- Изберете Brevo, поставете API key, въведете потвърдения си адрес в From email, наречете връзката „Brevo“ и натиснете Add connection.
- Натиснете отново Add connection и настройте резервната връзка, например Other SMTP с пощенската кутия при хостинга ви или втори доставчик. Задайте ѝ собствен From email, който този доставчик приема.
- В Routing задайте Primary connection да е Brevo, а Backup connection – втората връзка. Натиснете Save routing.
- В Send a Test изберете Only име на резервната връзка и изпратете тест, за да се уверите, че резервната връзка работи и самостоятелно.
- Изпратете още един тест с Normal routing (primary, then backup).
Когато Brevo откаже, записът в журнала показва два опита в Delivery attempts: неуспешния опит през Brevo и приетия опит през резервната връзка.
Как да не се изпращат имейли от staging сайт
Вариант А, в администрацията:
- На staging сайта отидете в Symelo SMTP → Settings → General.
- В Mode изберете Log only: record emails but never send them и натиснете Save Changes.
Вариант Б, в wp-config.php (по-добрият избор за агенции, защото оцелява при копиране на базата данни от живия сайт):
define( 'SYMELO_SMTP_DELIVERY', 'log_only' );
Добавете това в wp-config.php на staging сайта, преди да импортирате базата данни на живия сайт, така че копието да не може да изпрати нищо междувременно. Тогава настройката Mode е заключена: „Set by SYMELO_SMTP_DELIVERY in wp-config.php.“
И в двата случая:
- Имейлите се появяват в журнала със статус Not sent (log only), а предупредително съобщение ви напомня, че имейлите не се доставят.
- Тест с Normal routing само се записва в журнала. Тест през Only Име наистина изпраща, затова го използвайте само със собствения си адрес.
Съобщение в Slack при неуспешен имейл
- В Slack създайте incoming webhook за желания канал и копирайте неговия URL.
- Отидете в Symelo SMTP → Settings → Alerts.
- В Add a channel задайте Type на Slack, поставете Webhook URL и натиснете Add channel.
- Натиснете Send test alert. В Slack трябва да видите „Symelo SMTP test alert from вашия сайт“.
- Променете At most one alert every … minutes, ако искате повече или по-малко известия по време на срив.
Всички имейли от вашия домейн, без да се губят отговорите
Плъгините за контактни форми и онлайн магазини често задават адреса на посетителя или клиента като адрес на подателя. Доставчиците отхвърлят такива имейли.
- Редактирайте връзката.
- Въведете в From email адрес от потвърдения си домейн, например
[email protected]. - Оставете отметнато Use this address for every email, even when a plugin sets its own From address.
- Запазете.
Отговорите пак стигат до правилния човек, когато плъгинът задава Reply-To адрес (Contact Form 7 и WooCommerce го правят).
По-малко лични данни в журнала на имейлите
- Отидете в Settings → Logging.
- Махнете отметката от Store the message body, за да се пазят само получателите, темата и статусът. (Тогава няма да можете да преглеждате и да изпращате повторно имейли.)
- Намалете Keep entries for до броя дни, които наистина са ви нужни.
- Натиснете Save Changes.
- По желание натиснете Delete all log entries, за да изтриете вече съхраненото.
Настройка на клиентски сайт в wp-config.php
Когато връзката е дефинирана в wp-config.php, данните за вход не са в базата данни и редакторите на сайта не могат да ги променят.
define( 'SYMELO_SMTP_MAILER', 'mailgun' );
define( 'SYMELO_SMTP_API_KEY', 'your-key' );
define( 'SYMELO_SMTP_DOMAIN', 'mg.example.com' );
define( 'SYMELO_SMTP_REGION', 'eu' );
define( 'SYMELO_SMTP_FROM_EMAIL', '[email protected]' );
define( 'SYMELO_SMTP_FROM_NAME', 'Example Ltd' );
Връзката се показва като „Defined in wp-config.php“, винаги е основна и в администрацията може само да се преглежда. Settings → Advanced → Configure with constants изброява всички константи. Вижте За разработчици.
Отстраняване на проблеми
Започнете оттук
- Изпратете тест от Send a Test. Резултатът показва точната грешка и подсказки.
- Или отворете неуспешния имейл в Email Log. Грешката, подсказките и Delivery attempts са най-горе.
- Отворете Technical details под опита, за да видите SMTP комуникацията или отговора на доставчика.
Повечето проблеми се свеждат до адреса на подателя, данните за вход или блокиран порт.
Чести грешки
Symelo SMTP разпознава тези грешки и показва съответната подсказка:
| Грешката изглежда като | Причина и решение |
|---|---|
| „from address failed“, „not allowed to send from“, „sender address rejected“, „right to send mail on behalf“, „5.7.60“, „553 5.7.1“ | Сървърът е отказал адреса на подателя. Редактирайте връзката и въведете в Sender → From email адрес, от който този акаунт има право да изпраща (при SMTP обикновено потребителското име), и оставете Use this address for every email включено. |
| „could not authenticate“, „535“, „authentication failed“, „username and password not accepted“ | Сървърът е отхвърлил потребителското име или паролата. Gmail и Google Workspace изискват парола за приложение (или използвайте мейлъра Gmail). Microsoft 365 изисква включен SMTP AUTH за пощенската кутия (или използвайте мейлъра Microsoft 365). |
| „could not connect“, „connection refused“, „timed out“, „network is unreachable“ | Пощенският сървър е недостъпен. Много хостинги блокират изходящите SMTP портове (25, 465, 587): помолете хостинга си да ги отвори, опитайте порт 2525, ако доставчикът ви го поддържа, или преминете към API мейлър, който използва обикновен HTTPS. |
| „certificate“, „ssl“, „tls“, „handshake“ | Защитената връзка е неуспешна. Уверете се, че криптирането съответства на порта: SSL/TLS за 465, STARTTLS за 587. |
| „sender identity“, „not verified“, „domain is not …“ | Доставчикът ви все още не приема този адрес на подателя. Потвърдете адреса или домейна му при доставчика, след което го въведете като From email на връзката (редактирайте връзката, в Sender). |
| „HTTP 401“, „unauthorized“, „invalid api key“, „forbidden“ | Доставчикът е отхвърлил API ключа. Проверете дали сте копирали целия ключ и дали той има право да изпраща имейли. |
| „HTTP 429“, „rate limit“, „quota“, „daily limit“, „credits“ | Достигнат е лимит за изпращане. Изчакайте известно време или увеличете лимита при доставчика си. |
| „AADSTS50194“, „AADSTS90002“ | Microsoft изисква собствения tenant на това приложение. Копирайте Directory (tenant) ID от страницата Overview на приложението в Microsoft Entra в полето Tenant на връзката, запазете и влезте отново. |
| „invalid_grant“, „revoked“, „expired“, други кодове „AADSTS…“ | OAuth упълномощаването вече не е валидно. Отворете връзката и влезте отново. При Microsoft проверете и дали тайната на клиента не е изтекла. |
| „Could not instantiate mail function“, „mail() has been disabled“ | Този сървър не може да изпраща имейли с PHP mail(). Добавете SMTP или API връзка. |
| „too large“, „size limit“ | Имейлът е твърде голям за този доставчик, обикновено заради прикачените файлове. Изпратете по-малки файлове или линк вместо тях. |
| „Could not reach the provider: …“ | Сървърът ви не може да се свърже с API на доставчика. Проверете дали изходящият HTTPS е разрешен или попитайте хостинга си. |
| „Доставчик rejected the email (HTTP код): …“ | След двоеточието следва обяснението на самия доставчик. |
| „The email is too large for Доставчик (limit …, including attachments).“ | Вижте Лимитите накратко. |
| „Attachment "…" could not be read.“ | Файлът, прикачен от изпращащия плъгин, не съществува или не може да бъде прочетен. |
| „Unknown mailer "…". Was an add-on deactivated?“ | Връзката използва мейлър от плъгин, който вече не е активен. |
Тестът казва „sent“, но имейлът така и не пристига
„Accepted“ означава, че доставчикът е приел имейла. Ако той не пристига:
- Проверете папката за спам.
- Проверете журнала с активността при самия доставчик; там се вижда дали сървърът на получателя е приел имейла, или го е върнал.
- Уверете се, че домейнът на адреса на подателя е потвърден при доставчика (SPF и DKIM записи). Имейлите от непотвърдени домейни често попадат в спама.
- Проверете дали режимът на доставка не е Log only (тогава статусът в журнала ще е Not sent (log only)).
Gmail спира да работи след 7 дни
Приложението ви в Google Cloud е в режим „Testing“. Публикувайте го („In production“) или задайте аудиторията му на „Internal“, ако използвате Google Workspace. След това отворете връзката и влезте отново.
Microsoft 365 внезапно спира да работи
- Грешки „AADSTS…“ след месеци безпроблемна работа обикновено означават, че тайната на клиента е изтекла. Създайте нова тайна в Microsoft Entra, въведете нейното Value във връзката и запазете.
ErrorSendAsDeniedозначава, че From email е адрес, от чието име пощенската кутия, с която сте влезли, няма право да изпраща. Оставете From email празно или дайте на пощенската кутия право „Send As“ или „Send on Behalf“ и влезте отново. Вижте Microsoft 365 / Outlook.
Проблеми с входа (Gmail и Microsoft 365)
| Съобщение | Решение |
|---|---|
| „Save the client ID and client secret first.“ | Попълнете двете полета и запазете връзката, преди да влезете. |
| „Finish the connection settings first: …“ | Някое задължително поле все още е празно, например Tenant при Microsoft. Попълнете го и запазете връзката. |
| „The sign-in link expired or was already used. Try again.“ | Натиснете отново Sign in with … и завършете входа до 10 минути, в същия браузър и със същия администраторски акаунт. |
| „Sign-in was not completed: …“ | Вие сте отказали или доставчикът е отказал. Причината от доставчика следва след двоеточието; често redirect URI не съвпада. Копирайте отново Authorized redirect URI и го поставете в приложението точно както е. |
| „… AADSTS50194: Application … isn't configured as a multitenant application …“ | Приложението ви в Microsoft е single tenant, но в полето Tenant пише common или organizations. Въведете Directory (tenant) ID на приложението, запазете и влезте отново. Съобщението също завършва с този съвет. |
| „The provider didn't return a refresh token, so the connection would stop working within an hour.“ | Премахнете достъпа на този сайт в настройките за сигурност на своя акаунт в Google или Microsoft, след което влезте отново. |
| „Permission to send email wasn't granted.“ | Влезте отново и разрешете изпращането на имейли на екрана за съгласие. |
| „The sign-in service refused the request (…)“ | Обикновено грешен client ID, client secret или tenant. Когато Symelo SMTP разпознае грешката, след съобщението следва съответна подсказка. |
Ако адресът на сайта ви се промени (нов домейн или преминаване от http към https), redirect URI също се променя. Обновете го в приложението си в Google или Microsoft и влезте отново.
Запазената стойност вече не може да бъде декриптирана
Виждате „The saved value can't be decrypted any more (the site's keys changed). Enter it again.“ или „… can no longer be decrypted …“.
Тайните се криптират с SYMELO_SMTP_KEY или, ако той липсва, със salt ключовете на сайта ви. Ако ключът или salt ключовете са се променили (някои плъгини за сигурност ги сменят периодично, а сайт, копиран на нов сървър, може да има различни ключове в wp-config.php), старите стойности не могат да бъдат прочетени. Въведете отново паролите и ключовете, влезте отново при OAuth връзките и добавете наново каналите за известия, отбелязани с „Unreadable, add it again“. Отделен SYMELO_SMTP_KEY (копиран заедно със сайта) предотвратява това занапред.
Активен е друг SMTP плъгин
Само един плъгин може да управлява имейлите на WordPress. Здраве на сайта съобщава „More than one SMTP plugin is active“, когато открие WP Mail SMTP, WP Mail SMTP Pro, FluentSMTP, Post SMTP, Easy WP SMTP, GoSMTP, SMTP Mailer, WP Offload SES Lite или SureMail. Деактивирайте останалите.
Ако тест покаже „Symelo SMTP didn't handle this email. Another plugin may be taking over wp_mail(); deactivate other SMTP plugins.“, друг плъгин е прихванал имейла, преди Symelo SMTP да го види.
Известията не пристигат
- Натиснете Send test alert. Грешките се показват: „The test alert failed: …“ или „The webhook answered with HTTP …“.
- Webhook адресът трябва да е публичен
https://адрес. Адреси в локалната ви мрежа се отказват. - По време на срив се изпраща само по едно известие за период на ограничение (по подразбиране 60 минути).
Все още не работи?
Отидете в раздела Support, натиснете Copy system information и изпратете информацията заедно с описание на проблема на [email protected].
Поверителност и сигурност
Какво се съхранява и къде
| Данни | Къде | Защита |
|---|---|---|
| Настройки и връзки (доставчик, хост, потребителско име, адрес на подателя) | Опцията symelo_smtp_settings в базата данни на WordPress. | Паролите, API ключовете и тайните на клиента са криптирани. |
| OAuth входове (Gmail, Microsoft 365) | По една опция в базата данни за всяка връзка. | Криптирани. |
| Webhook адреси и тайни за подписване на известията | В опцията с настройките. | Криптирани. В администрацията се показва само хостът. |
| Журнал на имейлите | Таблица в базата данни ({prefix}symelo_smtp_logs) за всеки сайт. | Видим само за администратори. |
Криптирането използва libsodium с SYMELO_SMTP_KEY от wp-config.php или с ключ, извлечен от salt ключовете на сайта ви. Тайните никога не се изпращат обратно към браузъра: полетата за тайни остават празни след запазване.
Журналът на имейлите пази за всеки имейл: дата, статус, адрес и име на подателя, всички получатели (To, Cc, Bcc, Reply-To), тема, допълнителни заглавки, имена и размери на прикачените файлове (никога самите файлове), използваните връзка и мейлър, изпращащия плъгин, идентификатора на съобщението при доставчика, евентуална грешка и опитите за доставка. При включено Content пази и съдържанието на съобщението (до 1 MB). Debug изходът в Technical details никога не съдържа съдържанието на имейла (то се заменя с „[message content omitted]“), а паролите, ключовете и токените са маскирани.
Записите в журнала се изтриват след периода на съхранение (по подразбиране 30 дни). Ако Keep entries for е 0, те се пазят, докато не ги изтриете.
Какво се изпраща и къде
- Вашите имейли отиват при доставчика на връзката, която ги изпраща. API заявките се идентифицират с user agent
SymeloSMTP/<version>, който включва адреса на сайта ви. - Вход в Gmail / Microsoft 365: браузърът ви отива на страницата за вход на Google или Microsoft. След това сайтът ви обменя входа за токени директно с Google или Microsoft, научава имейл адреса на акаунта ви и по-късно подновява токените при тях. Прекъсването или изтриването на Gmail връзка също така иска от Google да отмени входа.
- Известията отиват на въведените от вас webhook адреси: име и адрес на сайта, темата и получателите на неуспешния имейл, името на връзката, грешката и линк към записа в журнала.
- Нищо не се изпраща никъде, докато не добавите връзка или канал за известия, а плъгинът никога не изпраща нищо на Symelo LTD.
Инструменти за GDPR
- Инструменти → Експортиране на лични данни включва записите от „Symelo SMTP email log“, изпратени до или от посочения адрес (дата, подател, получатели, тема и текст на съобщението).
- Инструменти → Изтриване на лични данни изтрива тези записи от журнала.
- Настройки → Поверителност предлага текст за политиката ви за поверителност, който описва журнала на имейлите. Текстът следва настройката Keep entries for: „Log entries are deleted automatically after 30 days.“ или, при 0, „Log entries are kept until the site owner deletes them.“
Безопасен преглед на записаните имейли
Записаните HTML имейли се показват в изолирана рамка за преглед, която не може да изпълнява скриптове, а отдалечените изображения са блокирани, докато не натиснете Load them. Това ви пази от проследяващи пиксели и злонамерено съдържание в записаните имейли.
Бележки за сигурността
- Всяко действие в администрацията проверява дали сте администратор и използва защитата на WordPress с nonce срещу фалшифицирани заявки.
- OAuth използва authorization code flow с PKCE, а входът е обвързан с администратора, който го е започнал.
- CSV експортите неутрализират формулите за електронни таблици.
Отмяна и деинсталиране
- Спиране на използването на връзка: променете Routing или изтрийте връзката. Ако изтриете всички връзки, отново влиза в сила стандартната настройка за поща на WordPress.
- Спиране на изпращането без деинсталиране: превключете General → Mode на Log only.
- Деактивиране: WordPress веднага се връща към стандартния си начин на изпращане на имейли. Настройките, връзките и журналът остават в базата данни, така че при повторно активиране всичко се възстановява. Ежедневната задача за почистване спира.
- Изтриване (Разширения → Изтриване):
- Ако Advanced → Uninstall → Delete all settings and logs when the plugin is deleted е включено: настройките, връзките, OAuth входовете, таблицата с журнала на имейлите и временните данни се изтриват. При multisite собствената настройка на всеки сайт определя какво става с неговите данни.
- Ако е изключено (по подразбиране): настройките и журналът остават в базата данни, така че при повторно инсталиране продължавате оттам, докъдето сте стигнали.
- И в двата случая се изтриват личните предпочитания на потребителите (затворени съобщения, брой записи на страница).
Изтриването на плъгина не отменя достъпа на приложението, което сте създали в Google или Microsoft. Първо натиснете Disconnect на тези връзки или премахнете достъпа на приложението в настройките на акаунта си.
За разработчици
Константи в wp-config.php
Константите имат предимство пред екрана с настройки и заключват съответните полета.
Връзка. Дефинирането на SYMELO_SMTP_MAILER създава връзка само за четене с име „Defined in wp-config.php“ (ID wp-config), която винаги е основната връзка.
| Константа | Използва се от | Стойности |
|---|---|---|
SYMELO_SMTP_MAILER | – | smtp, gmail, outlook, amazon_ses, brevo, mailgun, sendgrid, postmark, sendlayer, resend, smtp2go, sparkpost, mailjet, php_mail |
SYMELO_SMTP_HOST | smtp | Име на хоста |
SYMELO_SMTP_ENCRYPTION | smtp | tls (STARTTLS), ssl, none |
SYMELO_SMTP_PORT | smtp | Номер на порт |
SYMELO_SMTP_AUTO_TLS | smtp | true / false |
SYMELO_SMTP_AUTH | smtp | true / false |
SYMELO_SMTP_USERNAME | smtp | Потребителско име |
SYMELO_SMTP_PASSWORD | smtp | Парола |
SYMELO_SMTP_VERIFY_CERTIFICATE | smtp | true / false |
SYMELO_SMTP_CLIENT_ID | gmail, outlook | OAuth client ID |
SYMELO_SMTP_CLIENT_SECRET | gmail, outlook | OAuth client secret |
SYMELO_SMTP_TENANT | outlook | Directory (tenant) ID, organizations, common или consumers (по подразбиране common) |
SYMELO_SMTP_ACCESS_KEY_ID | amazon_ses | IAM access key ID |
SYMELO_SMTP_SECRET_ACCESS_KEY | amazon_ses | IAM secret access key |
SYMELO_SMTP_REGION | amazon_ses, mailgun, sendgrid, smtp2go, sparkpost | Код на SES регион (напр. eu-west-1); Mailgun us/eu; SendGrid global/eu; SMTP2GO auto/us/eu/au; SparkPost us/eu |
SYMELO_SMTP_CONFIGURATION_SET | amazon_ses | Име на configuration set |
SYMELO_SMTP_API_KEY | brevo, mailgun, sendgrid, sendlayer, resend, smtp2go, sparkpost, mailjet | API ключ |
SYMELO_SMTP_DOMAIN | mailgun | Домейн за изпращане |
SYMELO_SMTP_SERVER_TOKEN | postmark | Server API token |
SYMELO_SMTP_MESSAGE_STREAM | postmark | Message stream (по подразбиране outbound) |
SYMELO_SMTP_SECRET_KEY | mailjet | Secret key |
SYMELO_SMTP_FROM_EMAIL | всички | Адрес на подателя (From email) |
SYMELO_SMTP_FROM_NAME | всички | Име на подателя (From name) |
SYMELO_SMTP_FORCE_FROM_EMAIL | всички | true (по подразбиране) / false |
SYMELO_SMTP_FORCE_FROM_NAME | всички | true / false (по подразбиране) |
Полетата, които не дефинирате, получават стойностите по подразбиране на мейлъра. Ако SYMELO_SMTP_MAILER сочи непознат мейлър, константите се игнорират, а екраните на плъгина и Здраве на сайта показват предупреждение със стойността и валидните ID на мейлъри. Връзките с Gmail и Microsoft, дефинирани по този начин, все пак изискват еднократно Sign in with … от екрана View.
Общи и криптиране:
| Константа | Стойности |
|---|---|
SYMELO_SMTP_DELIVERY | send или log_only. Заключва General → Mode. |
SYMELO_SMTP_KEY | Поне 32 случайни знака (разделът Advanced предлага случаен ключ от 64 знака). Ключ за криптиране на съхранените тайни. По-късите ключове се игнорират, като се показва предупреждение в раздела Advanced и в Здраве на сайта. |
Действия
| Действие | Аргументи | Кога |
|---|---|---|
symelo_smtp_loaded | Plugin $plugin | Symelo SMTP е зареден. Добавките се закачат тук. |
symelo_smtp_register_mailers | Registry $registry | Регистрирайте собствен мейлър с $registry->add( new My_Mailer() ). Мейлърите имплементират Symelo\SMTP\Mailers\MailerInterface. |
symelo_smtp_mail_sent | array $entry | Имейл е предаден на доставчика. Ключове: status, mailer, connection, message (обект Symelo\SMTP\Mail\Message), message_id, attempts, log_id и други. |
symelo_smtp_mail_failed | array $entry | Нито една връзка не е успяла да достави имейла. Същите ключове, плюс error. |
Филтри
| Филтър | По подразбиране | Предназначение |
|---|---|---|
symelo_smtp_capability | 'manage_options' | Правото (capability), нужно за преглед и промяна на настройките и журналите. |
symelo_smtp_log_row | – | ( array $row, array $entry ). Променете ред от журнала, преди да бъде съхранен, или върнете false, за да не се записва. |
symelo_smtp_smtp_presets | Вградените готови настройки | Добавяне или промяна на готови SMTP настройки: id => [ label, host, port, encryption (tls/ssl/none), username, auth, help ]. |
symelo_smtp_http_timeout | 30 | ( int $seconds, string $mailer_id ). Време за изчакване на API заявките към доставчика (минимум 5). |
symelo_smtp_smtp_timeout | 20 | Време за изчакване на SMTP връзката в секунди (минимум 5). |
symelo_smtp_more_from_symelo | [] | Продукти, изброени в „More from Symelo LTD“ в раздела Support: [ [ 'title' => …, 'description' => …, 'url' => … ] ]. Картата се показва само когато списъкът не е празен. |
WP-CLI
| Команда | Какво прави |
|---|---|
wp symelo-smtp status | Режим на доставка, основна и резервна връзка (ако няма основна: дали имейлите минават през резервната или през стандартната настройка за поща на сървъра), адрес на подателя и броят имейли за последните 7 дни. |
wp symelo-smtp connections [--format=<table|json|csv|yaml>] | Изброява връзките с ID, име, мейлър, роля и статус. |
wp symelo-smtp test <email> [--connection=<id>] | Изпраща тестов имейл и извежда всеки опит. --connection изпраща само през една връзка (и наистина изпраща, дори в режим Log only). В режим Log only без --connection имейлът само се записва в журнала и командата завършва с предупреждение вместо „Success“. |
wp symelo-smtp log list [--status=<sent|failed|blocked>] [--limit=<n>] [--format=<format>] | Последните записи в журнала (по подразбиране 20, максимум 200). blocked означава „Not sent (log only)“. |
wp symelo-smtp log purge --older-than=<days> | Изтрива записите, по-стари от посочения брой дни. |
wp symelo-smtp log purge --all [--yes] | Изтрива всички записи (иска потвърждение, освен при --yes). |
REST API
Symelo SMTP регистрира един публичен маршрут, GET /wp-json/symelo-smtp/v1/oauth. Той е адресът за OAuth пренасочването и само препраща отговора на Google или Microsoft към wp-admin, където се проверяват влезлият администратор и заявката за вход. Няма REST API за управление на настройките.
Съдържание на заявката към Webhook (JSON)
Каналите за известия от тип Webhook (JSON) получават POST заявка с Content-Type: application/json:
{
"event": "email_failed",
"site": "My Site",
"site_url": "https://example.com/",
"time": "2026-10-12T09:30:00+00:00",
"subject": "Your order",
"recipients": "[email protected]",
"connection": "Brevo",
"error": "Brevo rejected the email (HTTP 401): …",
"log_url": "https://example.com/wp-admin/admin.php?page=symelo-smtp-log&view=123",
"suppressed": 0
}
event е test при тестовите известия. suppressed е броят неуспехи, пропуснати заради ограничението на честотата след последното известие. При зададена тайна за подписване заглавката X-Symelo-Signature е sha256=, последвано от шестнадесетичния HMAC-SHA256 на суровото тяло на заявката.
Планирана задача
symelo_smtp_daily се изпълнява веднъж дневно: изтрива записите в журнала, по-стари от периода на съхранение, и опреснява OAuth входовете, които не са използвани 7 дни. Премахва се при деактивиране.