atom socket , file
sequence data=" "  
integer i=0,error_flag

procedure resetonerror()
  data="RSET\r\n" -- error reset 'envelope'
  puts(socket,data) --RSET
  data=gets(socket)
  puts(1,data)
  data="quit\r\n"
  puts(socket,data) --QUIT
  data=gets(socket)
  puts(1,data)  
  close(socket)
  close(file)
  puts(1,"Error in response , close connection .\n")
  abort(1)
end procedure

procedure response()
  data=gets(socket)
  puts(1,data) 
  if data[1]>'3' then resetonerror() end if
  while data[4]='-' do
    data=gets(socket)
    puts(1,data)  
    if data[1]>'3' then resetonerror() end if
  end while 
end procedure

--main program
  file   = open("mailbody","r")
  if file=-1 then puts(1,"Error in openmailbody\n") abort(1) end if    
  --get IP number of mail server
  data=gets(file)
  puts(1,data)
  i=match(":25",data)
  while i=0 or data[1]='-' do
    data=gets(file)
    i=match(":25",data)
  end while
  data=data[1..i+3]
  socket = open(data,"c")
  if socket=-1 then puts(1,"Error in open server\n") abort(1) end if
  response() -- welkom

  --skip until HELO or EHLO
  data = gets(file)
  while upper(data[1])!='H' and upper(data[1])!='E' do
     data=gets(file)
     if not sequence(data) then exit end if
  end while
  -- hello or ehlo
  if not sequence(data)
  then -- strang no Hello Or Ehlo found
       puts(1,"\n No Hello or Ehlo found !\n")
       resetonerror()
       abort(1)
  else puts(socket,data)
       response()
  end if

  data = gets(file) -- mail from
  while upper(data[1])='M' do -- eerste of volgende eMail
    puts(socket,data)
    response()
  
    data = gets(file) -- rcpt to
    puts(socket,data)
    response()
  
    data = gets(file) -- more rcpt or data
    while upper(data[1])='R' do
      puts(socket,data)
      response()
      data = gets(file) -- next rcpt or data
    end while
 
    puts(socket,data) -- DATA
    response()

    data=gets(file)     
    while data[1]!='.' do
        puts(socket,data)
        data=gets(file)
    end while
    puts(socket,data) -- dot(CRLF)
    response()

    -- are there more eMails on the file ?
    data=gets(file)
    -- detect EOF or nonsens then stop .
    if not sequence(data) or length(data)<10 then data="quit\r\n" end if
  end while
 
--  QUIT
  puts(socket,data)
  data=gets(socket)
  puts(1,data) -- QUIT     
  close(socket)
  close(file)
  puts(1,"close connection\n")
  abort(0) -- no error