Emailem SMS

Zkušenosti a potíže s odesíláním sms z webu Odorik.cz nebo přes API.
Uživatelský avatar
Tydýt
Příspěvky: 50
Registrován: sob 01. úno 2014 20:40:06

Emailem SMS

Příspěvek od Tydýt »

Bohužel Odorik neumí poslat SMS informaci o doručení emailu, nebo přeposlat email na SMS. Důvod je prostý, a to jest že takto odeslané SMS musí někdo zaplatit a v případě spamů by to mohla být i poměrně vysoká částka. Protože mi tato funkce ale velice chyběla, tak jsem si ji naprogramoval. Podstata spočívá, že na stávajícím poštovním serveru jsem si vytvořil novo složku "SMS" v doručené poště. V rámci pravidel pro třídění příchozí pošty si do této složky kopíruji emaily o kterých chci být informován.
Následující skript se pak pravidelně připojuje pomocí IMAPu na poštovní server a kontroluje nové zprávy ve složce SMS. Pokud tam jsou nové zprávy, tak přes API odešle informaci o odesilateli a předmět zprávy. Poté email smaže ze složky SMS. (Skript je napsán v php a spuštěn na Linuxu.)

Kód: Vybrat vše

#! /usr/bin/php
<?
# Parametry pro pripojeni do konkretni schranky odkud se posilaji SMS
$imap_server = "10.124.66.66";
$imap_param  = ":993/imap/ssl/novalidate-cert";
$imap_login  = "tydyt";
$imap_heslo  = "hesllomail";
$imap_slozka = "INBOX/SMS";

# spolecna nastaveni pro API SMS
$adresa_sms     = "https://www.odorik.cz/api/v1/sms" ;
$authentication = array("user" => "777555", "password" => "hesloAPI");
$telefon_sms    = "777555333";     # Mobilní číslo, kam se SMS zasilaji

# Funkce k odeslani sms text na tel 
function sms($tel, $text, $odesilatel = "5517"){
  global $authentication, $adresa_sms ;

  $sms = array( "recipient" => $tel, "sender" => $odesilatel, "message" => $text);

  $data     = http_build_query($authentication + $sms);
  $hlavicka = array ('http' => array ('method' => 'POST',
                                      'header' => "Connection: close\r\n" .
                                                  "Content-Length: " . strlen($data) . "\r\n",
                                      'content'=> $data )
                    );
  $context  = stream_context_create($hlavicka) ;
  $odpoved  = file_get_contents($adresa_sms, false, $context );

  if (strstr($odpoved, "successfully_sent") == false) {
    $status = $odpoved;
  }
  return $status;   
}
# ------------------------------------------------------------------------------

# Pripoj se na IMAP server do nadefinovane schranky 
$spojeni = IMAP_Open("{".$imap_server.$imap_param."}$imap_slozka", "$imap_login", "$imap_heslo");
if( !$spojeni ){ 
  print Date("d.m.y H:i:s", Time())." ERROR - nepovedlo se pripojit k emailove schrance $imap_slozka \n";
}else{
  $pocet = IMAP_Num_Msg($spojeni);
  if( $pocet > 0 ){
    print Date("d.m.y H:i:s", Time())." Pocet zprav v $imap_slozka je : $pocet \n" ;
    for( $i = 1; $i <= $pocet; $i++ ){
      $hlava  = IMAP_Header($spojeni, $i,100, 500);
      $sms    = "Od: ".iconv_mime_decode($hlava->fetchfrom ,0 ,"UTF-8")."\n".iconv_mime_decode($hlava->fetchsubject ,0 ,"UTF-8");
      $status = sms($telefon_sms, $sms) ;      # Odesli vytvorenou sms
      if( $status == "" ){                     # Zkontroluj stav
        IMAP_Delete($spojeni, $i);             # Oznac ji ke smazani
        $smaz_sms = 1 ;                        # Nastav priznak ze se bude mazat
        print Date("d.m.y H:i:s", Time())." Odeslano ".$sms."\n" ;  
      }else{
        print Date("d.m.y H:i:s", Time())." ERROR - $status \n" ;
      }
    }
    if( $smaz_sms == 1 ){                      # Pokud byly nejake zpravy oznacenz ke smazani, 
      IMAP_Expunge($spojeni) ;                 # tak je smazme
    }
  }
  IMAP_Close($spojeni);                        # Uzavri IMAP spojeni
}
?>
Následně je potřeba zajistit jeho pravidelné spouštění. To docílíme například přidáním do cronu.d soubor z obsahem:

Kód: Vybrat vše

*/2 * * * *     root   /adresa/ke/skriptu/sms-report.php >> /var/log/sms-report
Tím docílíme zpouštění každé 2 munuty.

Rekapitulace požadavku:
  • Vlastnit emailový účet na serveru, který umí IMAP a je možné nastavit třídící parametry
  • Mít možnost pravidelného spuštění PHP skriptu
V případě zájmu jsem schopen udělat kompletní službu z web rozhraním, která by zajistila přeposílání informací na SMS přes účet příjemce. Ale věřím že to programátoři Oderiku zvládnou lépe než já a bude tato služba k dispozici všem přímo na jejich stránkách.

POZOR: Tento skript je velmi jednoduchý a je otestován jen o jeden poštovní server. Použití je na vlastní nebezpečí a nenesu žádnou zodpovědnost za případné škody.
_______________________________________ Obrázek
vpe
Příspěvky: 86
Registrován: ned 04. bře 2012 3:23:10

Re: Emailem SMS

Příspěvek od vpe »

Myslis standardni bezplatnou funkci operatoru vodafone o2 a nejspis i tmobile: email2sms, co nemeji virtualove?
Uživatelský avatar
Tydýt
Příspěvky: 50
Registrován: sob 01. úno 2014 20:40:06

Re: Emailem SMS

Příspěvek od Tydýt »

Není to bezplatné, není to standardní. Je to řešení, kdy potřebuji vědět o určitých zprávách okamžitě a spolehlivě. Proto je to řešeno placenou formou, kdy je doručení mnohem spolehlivější. Ale souhlasím že existují i jiná řešení email2sms.
_______________________________________ Obrázek
vpe
Příspěvky: 86
Registrován: ned 04. bře 2012 3:23:10

Re: Emailem SMS

Příspěvek od vpe »

A o je nespolehliveho na cislo@sms.cz.o2.com nebo cislo@vodafonemail.cz? V prvnim pripade jen omezeni na 60 znaku. Ale chodi to zda se spolehlive vic jak deset let :-), virtualove to neumi:-(

Uvazoval jsem nad vlastni branou se simkou, ale ladit k tomu ten kod, co by paroval IN OUT, tj. aby si to pamatovalo komunikacni pary, umel bys t napsat?
Kukin
Příspěvky: 34
Registrován: stř 01. kvě 2013 21:17:46
Bydliště: Brno / Blanensko

Re: Emailem SMS

Příspěvek od Kukin »

Zeptám se jako laik - na čem ten PHP skript běží, musím k tomu mít nějaký server? Nemám žádný vlastní web ani server.
Dá se ten čas pravidelného přihlašování zkrátit, třeba na půl minuty? Dvě minuty už je docela dlouhá doba (v mém případě - musím být na specifický mail upozorněn co nejdřív).

Neprovozuje někdo jako alternativu službu Vodafone Park? Myslím, že by to pro moje použití bylo jednodušší (do 20 mailů/SMS za rok), ale nevím, jestli to umí doručovat i do mobilní sítě Odorik. V podstatě je to poslední věc, co mě drží u O2 předplacenky. Ale už mi brzo expiruje kredit a chtěl bych přejít k Odoriku.
xtonda
Příspěvky: 773
Registrován: čtv 08. zář 2011 14:38:19

Re: Emailem SMS

Příspěvek od xtonda »

Skript může běžet na nějakém hostingu nebo virtuálním serveru.

Nicméně toto je nešťastné řešení, i ty dvě minuty jsou příliš krátký interval, některé mail servery jako ochranu před přetížením dočasně zablokují účet pokud se uživatel neustále dokola připojuje v intervalu kratším než 5 nebo 10 minut.

Lepší by bylo mít spojení na IMAP trvale otevřené a použít IMAP IDLE a jakmile po otevřeném spojení přijde notifikace, že došel mail, tak ho zpracovat, tam pak prodleva je v řádu sekund, ovšem je otázka jak to udělat v PHP.

Další možnost je mít nějaký skript nějak napojený na příchod mailu, myslím, že by se to dalo udělat v GMailu a těch jeho skriptech.

Zdá se, že tato služba https://sms.sluzba.cz/ umí spoustu věcí a jednou z nich je poslání mailu na SMS, pro bližší detail je ale potřeba být registrován. Jedna zpráva by měla stát 0,83 Kč.
mobilemanic
Příspěvky: 487
Registrován: čtv 10. říj 2013 10:20:15

Re: Emailem SMS

Příspěvek od mobilemanic »

Mobilem.cz tohle nabízí instantně taky, akorát teda SMS stojí 1,44
Kukin
Příspěvky: 34
Registrován: stř 01. kvě 2013 21:17:46
Bydliště: Brno / Blanensko

Re: Emailem SMS

Příspěvek od Kukin »

xtonda: Díky za vysvětlení, ale programovat skripty neumím. Vyzkoušel jsem registraci na https://sms.sluzba.cz/ a je tam do začátku 20 Kč na vyzkoušení. Funguje to přesně, jak potřebuju.
Minimální dobíjená částka je 200 Kč a platnost kreditu je 1 rok od posledního dobití. Takže už budu moct vesele přejít k Odoriku (O2 se mi chystá svévolně změnit tarif) a poslední rok na VŠ to doklepu s sms.sluzba - mám to jako upozornění na volné termíny k přihlašování na zkoušky, jiné mailové upozornění nepotřebuji.
Jinak tato služba má docela dost možností (posílání z webu, posílání přes API, ...), takže by snad mohly jít odesílat SMS z Odoričí SIM pomocí datového připojení (snad to nespotřebuje moc dat), jako alternativa ke klasickým SMS nebo jako vypotřebování kreditu před vypršením platnosti.
Díky za tip!
Kukin
Příspěvky: 34
Registrován: stř 01. kvě 2013 21:17:46
Bydliště: Brno / Blanensko

Re: Emailem SMS

Příspěvek od Kukin »

Tak https://sms.sluzba.cz/ funguje sice správně a levně, ale sms dojde se zpožděním cca 2 minuty, oproti sms od O2.
Nezkoušel někdo jinou, obdobnou službu pro zasílání upozornění na mail, jak je to s rychlostí?
Nerad bych se někde zaregistroval a zaplatil kredit, abych pak zjistil, že je to příliš pomalé.
dali
Příspěvky: 26
Registrován: stř 14. kvě 2014 0:33:54

Re: Emailem SMS

Příspěvek od dali »

Driv jsme ve firme pouzivali mobilem.cz (presli jsme na Pushover). Muzes to zkusit jak je to rychle. Ja uz si to nepamatuji.
Odpovědět