Emailem SMS

Zkušenosti a potíže s odesíláním sms z webu Odorik.cz nebo přes API.

Emailem SMS

Příspěvekod Tydýt » stř 19. úno 2014 22:23:32

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
Uživatelský avatar
Tydýt
 
Příspěvky: 49
Registrován: sob 01. úno 2014 21:40:06

Re: Emailem SMS

Příspěvekod vpe » sob 23. srp 2014 23:30:32

Myslis standardni bezplatnou funkci operatoru vodafone o2 a nejspis i tmobile: email2sms, co nemeji virtualove?
vpe
 
Příspěvky: 85
Registrován: ned 04. bře 2012 4:23:10

Re: Emailem SMS

Příspěvekod Tydýt » ned 24. srp 2014 15:34:23

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
Uživatelský avatar
Tydýt
 
Příspěvky: 49
Registrován: sob 01. úno 2014 21:40:06

Re: Emailem SMS

Příspěvekod vpe » ned 24. srp 2014 17:04:53

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?
vpe
 
Příspěvky: 85
Registrován: ned 04. bře 2012 4:23:10

Re: Emailem SMS

Příspěvekod Kukin » pon 04. kvě 2015 1:15:36

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.
Kukin
 
Příspěvky: 34
Registrován: stř 01. kvě 2013 21:17:46
Bydliště: Brno / Blanensko

Re: Emailem SMS

Příspěvekod xtonda » pon 04. kvě 2015 12:00:05

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č.
xtonda
 
Příspěvky: 734
Registrován: čtv 08. zář 2011 14:38:19

Re: Emailem SMS

Příspěvekod mobilemanic » pon 04. kvě 2015 21:36:53

Mobilem.cz tohle nabízí instantně taky, akorát teda SMS stojí 1,44
mobilemanic
 
Příspěvky: 475
Registrován: čtv 10. říj 2013 10:20:15

Re: Emailem SMS

Příspěvekod Kukin » pon 04. kvě 2015 22:12:04

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ěvekod Kukin » ned 17. kvě 2015 0:24:19

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é.
Kukin
 
Příspěvky: 34
Registrován: stř 01. kvě 2013 21:17:46
Bydliště: Brno / Blanensko

Re: Emailem SMS

Příspěvekod dali » ned 17. kvě 2015 0:28:53

Driv jsme ve firme pouzivali mobilem.cz (presli jsme na Pushover). Muzes to zkusit jak je to rychle. Ja uz si to nepamatuji.
dali
 
Příspěvky: 25
Registrován: stř 14. kvě 2014 0:33:54

Další

Zpět na Odorik - odesílání SMS

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník