Emaily na vlastní doméně - díl 2: naše řešení

lis 21 2017

Po zjištění z minulého dílu jsme se v Triton IT rozhodli nasadit vlastní mail server. Z běžně používaných řešení je ale pouze Microsoft Exchange Server dostupný jako kompetní balík všeho, co je potřeba. MS Exchange Server samozřejmě představuje nemalou investici a funguje jen na zařízeních s operačním systémem Windows Server. Vzhledem k našim požadavkům na nízkou cenu nezbývá, než ho přeskočit a podívat se na celé téma podrobněji.

Pro úspěšný běh vlastního mail serveru na internetu je potřeba jen následující tři kusy software:

  • MTA: Mail Transfer Agent vyměňuje emaily po internetu. Funguje jako server i klient nad protokolem SMTP. Příkladem MTA jsou programy sendmail, postfix a exim4. V podstatě má jen dva úkoly:
    • jako klient se připojí k jinému MTA a doručí mu email.
    • jako server čeká, až mu někdo (např. jiný MTA) doručí email. Pak se rozhodne, jestli ho někam uloží, nebo ho jde poslat dál.
  • MDA: Mail Delivery Agent umožňuje uživatelům stahovat emaily ze serveru. Konkrétně povoluje klientským programům (MUA) se připojit prostřednictvím protokolů IMAP nebo POP3 ke schránkám uživatelů. Teoreticky také může schránky a uživatele spravovat, to je něco, co ale umí i někteří MTA a obecně není jasně dáno, kdo to má mít starost.
  • MUA: Mail User Agent je program, s kterým pracuje uživatel. MUA má zpravidla hezké grafické rozhraní s přehledem emailů ve schránce, ukládá si kontakty, umožňuje snadno přikládat přílohy, atd. Mezi MUA patří MS Outlook, Thunderbird, ale i GMail.com a Seznam.cz.

Když si oddělíme databázi našich uživatelů a samotné úložiště schránek, jde to celé nakreslit asi takto:

Náčrt propojení programů a služeb v mail serveru

Při návrhu se největším úskalím ukázalo být vyzvedávání emailů pomocí MUA z MDA. Přestože komunikace přes protokoly POP3 a IMAP je naprosto přímočará a jasně definovaná, některé MUA se rozhodly zavést si vlastní dodatečná pravidla k formátu uživatelských jmen a šifrování. Konkrétně:

  • MS Outlook nefunguje, dokuď nemá uživatelská jména pro komunikaci s MDA jen v alfanumerickém tvaru, tj. bez symbolu @ (nelze použít email jako přihlašovací jméno).
  • GMail protestuje, pokud TLS komunikace není realizována pomocí certifikátu od některé z mezinárodních certifikačních autorit. Certifikát od Let's encrypt v době našeho testování (2016) bohužel nebyl podporován.

Finální řešení

Po dlouhém výzkumu metodou pokus-omyl jsme došli k následujícímu rozvržení:

  • MTA = postfix
  • MDA = dovecot
  • MUA = co má kdo rád, za mě jednoznačně GMail
  • Schránka = složka na serveru, kompletně v režii postfix a dovecot
  • Databáze emailových účtů = MySQL databáze

Tím jsme dosáhli následujících nákladů:

  • 110 Kč / měsíc ... Virtuální server, na kterém už stejně provozujeme weby
  • 259 Kč / rok ... Certum Commercial SSL certifikát
  • 130 Kč / rok / doména ... Náklady na CZ doménu placené registrátorovi

Jakých výhod jsme tímto řešením dosáhli?

  • Libovolný počet domén, schránek, aliasů bez poplatků navíc.
  • Možnost napojit oblíbenou schránku na webu nebo program úplně podle vlastní preference zaměstnance.
  • Při používání GMailu dále:
    • Snadné spojení více firemních i soukromých schránek do jediného účtu
    • Automatické ukládání kontaktů a jejich sdílení do Android zařízení
  • Téměř bezúdržbový běh
  • Při použítí POP3 k vyzvedávání schránky - téměř nulové nároky místo při zálohování, zodpovědnost za uložené emaily lze přesunout na jinou (i placenou) službu.

V příštím díle se podíváme na běžné problémy, se kterými se setkáte po nasazení vlastního mail serveru. A že jich není málo.

Veletrh For Arch 2017

zář 23 2017

Včera jsem navštívil veletrh For Arch. Moje první kroky vedly k velkému stánku našeho milovaného klienta. Opět jsem si s nimi příjemně popovídal, pořešil několik pracovních záležitostí a občerstvil se u jejich baru :)

Potom jsem si procházel zbytek veletrhu. S WebMedeou jsem si připadal tak trochu jako terminátor s infravizí. Proč? Stačilo zadat název od libovolného stánku do mobilu a hned jsem ve WebMedea viděl, kde se firma propaguje, do jakého propagačního kanálu investuje a zhruba kolik, kde jsou její slabá místa a prostor pro zlepšení.

Zastavil jsem se u několika stánků, s majiteli si chvíli pokecal a dozvěděl se řadu zajímavých informací. Tak například automatických kotlích na štěpku nebo luxusních vířivých vanách. Odcházel jsem s dobrou náladou a pár zajímavými vizitkami.

Emaily na vlastní doméně - díl 1: externí poskytovatelé

zář 09 2017

Jako jedna z prvních věcí, které jsme řešili při zakládání Triton IT, byla schopnost odesílat a přijímat emaily na vlastních doménách. Malicherný problém, který lze většinou vyřešit v ceně domény nebo hostingu. U Tritonu se ale problém ukázal být mnohem větší. Naše definice pohodlného ovládání se také postupně vyvíjela, neboť že vám něco není pohodlné většinou zjistíte až po vyzkoušení. Po mnoha pokusech a změnách jsme zakotvili na následujících požadavcích:

  • Co nejnižší cena.
  • Libovolný počet schránek a domén bez zvýšení nákladů na provoz.
  • Možnost používat libovolného klienta podle preference zaměstnance -  tj. Gmail, Seznam, MS Outlook, Thunderbird (pro PGP šifrování), atd.
  • Vytváření aliasů (emailových adres, které jsou jen přezdívkou pro jednu nebo více dalších adres).
  • Sdílení kontaktů mezi emailovým klientem a telefonem.

Externí řešení k dispozici

Protože jsme se hned nechtěli pouštět do budování vlastního serveru, hledali jsme nejprve externí řešení. V následující tabulce je seznam toho, co jsme buď vyzkoušeli, nebo to zvažovali:

Služba Cena Výhody Nevýhody
Google for business / GSuites 4 Eur / měsíc / schránka Synchronizace kontaktů s Androidem, větší Google Drive v ceně, GMail + jeho mobilní aplikace Drahé, nejde dělat aliasy pro jiné domény, tj. domény na kterých není placená schránka.
Jiné zahraniční nabídky 2 až 5 Eur / měsíc / schránka Obecně nejde dělat aliasy pro jiné domény než ty, na kterých se platí alespoň jedna schránka.
Seznam Zdarma Jediné řešení úplně zdarma. Vynucuje používání Seznam web klienta nebo jejich mobilní aplikace. Tím pádem nelze používat s GMail apod.
Active24 59 Kč / měsíc / 5 schránek / doména + 9 Kč / měsíc / další schránka Pohodlná administrace společně s doménou a případným web hostingem. Aliasy jiných domén za příplatek.
Wedos V ceně Webhostingu, tj. 30 Kč / měsíc. Místo počtu schránek je limitem úložný prostor, pohodlná administrace společně s doménou a web hostingem. Nelze vytvářet aliasy pro jiné domény, to by vyžadovalo zakoupit k nim webhosting.

V uvedených cenách nejsou náklady na doménu, které jsou různé podle prodejce. Ceny naposled aktualizovány 2016.

Účtování za každou doménu a nízká flexibilita aliasů pro nás byly kamenem úrazu. Nezbývalo nám nic jiného než postavit alespoň částečně vlastní řešení, a na to se podíváme příště.

Jak na produktový feed, který obsahuje neplatné znaky

srp 25 2017

Odladit produktový feed u zákazníka, který ho nasazuje poprvé, dá zabrat. Když je k nasazení změn nutno zákazníka pokaždé kontaktovat, nebo dokonce předat hlášení třetí straně, může se odladění feedu tak, aby ho Google Merchant Center přijal, natáhnout až na týdny. Vy ale potřebujete feed funkční ihned a produktovou kampaň spuštěnou ideálně včera.

V Triton IT jsme řešili právě takový problém. Popisky produktů načtené z e-shopu obsahovaly znaky neplatné v kódování UTF-8. Google se proto jednoduše rozhodl, že zahodí celý zbytek feedu po výskytu takového znaku.

K vyřešení podobného problému ale úplně stačí mít po ruce vlastní hosting s podporou CGI - např. PHP. Soubor s následujícím kódem jsme nasadili na náš web, a můžeme tak feedy automaticky čistit od nežádoucích znaků:

<?php

if (!isset($_GET['f']) || $_GET['f'] == null) {
  header('Content-Type: text/plain');
  echo 'No feed provided';
  exit(1);
}

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $_GET['f']);
curl_setopt ($ch, CURLOPT_HEADER, 0);
ob_start();
curl_exec ($ch);
curl_close ($ch);
$xml = ob_get_contents();
ob_end_clean();

header('Content-Type: text/xml');
echo preg_replace('/[\x00-\x1F\x7F]/u', '', $xml);
exit(0);

Původní odkaz v Merchant Centru jsme jednoduše nahradili odkazem na náš vlastní web: www.domena.cz/?f=url_na_puvodni_feed a vše hned fungovalo.

Méně výkonné hostingy mohou mít problém s feedy o mnoha produktech, i ten náš ale zvládá zpracovat feedy do 1000 položek pod 1s. Vzhledem k frekvenci stahování jedenkrát denně to nepředstavuje žádnou zátěž.

Jak nastavit dynamický remarketing, když dodavatel nenastavil kód

srp 19 2017

Dynamický remarketing (DR) od Google vyžaduje, aby na e-shopu byl vložen kód obohacený o informace o právě prohlíženém produktu. Co ale dělat, když webmaster kód nenasadil a podle všech předpokladů v nejbližší době nenasadí? Vy ale potřebujete spustit kampaň co nejdříve. Pokud používáte Google Tag Manager (GTM), řešení existuje.

Jaká data potřebujeme

Podle nápovědy je nutno nastavit proměnnou ecomm_prodid, její obsah musí odpovídat ID produktu v Google Shopping feedu. Přestože jako povinná je uvedena pouze proměnná ecomm_prodid, Google AdWords vám bude nadávat a zobrazovat varování pokud nepřidáte i další dvě - ecomm_totalvalue a ecomm_pagetype.

Jak data získáme z webu

Data z e-shopu můžeme do GTM dostat jednoduše pomocí proměnné typu Vlastní kód JavaScript. Tento typ nám umožní spustit vlastní funkci definovanou v GTM a do proměnné uložit její návratovou hodnotu. Tímto způsobem můžeme parsovat obsah stránek.

Pro vytěžení ID produktů můžeme použít například funkci evaluate(), která nám dovolí rychle najít příslušný HTML element pomocí XPath:

function() {
  var element = document.evaluate("//div[@id='productHeader']/td[@class='value']", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
  if (element != undefined) {
    var ecomm_prodid = element.innerHTML.trim();
    return ecomm_prodid;
  } else {
    return null;
  }
}

Odladit správný XPath lze testováním na stránce v debug konzoli prohlížeče (většinou dostupné pod F12). Obdobným způsobem jako ecomm_prodid můžeme získat i ecomm_totalvalue.

Jak data dostat do AdWords

Do Google AdWords lze obsah proměnných dostat již jednoduše - buď přímo přes Google AdWords Remarketing tag nebo pomocí vlastních dimenzí proměnné typu Nastavení Google Analytics.