PDA

View Full Version : [Java] come inviare email da un programma Java


enzo85
30-05-2006, 11:41
Volevo sapere se c'è un metodo per inviare email da un programma java, passando come parametro l'email del destinatario.
se qualcuno conosce il codice può gentilmente postarlo? grazie mille a tutti

andbin
30-05-2006, 11:50
Volevo sapere se c'è un metodo per inviare email da un programma java, passando come parametro l'email del destinatario.
se qualcuno conosce il codice può gentilmente postarlo? grazie mille a tuttiPuoi usare JavaMail. Attenzione, perché non fa parte del J2SE, devi scaricarlo a parte. Comunque trovi tutto qui: http://java.sun.com/products/javamail/.

Un semplice esempio di invio di una email è questo:
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

public class ProvaMail
{
public static void main (String[] args)
{
String smtpHost = "out.virgilio.it";
String indirizzoDa = "[email protected]";
String indirizzoA = "[email protected]";

try
{
Properties props = System.getProperties ();

props.put ("mail.smtp.host", smtpHost);

Session session = Session.getDefaultInstance (props, null);

MimeMessage message = new MimeMessage (session);

message.setFrom (new InternetAddress (indirizzoDa));
message.addRecipient (Message.RecipientType.TO, new InternetAddress (indirizzoA));

message.setSubject ("Prova mail");
message.setText ("Ciao, prova di invio mail.");

Transport.send (message);
}
catch (Exception e)
{
System.out.println (e);
}
}
}Credo che sia abbastanza chiaro. Devi ovviamente personalizzare l'host SMTP, gli indirizzi di email e ovviamente oggetto/messaggio. ;)

enzo85
30-05-2006, 12:22
grazie per l'aiuto!!! però...scusa l'ignoranza...mi puoi dire passo passo come si fa a importare la javamail e javabeans? ho provato a seguire le istruzioni ma nn sono riuscito a cavare un ragno dal buco...

andbin
30-05-2006, 12:46
grazie per l'aiuto!!! però...scusa l'ignoranza...mi puoi dire passo passo come si fa a importare la javamail e javabeans? ho provato a seguire le istruzioni ma nn sono riuscito a cavare un ragno dal buco...Guarda ... dovrebbe essere molto semplice. Io l'avevo messo sul mio PC di casa un po' di tempo fa ... spero di ricordarmi bene. ;)

Devi innanzitutto scaricare i pacchetti zip del JavaMail e del JAF (JavaBeans Activation Framework). Ho visto adesso che i pacchetti attuali sono: javamail-1_4.zip e jaf-1_1-fr.zip.

Dentro questi pacchetti zip c'è tutto, compresa la documentazione. Quindi puoi spacchettare gli zip in 2 cartelle apposite.
A questo punto è semplice: devi aggiungere alla variabile di ambiente CLASSPATH i riferimenti a 2 file .jar che si trovano nei due zip. Nel pacchetto di JavaMail c'è un mail.jar mentre in quello del JAF c'è un activation.jar.

enzo85
31-05-2006, 08:40
Guarda ... dovrebbe essere molto semplice. Io l'avevo messo sul mio PC di casa un po' di tempo fa ... spero di ricordarmi bene. ;)

Devi innanzitutto scaricare i pacchetti zip del JavaMail e del JAF (JavaBeans Activation Framework). Ho visto adesso che i pacchetti attuali sono: javamail-1_4.zip e jaf-1_1-fr.zip.

Dentro questi pacchetti zip c'è tutto, compresa la documentazione. Quindi puoi spacchettare gli zip in 2 cartelle apposite.
A questo punto è semplice: devi aggiungere alla variabile di ambiente CLASSPATH i riferimenti a 2 file .jar che si trovano nei due zip. Nel pacchetto di JavaMail c'è un mail.jar mentre in quello del JAF c'è un activation.jar.
Eh, il problma era proprio quello delle classpath...
Non so come si faccia ad aggiungere quelle due classpath...scusa l'ignoranza, ma stò facendo i primi passi in java...

andbin
31-05-2006, 09:43
Eh, il problma era proprio quello delle classpath...
Non so come si faccia ad aggiungere quelle due classpath...scusa l'ignoranza, ma stò facendo i primi passi in java...Io in genere imposto il CLASSPATH a livello di sistema. Se hai Win2000/XP, vai nella gestione delle variabili d'ambiente (Proprietà di Risorse del computer / Avanzate / Variabili d'ambiente) e crei (o modifichi, se c'è già) la variabile CLASSPATH con, nel tuo caso, una cosa del tipo: .;C:\Programmi\javamail\mail.jar;C:\Programmi\jaf\activation.jar.

enzo85
31-05-2006, 19:04
Io in genere imposto il CLASSPATH a livello di sistema. Se hai Win2000/XP, vai nella gestione delle variabili d'ambiente (Proprietà di Risorse del computer / Avanzate / Variabili d'ambiente) e crei (o modifichi, se c'è già) la variabile CLASSPATH con, nel tuo caso, una cosa del tipo: .;C:\Programmi\javamail\mail.jar;C:\Programmi\jaf\activation.jar.
Ho provato a creare i classpath, ma mi da sempre errore...

andbin
02-06-2006, 22:51
su questo sito (http://www.mokabyte.it/1996/10/mail.htm) spiega come mandare una mail costruendo in java persino i form html....come parametro vuole la mail come hai chiesto tu...dacci una occhiata... ;)Già ... ma non usa JavaMail ... usa direttamente i socket per gestire "a mano" il protocollo verso il server SMTP. Cosa sconsigliata a meno di avere una ottima conoscenza del protocollo SMTP. Infatti non basta aprire il socket e inviare giù un po' di dati ... bisognerebbe anche ricevere le risposte dal server, verificare gli errori, ecc...

enzo85
16-06-2006, 17:09
Non riuscendo a selezionare i path (quindi non mi trovava le import) ho provato con l'altro codice che mi avete proposto al link.L'ho modificato in questo modo:

public static void clickedSpedisci(String EMail, String password) throws IOException {
try {
Socket mailSocket = new Socket("digicolor.net", 25);
PrintStream os = new PrintStream(mailSocket.getOutputStream());

int l,k,i;
String User,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;

os.println("HELLO "+Host);
os.println("MAIL FROM: [email protected]");
os.println("RCPT TO: "+User+"@"+Host);
os.println("SUBJECT: Password smarrita");
os.println("Gentile "+User+"\n");
os.println("la sua password è: "+password);

// Fondamentale il '.' per indicare la fine della mail (vedi standard SMTP)
os.println(".");
os.println("QUIT");
os.close();
mailSocket.close();
} catch (IOException e) {
System.err.println("IMPOSSIBILE comunicare con il provider per inviare la mail: controllare le configurazioni della connessione");
}
}
}

Cosa sbaglio?? Non capisco...dall'università c'era il proxy e quindi entrava nell'eccezione, ma da casa ho solo un router e mi dice che la mail la invia, ma nella mia casella non mi arriva niente!! Perchè????

enzo85
18-06-2006, 12:03
Non riuscendo a selezionare i path (quindi non mi trovava le import) ho provato con l'altro codice che mi avete proposto al link.L'ho modificato in questo modo:

public static void clickedSpedisci(String EMail, String password) throws IOException {
try {
Socket mailSocket = new Socket("digicolor.net", 25);
PrintStream os = new PrintStream(mailSocket.getOutputStream());

int l,k,i;
String User,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;

os.println("HELLO "+Host);
os.println("MAIL FROM: [email protected]");
os.println("RCPT TO: "+User+"@"+Host);
os.println("SUBJECT: Password smarrita");
os.println("Gentile "+User+"\n");
os.println("la sua password è: "+password);

// Fondamentale il '.' per indicare la fine della mail (vedi standard SMTP)
os.println(".");
os.println("QUIT");
os.close();
mailSocket.close();
} catch (IOException e) {
System.err.println("IMPOSSIBILE comunicare con il provider per inviare la mail: controllare le configurazioni della connessione");
}
}
}

Cosa sbaglio?? Non capisco...dall'università c'era il proxy e quindi entrava nell'eccezione, ma da casa ho solo un router e mi dice che la mail la invia, ma nella mia casella non mi arriva niente!! Perchè????

Nessuno sa aiutarmi?

enzo85
20-06-2006, 19:10
Vi prego ragazzi...qualcuno che mi risponda...devo consegnare il progetto dell'università entro giovedì, ma non so ancora cosa non funziona per l'invio della mail!!!

enzo85
21-06-2006, 21:30
Dai...qualcuno che mi risponda!!! Vi prego...

enzo85
22-06-2006, 16:13
Vi prego...domani pomeriggio ho l'ultimatum per consegnarlo!!!
Vi prego...ditemi cosa ho sbagliato!!!