ho finalmente messo a punto il POP3 in java, ma manca un piccolo particolare.
Il metodo mediante la classe StringTokenizer deve suddividere il messaggio nelle parti corrispondenti ai campi indicati nell’oggetto della classe Messaggio (sottoclasse annidata nella classe Msg) (Sender, Subject e Date) quindi deve invocare il metodo adNewMsg della classe Msg (un'altra classe del client Email) passandogli come parametri le variabili dei vari campi.
codice:
import java.net.*;
import java.io.*;
import java.util.*;
public class RiceviMsg
{
int port;
String host;
private static BufferedReader in;
private static DataOutputStream out;
public static void main(java.lang.String[] args) throws Exception
{
String username = args[0]; // users name
String password = args[1]; // password
String popServer = args[2]; // POP servers name.
boolean delete = false;
boolean secure = false;
String inputLine; // string to store the line of text we read in.
String numeroMessaggi; // numero messaggi
try
{
if (args.length > 3)
if (args[3].compareTo("-s") == 0)
secure = true;
else if (args[3].compareTo("-d") == 0)
delete = true;
else
System.out.println("Errore: La sintassi è %java PopClient <username> <password> [-s] [-d]");
if (args.length > 4)
if (args[4].compareTo("-s") == 0)
secure = true;
else if (args[4].compareTo("-d") == 0)
delete = true;
else
System.out.println("Errore: La sintassi è %java PopClient <username> <password> [-s] [-d]");
// connessione al server
Socket s = new Socket("nome_host", 110); // host e porta
out = new DataOutputStream( s.getOutputStream() );
in = new BufferedReader( new InputStreamReader(s.getInputStream()) );
String line;
inputLine = readFromInputStream(); // autenticazione
if (!readFromInputStream().startsWith("+OK"))
{
System.out.println("User name errato, disconnessione in corso");
s.close();
System.exit(1);
}
// invio pass
System.out.println("PASS " + password);
System.out.println("c: PASS ********");
// aspetta la risposta
inputLine = readFromInputStream();
if (!inputLine.startsWith("+OK"))
{
System.out.println("Password errata, disconnesisone in corso");
s.close();
System.exit(1);
}
else
{
String timeStamp = inputLine.substring(4,inputLine.length());
System.out.println(timeStamp);
}
DataOutputStream("STAT");
inputLine = readFromInputStream();
if (!inputLine.startsWith("+OK"))
{
System.out.println("Errore:" + inputLine);
s.close();
System.exit(1);
}
int i = inputLine.lastIndexOf(' ');
numeroMessaggi = inputLine.substring(4,i);
System.out.println("Hai " + numeroMessaggi + " messaggio/i nella tua mailbox!");
// scarica i messaggi
// per ogni messaggio invochiamo il comando RETR with as parameter the number
// (index) of the message
int n = Integer.parseInt(numeroMessaggi);
int numberBytes;
for (int msg = 1;msg<=n;msg++)
{
System.out.println("Retreaving message " + msg);
DataOutputStream("RETR " + msg);
inputLine = readFromInputStream();
if (!inputLine.startsWith("+OK"))
{
System.out.println("Error: " + inputLine);
s.close();
System.exit(1);
}
i = inputLine.lastIndexOf(' ');
numberBytes = Integer.parseInt(inputLine.substring(4,i));
inputLine = in.readLine();
while (inputLine.compareTo(".") != 0)
{
if (inputLine.compareTo("..") == 0)
System.out.println(".");
else
System.out.println(inputLine);
inputLine = in.readLine();
}
if (delete)
{
DataOutputStream("DELE " + msg);
readFromInputStream();
}
}//for
// fine della connessione e della classe RiceviMsg
DataOutputStream("QUIT");
readFromInputStream();
s.close();
System.exit(1);
}
catch (IOException e) { System.err.println("IOException : " + e);}
}
// metodo DataOutputStream
private static void DataOutputStream(String s) throws IOException
{
System.out.println("c: " + s);
System.out.println(s);
return;
}
// metodo readFromInputStream
private static String readFromInputStream() throws IOException
{
String s = in.readLine();
if (s != null)
System.out.println("s: " + s);
return s;
}
}
ho capito che devo importare la classe stringtockenizer, ma non ho capito come fare tutto il resto. Qualcuno può aiutarmi?
Grazie