12 stycznia 2009, 13:39:19
Bramka email2sms
Ostatnio zamówiłem kartę sim z sieci WPmobi ściągnęła mnie do niej ciekawość i 100MB darmowego transferu do wp.pl ;) Jednak sms'y poza sieć są dość drogie więc dlaczego by nie używać e-maili do komunikacji skoro są one w zasadzie za friko?
E-mail w telefonie nie jest niestety zbyt popularnym środkiem komunikacji jeśli chodzi o telefony komórkowe, na nich nadal królują sms'y. Więc jak wysłać e-mail żeby doszedł jako sms? Plus udostępnia darmową bramkę sms, wystarczy wysłać wiadomość na 48XXXYYYZZZ@text.plusgsm.pl, niewielu moich znajomych ma numer z tej sieci więc to nie rozwiązuje problemu w całości.
Nie wiem czy Era lub Orange oferują podobną usługę, gdyż mimo moich poszukiwań nie znalazłem informacji o czymś podobnym. Zacząłem więc szukać serwisów, które podobną funkcjonalność oferują, ku mojemu zdziwieniu znalazłem! Jednak ceny i brak kilku darmowych sms'ów skutecznie mnie odstraszyły.
Zainteresowałem się więc bramką smsfree.pl, oferuje ona 5 darmowych sms'ów dziennie doklejając do nich tylko "/smsfree.pl" na końcu. Dodatkowo można wykupić kredyty w stosunkowo niskiej cenie.
Mój pomysł wygląda następująco:
- wysyłamy e-mail na jakąś własną skrzynkę (o strukturze: tytuł: nr tel, treść: treść sms'a
- program odbiera e-mail
- program wysyła curlem zapytanie do bramki
Oczywiście to rozwiązanie ma swoje wady:
- potrzebny jest własny serwer (ew. konto shell)
- połączenie z internetem może czasem nawalić
- trochę długo trwa wysłanie sms'a
- reklama na końcu sms'a
Poniżej przedstawiam kod, który jakoś udało mi się wyklepać jestem pewien, że można to by napisać: lepiej, czytelniej, szybciej itp. (a na dodatek kod wchodzi trochę pod szablon ;p) ale mi w zupełności wystarcza bo jakoś działa. Jeśli komuś się pomysł spodoba (bo kod raczej nie ;) ) to bardzo dobrze, a jeśli nie to nic nie szkodzi bo robiłem to głównie dla siebie.
#!/usr/bin/python import poplib,os #login i haslo bramki Blogin = '' Bpass = '' #email, haslo i adres serwera pop3 Mmail = '' Mpass = '' Mserver = '' ########################################## def send_sms(number,text,id): curl = 'curl -s -d "numer_global='+Blogin + '&password_global='+Bpass curl = curl + '" http://www.smsfree.pl/index.php -c ciastek.txt > /dev/null' os.system(curl) curl = 'curl -s -b ciastek.txt -d "what=sms&kody=48&numer='+number +'&tariff=' curl = curl + id+'&podpis=48'+Blogin+'&submit=Przeslij sms\'a&text=' + text curl = curl + '" http://www.smsfree.pl/index.php > /dev/null' os.system(curl) def check(): m = poplib.POP3(Mserver) m.user(Mmail) m.pass_(Mpass) num = len(m.list()[1]) file= open('licznik','r') #licznik w trzymany w pliku na wypadek wyłączenia serwera etc.. if (int(file.read())==int(num)): # print 'pusto w tej skrzynce..' file.close() return 0 else: # print 'jest mail - wysylam sms' file.close() return 1 def send(): m = poplib.POP3(Mserver) m.user(Mmail) m.pass_(Mpass) num = len(m.list()[1]) numer = m.retr(num)[1][17][9:] # wycinanie numeru z tematu body = m.retr(num)[1][28] body = body[:len(body)-1] #wycinanie ostatniego znaku send_sms(numer,body,'1') # (z niewiadomych mi przyczyn dodaje się tam znak '=') # print 'sms poszedl..' file = open('licznik','w') file.write(str(num)) file.close() while(1): #pętla główna try: if(check()): send() except: pass os.system('sleep 15')
Prawdopodobnie jeśli ten skrypt będzie używany inaczej niż w konfiguracji: poczta wp -> poczta gery.pl to nie będzie działał prawidłowo. Trzeba metodą prób i błędów sprawdzić co jest zwracane w jakiej komórce: m.retr(num)[1][].
W kodzie nie mogłem użyć biblioteki pycurl ponieważ nie jest ona zainstalowana na serwerze na którym mam konto. Oczywiście nic nie szkodzi na przeszkodzie żeby z niej skorzystać.