SMTP

SMTP Protokol

SMTP je zkratka pro Simple Mail Transfer Protocol. Umožňuje klientovi (zde SDS) připojit se na server (SMTP Server) za účele odeslání zprávy elektronické pošty (EMAIL).

Detaily protokolu jsou zde, nicméně SDS toto vše zařizuje samo uvnitř sebe, takže to nemusíte studovat.

Aby komunikace fungovala, je potřeba mít k dispozici TCP port 25 - tento port je v SDS zadán napevno. Pozor ať ve vaší sítí není tento port blokován např. firewallem.


Komunikaci zahajuje SDS směrem do SMTP serveru, kdy otevře TCP spojení a prostřednictvím SMTP protokolu se domluví se serverem a předá mu jednu zprávu (email) pro odeslání směrem k příjemci zprávy.

SDS tedy neposílá zprávu přímo (do schránky příjemce), ale odesílá ji přes prostředníka (tady vámi určený SMTP Server), který ji teprve doručí (a pokud se to nedaří, tak doručování opakuje, atd. je toho hodně co pro nás takový server zařizuje).


Port 25

Zařízení SDS (První Produktová Řada) komunikuje se SMTP Server na pevně daném TCP portu číslo 25, a to plain-text protokolem (tedy ne za pomocí SSL/TLS).

SDS se tedy nepřipojí k SMTP Serveru, který vyžaduje SSL/TLS, tedy spojení na portu číslo 465.

Pozor, funkce "SMTP autentikace" je nezávislá na portu, a SDS ji podporuje, viz text dále. Tato funkce je vyžadována většinou SMTP Serverů.


Konfigurace SDS

Všechny výrobky SDS mají jednotný způsob konfigurace, prostřednictvím webového rozhraní.

SMTP Server samozřejmě musí akceptovat připojení z výrobku, a aby se tak stalo, SDS má možnost se tomuto serveru "autentizovat" prostřednictvím vámi zadaných údajů.

Zadat je potřeba:

  • IP adresu SMTP Serveru (pozor: v současnosti nelze zadat doménové jméno, musíte zadat pouze a jen přímou IP adresu).
  • údaj zda-li je požadována autentizace jméno/heslo (checkbox: ano/ne)
  • uživatelské jméno (maximálně 32 znaků, pamatujte na to při registraci)
  • heslo (maximálně 32 znaků, pamatujte na to při registraci)
  • emailovou adresu odesílatele

Adresa odesílatele je při každém odeslání emailu předána na SMTP Server. Ten může mít určitá omezení na to, co mu SDS předá - např. platný tvar, nebo obsah. Často je zpráva odmítnuta SMTP Serverem protože nezadáte správnou emailovou adresu odesílatele.

Konfigurace v SDS se tedy provádí ve webovém rozhraní (po příhlášení), stránka Admin, potom CONFIG DNS, SMTP.

Historický firmware - do 17. července 2010 - měl omezení jen na 16 znaků (pro jméno a heslo), ale všechny následující verze už mají povoleno celkem 32 znaků pro každou položku (to už stačí pro všechny případy).

Známé uživatelské chyby (troubleshooting když se nedaří odeslat email):

  • některé SMTP servery chtějí uživatelské jméno jako celý email, ale některé jen jako jméno bez domény (pozor!!!)
  • zapomenete v konfiguraci zaškrtnou checkbox pro povolení autentifikace
  • je zadáno neplatné uživatelské jméno nebo heslo
  • je zadána neplatná IP adresa SMTP serveru
  • je zadána neplatna adresa odesílatele (vždy musí být zadána celá emailová adresa)

Používání: odesílání emailu - SDS-C

Prostřednictvím SDS-C, funkce <c>smtp_send</c>. Detaily viz návod ke konkrétní funkci.

Jakmile SMTP server úspěšně přijme celý požadavek, sám se už stará o doručení emailu. Podle své konfigurace se o to může snažit i několik dní či déle, to v situaci že cílový server není dočasně dostupný - takže pozor, ať vám pak nepřijde email s alarmovým hlášením o dva dny později a vy se budete divit. Další zpoždění v doručování způsobuje např. whitelisting a jiné různé anti-spamové techniky. Je už na vás, jak si zařídíte konfiguraci SMTP serveru.

Po zavolání funkce smtp_send je odesílání emailu prováděno "na pozadí", což znamená, že program v SDS-C dále pokračuje. Úspěšnost odeslání je potřeba zkontrolovat čtením hodnoty konkrétní systémové proměnné. Poznámka: nelze odesílat více emailu najednou, vždy musí být před odesíláním dalšího emailu odeslán email předchozí.

Vhodný první testovací program - nahrejte do zařízení pro ověření správnosti konfigurace SMTP serveru:

// SDS-C
main
{
   // odeslu jeden email (vyplnte spravne cilovou adresu - prvni parametr)
   smtp_send('komu@kam.cz','testovaci email','Toto je testovaci email.');

   // a ted to tady zacyklime, v tomto priklade chceme aby se to tady zastavilo 
label smycka:
  goto smycka;
}

Komunikace mezi SDS a SMTP Serverem pak bude vypadat následovně:

Skutečná komunikace mezi SDS a SMTP serverem, datum: ČERVEN 2018
220 2.0.0 ABCDXYZ SMTP server waiting for your HELO/EHLO
EHLO [192.168.1.250]
250-Email.smtp-server-domain.cz - bla bla bla ESMTP
250-AUTH LOGIN PLAIN
250-8BITMIME
250-PIPELINING
250-SIZE 26000000
250-ENHANCEDSTATUSCODES
250-STARTTLS
250 X-SZNEXTENSIONS
AUTH LOGIN
334 V************************=
334 U********************=
235 2.2.0 Authentication succeeded
MAIL FROM: <thatisme@smtp-server-domain.cz>
250 2.1.0 Ok <thatisme@smtp-server-domain.cz>
RCPT TO: <someone@example-target-server.cz>
250 2.1.5 Ok <someone@example-target-server.cz>
DATA
354 Enter message, ending with <CRLF>.<CRLF>
To: <someone@example-target-server.cz>
From: <thatisme@smtp-server-domain.cz>
Subject: testovaci email

Obsah emailu, tedy jeho text, test test test.

.
250 2.0.0 Mail X********* queued for delivery in session Y************.
QUIT
221 2.0.0 Thanks for your visit, have a nice day.

Jak lze vidět, stále existuje SMTP Server který na portu 25 umožní odeslat email.

Pokud by tomu tak nebylo, můžete si takový server snadno zprovoznit ve své vlastní síti, a nechat své SDS ať komunikuje právě s ním. Tím obecně dosáhnete i větší bezpečnosti komunikace, protože ta je mezi SDS a SMTP Serverem v plain-textu. Nicméné dále mezi SMTP Serverem a zbytkem Internetu (další servery, příjemce zprávy atd.) už můze být (podle nastavení) zabezpečená více.


Chybové hlášení v SDS První Produktové Řady (SDS-C)

Každé úspešné i neúspěšne odeslání emailu je zaznamenáno v logu, ke kterému je přístup přes webové rozhraní zařízení (stránka Log, sekce "OSI7 Log"). Současně je chybový kód předán i do systémové proměnné pro program v SDS-C.

Význam jednotlivých chybových kódů, tak jak jsou zobrazeny v logu:

  • 0 = bez chyby (odesláno ok)

Všechny ostatní chyby znamenají, že email NEBYL odeslán:

  • 1 = timeout (vypršel dovolený čekací čas při odesílání)
  • 2 = mail server is not ready
  • 3 = got error in HELO reply
  • 4 = sender address is unavailable (chybné nastavení autentifikace pro SMTP server)
  • 5 = recepient address is unavailable
  • 6 = RELAY ACCESS DENIED (známá chyba - problém s autentifikací / autorizací)
  • 7 = problém s odesíláním dat
  • 8 = nelze ukončit odesílání dat
  • 9 = AUTH LOGIN is not supported (pokud o přihlášení se k SMTP serveru, který však autentifikaci neprovádí)
  • 10 = neplatné uživatelské jméno (špatná konfigurace)
  • 11 = neplatné uživatelské heslo (špatná konfigurace)
  • 12 = SMTP server odpověděl s chybou "550 Invalid recipient" (často způsobuje anti-spam)
  • 13 = nelze navázat spojení (příliš mnoho právě aktivních spojení)
  • 14 = stále nebylo dokončeno odesílání předchozího emailu (je stále připojen k SMTP serveru, ale ještě ani nedokončil komunikaci)
  • 15 = chyba 501 Wrong syntax ... - znamená to, že si SMTP server nerozumí s SMTP klientem v zařízení

Pozor - zde uvedené hodnoty jsou používány pouze ve webovém rozhraní. Pro program v SDS-C jsou použity hodnoty uvedené v tomto seznamu.


SDS Druhé Produktové Řady - FULL-C

Viz jiná stránka ohledně FULL-C - tedy FULL-C:_smtp_client_functions.