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ć.