Newsgroup: it.comp.java
Titolo: form per spedire email in Java

Salve a tutti!
Sto realizzando un sito per l'esame di Reti di Calcolatori e mi
piacerebbe inserire delle cose ad effetto tra cui per esempio la
possibilita' di spedire una e-mail con un form scritto in Java. Ho gia'
trovato del codice che ho adattato alle mie esigenze e il risultato e'
quello che vi posto di seguito. Ho tuttavia un problema fondamentale che
non riesco a risolvere: se provo a caricare l'applet all'interno di un
browser (uso Netscape 4.01) non viene spedita alcuna mail mentre
all'interno dell'AppletViewer fornito con il JDK funziona. Resta per me
un mistero: qualcuno mi puo' aiutare? Non sono un programmatore Java
quindi non ho molta esperienza. 
Risolto questo che e' il problema principale, mi potete dire gentilmente
quali funzioni devo invocare per cambiare il colore dello sfondo
dell'applet e dei caratteri? Grazie in anticipo.
ATTENZIONE: Gentilmente rispondete in e-mail privata, non leggo il NG.
->> Segue il codice Java. <--
// Dichiarazione degli import
import java.awt.*;
import java.applet.*;
import java.io.*;
import java.net.*;
public class form extends Applet {
Label label1; 
Label label2; 
Label label3; 
Label label4;
TextField Nome; 
TextField Cognome;
TextField Indirizzo;
TextArea Testo;
Button spedisci; 
Button azzera; 
String EMail; 
public void init() { 
    // inizializza la classe
    super.init();            
 
    // Indirizzo di posta elettronica a cui inviare il messaggio
    EMail = "
lipp...@teseo.it
";
    setLayout(null); 
    resize(500,350);
 
    label1 = new Label("Nome:");
    add(label1);
	label1.reshape(15,20,70,15);
	Nome = new TextField(27); 
	add(Nome); 
    Nome.reshape(100,20,226,21); 
 
    label2 = new Label("Cognome:"); 
    add(label2); 
	label2.reshape(15,50,70,15);
	Cognome = new TextField(27); 
    add(Cognome); 
    Cognome.reshape(100,50,226,21); 
 
	label3 = new Label("e-mail:");
	add(label3);
    label3.reshape(15,80,70,15);
	Indirizzo = new TextField(27);
	add(Indirizzo);
	Indirizzo.reshape(100,80,226,21);
 
	label4 = new Label("Testo del messaggio:");
	add(label4);
	label4.reshape(15,130,120,15);
	Testo = new TextArea(90,6);
	add(Testo);
	Testo.reshape(15,150,470,120);
 
    spedisci = new Button("Spedisci"); 
    add(spedisci); 
    spedisci.reshape(50,290,88,27);
    azzera = new Button("Azzera");    
    add(azzera); 
    azzera.reshape(361,290,88,27);
} 
 // HandleEvent, ossia la funzione che viene 
 // richiamata per interpretare tutti i messaggi 
 // che vengono passati e chiamare le funzioni 
 // ad essi associate. 
 public boolean handleEvent(Event event) { 
      if (
event.id
 == Event.ACTION_EVENT && event.target == spedisci) {
           // Se il messaggio č: "Premuto 
           // il pulsante Spedisci", allora 
           // provvedi alla  spedizione
           try { 
                clickedSpedisci(); 
           } 
           catch(Exception e) { 
                System.out.println("Eccezione"+e); 
           }
           return true;
      } 
      else 
           if (
event.id
 == Event.ACTION_EVENT && event.target == azzera)
{
                // Se il messaggio č: "Premuto il pulsante
                // Azzera", allora provvedi alla  cancellazione 
                clickedAzzera(); 
                return true; 
           } 
      return super.handleEvent(event); 
 } 
 // Questa procedura azzera i campi dell'Applet
public void clickedAzzera() { 
      Cognome.setText(""); 
      Nome.setText("");
	  Indirizzo.setText("");
	  Testo.setText("");
 } 
 // Pezzo forte dell'Applet, questa procedura provvede 
 // alla spedizione via E-Mail dei dati. 
public void clickedSpedisci() throws IOException {
      // Apre un socket di comunicazione con un Host 
      //(consiglio di usare il vostro provider) 
      //alla porta 25 (quella dedicata alla posta).
      Socket mailSocket = new Socket("
teseo.it
", 25);
      // Associa ad esso uno stream per poter 
      // usare la funzione println 
      PrintStream os = new PrintStream(mailSocket.getOutputStream()); 
      int l,k,i; 
      String User,Host;
      // Decodifica l'indirizzo E-Mail 
      // dividendolo in User e Host 
      User="";
      Host=""; 
      for (l=i=0; i<EMail.length(); i++) 
           if(EMail.charAt(i) != '@') 
                if(l==0) User+=EMail.charAt(i); 
           else Host+=EMail.charAt(i);
      else l=1;
      // Comunica con il socket precedentemente 
      // aperto inviando  i comandi SMTP
      // Apre la comunicazione postale 
      os.println("HELO "+Host); 
      // Specifica che la mail proviene dal    
      // Per evitare errori č consigliato inserire un 
      // indirizzo valido. 
      //os.println("MAIL FROM: "+Indirizzo.getText());
	  os.println("MAIL FROM: "+Indirizzo.getText()); 
 
      // La mail viene ricevuta da User+"@"+Host
      os.println("RCPT TO: "+User+"@"+Host); 
      // Incominciano i dati
	  os.println("DATA"); 
      os.println("SUBJECT: Campi della Form"); 
      // Scrive tutti i campi dell'Applet 
	  os.println(Testo.getText());
 
      // Fondamentale il '.' per indicare la fine
      // della mail (vedi standard SMTP) 
      os.println("."); 
      // Chiude la comunicazione 
      os.println("QUIT"); 
      os.close(); mailSocket.close();
 } 
 }
--> Fine codice Java. <--
Provatelo all'interno di un browser, io visualizzo l'applet con il
seguente codice HTML:
<HTML> 
 <HEAD> 
 <TITLE>Form in Java</TITLE> 
 </HEAD>
 
 <BODY> 
 <APPLET CODE="form.class" WIDTH=500 HEIGHT=350></APPLET>
 </BODY>
</HTML> 
Saluti e grazie ancora.
-- 
Fabrizio Lippolis
Studente in Informatica			"My other computer is a Cray-2".
Universita' degli Studi di Bari, Italia
e-mail: 
lipp...@teseo.it

       Socket mailSocket = new Socket("
teseo.it
", 25);
Questa e' la riga incriminata. Con l'Explorer 3.0 era possibile fare una
cosa del genere,
ma ora il Netscape non permette di connetersi ad un host diverso da
quello dal quale e' stata
scaricata l'applet.
 
}>
Anch'io ho postato un messaggio per lo stesso problema, ma sto ancora
aspettando risposta.
Comunque se non ti intendi di Java fatti aiutare da qualcuno all'altezza
(senza offesa), senza 
che ti esaurisci nel debug di applet. 
-- 
*******************************************
Stefano Cristiano
autodeclarated Java programmer
ovverosia --> Pagghiu
E-mail: 
spag...@tin.it
 ITALY
Wonderful JAVA
"Java is multi-platform, but not multi-browser..."
*******************************************