sms-email (tcl)

raspi 22.06.02 21:54

Lähettää kännykkään tekstiviestin jos sinulle on saapunut sähköpostia

 Tekstiversio  Arvo: 3 (5 ääntä)  Äänestä: +  -
#!/usr/bin/tclsh
# SMS-email
# versio 1.0
# Lähettää tekstiviestin kun olet saanut sähköpostia.
# Toimii ainakin windowssissa ja linuxissa. (Luultavasti myös macissa.)
# Pistä tämä vaikka jylläämään crontabiin.
# Käyttää hyväkseen kyivstarin SMS-palvelua.
# pekkajarvinen@kolumbus.fi

### POP3 ::
set pop(addr) "localhost" ;# pop3 serverin osoite
set pop(port) 110 ;# default: 110, ei tarvitse yleensä vaihtaa
set pop(user) "juusr" ;# käyttäjä
set pop(pass) "passwood" ;# salasana

### SMS ::
set sms(maa) "358" ;# 358 == suomi
set sms(pt) "40" ;# 040 == 40 (sonera)
set sms(nro) "1234567" ;# numero

# %%nro%% = montako
set sms(post1) "posti" ;# %%post%% = posti/postia
set sms(post2) "postia" ;# %%post%% = posti/postia
set sms(kpl1) "kappale" ;# %%kpl%% = kappale/kappaletta
set sms(kpl2) "kappaletta" ;# %%kpl%% = kappale/kappaletta
set sms(uusi1) "uusi" ;# %%uusi%% = uusi/uutta
set sms(uusi2) "uutta" ;# %%uusi%% = uusi/uutta

# set sms(msg) "Sinua odottaa %%nro%% %%kpl%% %%uusi%% sähkö%%post%%."
# == Sinua odottaa 5 kappaletta uusia sähköposteja.
set sms(msg) "%%nro%% %%uusi%% sähkö%%post%%."

### ÄLÄ KOSKE TÄSTÄ ETEENPÄIN JOS ET OSAA TCL:ÄÄ! ###
########################################################################################################
proc haepostit {addr port user pass} {
  set debugmode 0      ;# DEBUG
  set sendchr "SEND: " ;# DEBUG
  set recvchr "RCVD: " ;# DEBUG
  if {[catch {set sock [socket $addr $port]} msg] == 0} {
    fconfigure $sock -buffering line
    set debug [gets $sock]
    if {$debugmode} {puts "${recvchr}$debug"}
    if {$debugmode} {puts "${sendchr}USER $user"}
    puts $sock "USER $user"
    set debug [gets $sock]
    if {$debugmode} {puts "${recvchr}$debug"}
    if {$debugmode} {puts "${sendchr}PASS $pass"}
    puts $sock "PASS $pass"
    set debug [gets $sock]
    if {$debugmode} {puts "${recvchr}$debug"}
    if {[string match "+OK*" $debug]} {
      if {$debugmode} {puts "${sendchr}STAT"}
      puts $sock "STAT"
      set pop(stat) [gets $sock]
      if {$debugmode} {puts "${recvchr}$pop(stat)"}
      set pop(total) [lindex $pop(stat) 1]
      set pop(msg_size) [lindex $pop(stat) 2]
    } else {
      puts "ERROR: $debug"
    }
    if {$debugmode} {puts "${sendchr}QUIT"}
    puts $sock "QUIT"
    set debug [gets $sock]
    if {$debugmode} {puts "${recvchr}$debug"}
    close $sock
    return $pop(total)
  } else {
    puts "ERROR: $msg"
  }
}
########################################################################################################
proc httpsend {host port method page data} {
  regsub -all { } $data {+} data ;# space -> +
  regsub -all {ä} $data {a} data ;# ä -> a
  regsub -all {ö} $data {o} data ;# ö -> o
  regsub -all {Ä} $data {A} data ;# Ä -> A
  regsub -all {Ö} $data {O} data ;# Ö -> O
  if {[catch {set sock [socket $host $port]} error] == 0} {
    #puts "Connecting: $host:$port"
    set datalen [string length $data]
    fconfigure $sock -buffering line
    #puts "sending headers"
    puts $sock "$method $page HTTP/1.1"
    puts $sock "Host: $host:$port"
    puts $sock "Content-Length: $datalen"
    puts $sock "Content-Type: application/x-www-form-urlencoded"
    puts $sock "" ;# EOH
    #puts "headers sent"

    #puts "sending data ($data [$datalen])"
    puts $sock $data
    #puts "data sent"

    set out [gets $sock] ;# mitäs se serveri sitten tuumaa?
    #puts $out
  } else {
    puts "ERROR: $error"
  }
}
########################################################################################################
set sms(nom) [haepostit $pop(addr) $pop(port) $pop(user) $pop(pass)]
regsub -all {%%nro%%} $sms(msg) $sms(nom) sms(msg)
if {$sms(nom) == 1} {regsub -all {%%kpl%%} $sms(msg) $sms(kpl1) sms(msg)}
if {$sms(nom) > 1} {regsub -all {%%kpl%%} $sms(msg) $sms(kpl2) sms(msg)}
if {$sms(nom) == 1} {regsub -all {%%uusi%%} $sms(msg) $sms(uusi1) sms(msg)}
if {$sms(nom) > 1} {regsub -all {%%uusi%%} $sms(msg) $sms(uusi2) sms(msg)}
if {$sms(nom) == 1} {regsub -all {%%post%%} $sms(msg) $sms(post1) sms(msg)}
if {$sms(nom) > 1} {regsub -all {%%post%%} $sms(msg) $sms(post2) sms(msg)}

if {$sms(nom) >= 1} {
  httpsend "www.kyivstar.net" "80" "POST" "/cgi-bin/sms.pl" "to_addr=${sms(maa)}${sms(pt)}${sms(nro)}&new_body=${sms(msg)}"
}

Blizer 17:03 27.11.02 
Loistava
trolex 10:58 18.6.03 
Miten tota käytetään?? en osaa.....
empty 14:33 7.7.03 
Voisiko joku kertoo miten tota käytetää ? =)
silmäne 18:31 8.12.03 
käyttö ohjeet kiitos!
disaster 19:51 8.12.03 
voisikohan tuosta tehdä sellaisen version joka vain lähettää tietyn tekstarin
Himbe 17:48 9.1.05 
Maksaaks toi mitää?
Himbe 17:50 9.1.05 
Ois muuten kyl aika hieno jos sais lähetettyy ilmasii tekstareit...
DigiBoxi 08:37 27.3.08 
Nii joo muuten ihan kiva, mutta mihin töi mäiskästään? Tyylii... Voiko ton liittää esim. gmailiin mitä kautta?
DigiBoxi 08:48 27.3.08 
DigiBoxi kirjoitti: Nii joo muuten ihan kiva, mutta mihin töi mäiskästään? Tyylii... Voiko ton liittää esim. gmailiin mitä kautta?

Ahh tuol oliki toi: "Pistä tämä vaikka jylläämään crontabiin."... :) Mikä se on? :P