Stránka 1 z 2

Emailem SMS

Napsal: stř 19. úno 2014 21:23:32
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.

Re: Emailem SMS

Napsal: sob 23. srp 2014 23:30:32
od vpe
Myslis standardni bezplatnou funkci operatoru vodafone o2 a nejspis i tmobile: email2sms, co nemeji virtualove?

Re: Emailem SMS

Napsal: ned 24. srp 2014 15:34:23
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.

Re: Emailem SMS

Napsal: ned 24. srp 2014 17:04:53
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?

Re: Emailem SMS

Napsal: pon 04. kvě 2015 1:15:36
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.

Re: Emailem SMS

Napsal: pon 04. kvě 2015 12:00:05
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č.

Re: Emailem SMS

Napsal: pon 04. kvě 2015 21:36:53
od mobilemanic
Mobilem.cz tohle nabízí instantně taky, akorát teda SMS stojí 1,44

Re: Emailem SMS

Napsal: pon 04. kvě 2015 22:12:04
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!

Re: Emailem SMS

Napsal: ned 17. kvě 2015 0:24:19
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é.

Re: Emailem SMS

Napsal: ned 17. kvě 2015 0:28:53
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.