smtp client (tcl)

raspi 31.03.02 12:47

Lähettää postia SMTP palvelimelle

 Tekstiversio  Arvo: 1 (1 ääntä)  Äänestä: +  -
#!/usr/bin/tclsh
# MINI SMTP Client
# Toimii ainakin windowssissa ja linuxissa
# pekkajarvinen@kolumbus.fi
# http://bittivuoto.org/~raspi/
# Versio 0.12
# Lisätty kommentteja
# Lisätty mahdollisuus lähettää tiedosto.
# Lisätty virheentunnistus lähetykseen.
# Todo: virheentunnistus tiedostoon (riittääkö oikat jne)

set paivaklo "[clock format [clock seconds] -format "%d.%m.%Y %T"]" ;# pp.kk.vvvv hh:mm:ss
set paiva "[clock format [clock seconds] -format "%d.%m.%Y"]" ;# pp.kk.vvvv
set eilinenpv "[clock format [expr [clock seconds] - 86400] -format "%d.%m.%Y"]" ;# pp.kk.vvvv

set smtp(from) "adminseta@localhost" ;# kuka viestin on lähettänyt
set smtp(rcpt) "kayttaja@localhost" ;# kenelle viesti lähetetään
set smtp(smtp) "localhost" ;# smtp-palvelimen osoite
set smtp(port) 25 ;# vakio: 25
set smtp(subj) "\[${paivaklo}\] Automaattinen viesti" ;# subjekti
set smtp(type) 1 ;# tyyppi 0=smtp(body) 1=smtp(tied)
set smtp(body) "Maailma ei ole vielä tuhoutunut" ;# viestin sisältö
set smtp(tied) "/logit/${eilinenpv}.log" ;# tiedosto

### ÄLÄ MUOKKAA TÄSTÄ ETEENPÄIN JOS ET OSAA TCL:ÄÄ ###

if {$smtp(type) == 1} {
  set phile [open $smtp(tied) r]
    while {![eof $phile]} { 
      set rivi [gets $phile] ;# luetaan yksi rivi
      if {$rivi != ""} {
        # lisätään rivi muuttujaan $data (joka sisältää koko tiedoston sisällön)
        append data "$rivi\n"
      }
    }
  close $phile ;# suljetaan tiedosto
  set smtp(body) $data
}

if {[catch {set sock [socket $smtp(smtp) $smtp(port)]} msg] == 0} {
  fconfigure $sock -buffering line ;# lähetetään rivi kerrallaan
  gets $sock 
  puts $sock "MAIL FROM:<$smtp(from)>" ;# keneltä
  gets $sock
  puts $sock "RCPT TO:<$smtp(rcpt)>" ;# kenelle
  gets $sock
  puts $sock "DATA" ;# viesti alkaa
  gets $sock
  puts $sock "From:<$smtp(from)>" ;# keneltä
  puts $sock "To:<$smtp(rcpt)>" ;# kenelle
  puts $sock "Subject: $smtp(subj)" ;# subjekti
  puts $sock "" ;# headeri loppuu
  puts $sock "$smtp(body)" ;# sisältö
  puts $sock "." ;# viesti loppuu
  gets $sock
  puts $sock "QUIT" ;# poistutaan
  gets $sock
  close $sock ;# suljetaan yhteys
} else {
  puts "ERROR: $msg" ;# jotain häikkää..
}