PDA

View Full Version : [JAVA] inviare E-Mail


franksisca
04-08-2009, 15:20
ho provato a fare quanto in oggetto (per ora solo mail), ma trovo qualche difficoltà :P

dopo aver scaricato javamail-1_4.zip e jaf-1_1-fr.zip e aver aggiunto i jar alle libreria di sistema ho creato queste due clasis:

package tester;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SettaggioMail {
public static void inviaMail(String dest, String mitt, String oggetto,
String testoEmail) throws MessagingException {

Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
Session session = Session.getDefaultInstance(props);

MimeMessage message = new MimeMessage(session);
message.setSubject(oggetto);
message.setText(testoEmail);

InternetAddress fromAddress = new InternetAddress(mitt);
InternetAddress toAddress = new InternetAddress(dest);
message.setFrom(fromAddress);
message.setRecipient(Message.RecipientType.TO, toAddress);

Transport.send(message);
}
}



equesta che è di avvio:

package tester;

import javax.mail.MessagingException;


public class MailMain {

public static void main(String arg[]) {
String mitt = "[email protected]";
String dest = "[email protected]";
String oggetto = "Testing JavaMail";
String testo = "Testing JavaMailTesto";
try {
SettaggioMail.inviaMail(dest, mitt, oggetto, testo);
System.out.println("Invio messaggio OK!");
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("Invio messaggio FALLITO!");
}

}
}




però quando lo avvio mi dà questo errore:


com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. d13sm7595797fka.32
Invio messaggio FALLITO!

at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1668)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1207)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:735)
at javax.mail.Transport.send0(Transport.java:191)
at javax.mail.Transport.send(Transport.java:120)
at tester.MailUtility.sendMail(MailUtility.java:32)
at tester.MailMain.main(MailMain.java:14)




e sincerametne non riesco a capire quale sia il problema....

poi, visto che ci siamo, avete una qualche guida per l'invio di sms?

yorkeiser
04-08-2009, 15:53
Premettendo che non ho mai usato questa libreria, ma Transport dove l'hai istanziato ? Da una googlata veloce, ho trovato una cosa del genere, che nel tuo codice mi pare mancare

Transport transport = mailSession.getTransport();

franksisca
04-08-2009, 16:25
la guida che ho trovato io non lo istanziava...ora provo

franksisca
04-08-2009, 16:31
allora, 2 cose:

1) nel modo precedente è comunque fattibile.

fatto in questo modo mi dà il seguente errore

Invio messaggio FALLITO!
javax.mail.NoSuchProviderException: Invalid protocol: null
at javax.mail.Session.getProvider(Session.java:436)
at javax.mail.Session.getTransport(Session.java:655)
at javax.mail.Session.getTransport(Session.java:636)
at javax.mail.Session.getTransport(Session.java:622)
at tester.SettaggioMail.inviaMail(SettaggioMail.java:32)
at tester.MailMain.main(MailMain.java:14)

franksisca
04-08-2009, 17:06
risolto:


package tester;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SettaggioMail {
public static void inviaMail(String dest, String mitt, String oggetto,
String testoEmail) throws MessagingException {
// Creazione di una mail session
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "smtp.gmail.com");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.quitwait", "false");

Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("username",
"password");
}
});

// Creazione del messaggio da inviare
MimeMessage message = new MimeMessage(session);
message.setSubject(oggetto);
message.setText(testoEmail);

// Aggiunta degli indirizzi del mittente e del destinatario
InternetAddress fromAddress = new InternetAddress(mitt);
InternetAddress toAddress = new InternetAddress(dest);
message.setFrom(fromAddress);
message.setRecipient(Message.RecipientType.TO, toAddress);

// Invio del messaggio
Transport.send(message);
}
}



ora cerco per gli sms

franksisca
02-09-2009, 15:28
ragazzi, ho quasi finito la mia applicazione, volevo aggiungere la possibilità di inserire multyaccount, solo che non sò dove cercare i dati di accesso dei vari hosting
this.props.setProperty("mail.transport.protocol", "smtp");
this.props.setProperty("mail.host", "smtp.gmail.com");
this.props.put("mail.smtp.auth", "true");
this.props.put("mail.smtp.port", "465");
this.props.put("mail.smtp.socketFactory.port", "465");
this.props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
this.props.put("mail.smtp.socketFactory.fallback", "false");
this.props.setProperty("mail.smtp.quitwait", "false");


questi sono i dati per gmail, mi servirebbero per gli altri host....tipo hotmail, libero, virgilio....solo che (sarà una deficenza senile intrinseca in me) non riesto a trovarli

franksisca
02-09-2009, 22:38
javax.mail.MessagingException: Could not connect to SMTP host: mail.libero.it, port: 25, response: 554
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1533)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:453)
at javax.mail.Service.connect(Service.java:313)
at javax.mail.Service.connect(Service.java:172)
at javax.mail.Service.connect(Service.java:121)
at javax.mail.Transport.send0(Transport.java:190)
at javax.mail.Transport.send(Transport.java:120)
at view.MailConfiguration.inviaMail(MailConfiguration.java:84)
at tester.MailSplash.run(MailSplash.java:66)




chi mi helpa?

dottorkame
24-09-2009, 11:55
Ciao,
io ho scritto un programma per mandare mail in java che manda le mail solo all interno del dominio della mia mail in quanto probabilmente non ho implementato l' autenticazione del server. Gli ho abilitato però la funzione per allegare i files. Nel tuo programma come implementeresti questa funzione?

Per il multy account hai provato ad usare magari un array?

franksisca
25-09-2009, 11:23
Ciao,
io ho scritto un programma per mandare mail in java che manda le mail solo all interno del dominio della mia mail in quanto probabilmente non ho implementato l' autenticazione del server. Gli ho abilitato però la funzione per allegare i files. Nel tuo programma come implementeresti questa funzione?

Per il multy account hai provato ad usare magari un array?

per gli allegati ho risolto in modo molto più semplice di quanto mi aspettassi:

MimeMessage messaggioFinale = new MimeMessage(session);
messaggioFinale.setSubject(oggetto);


MimeBodyPart parteTesto = new MimeBodyPart();
parteTesto.setText(testoEmail);


MimeBodyPart parteFileClienti = new MimeBodyPart();
FileDataSource fileClienti = new FileDataSource("data/cliente.ktm");
parteFileClienti.setDataHandler(new DataHandler(fileClienti));
parteFileClienti.setFileName(fileClienti.getName());


MimeBodyPart parteFileFatture = new MimeBodyPart();
FileDataSource fileFatture = new FileDataSource("data/fatture.ktm");
parteFileFatture.setDataHandler(new DataHandler(fileFatture));
parteFileFatture.setFileName(fileFatture.getName());


Multipart corpoMessaggioTotale = new MimeMultipart();
corpoMessaggioTotale.addBodyPart(parteTesto);
corpoMessaggioTotale.addBodyPart(parteFileClienti);
corpoMessaggioTotale.addBodyPart(parteFileFatture);


messaggioFinale.setContent(corpoMessaggioTotale);


InternetAddress fromAddress = new InternetAddress(mitt);
InternetAddress toAddress = new InternetAddress(dest);
messaggioFinale.setFrom(fromAddress);
messaggioFinale.setRecipient(Message.RecipientType.TO, toAddress);


Transport.send(messaggioFinale);


per il multyaccount...non ho capito cosa intendi X_X

il mio problema (ancora non risolto) è qeusto.

se come account uso gmail va tutto bene, se inizio a cambiare sballa tutto.

Suppongo che sia per il fatto che con Gmail uso queste proprierties

this.props.put("mail.smtp.host", "smtp.gmail.com");
this.props.put("mail.smtp.auth", "true");
this.props.put("mail.smtp.port", "465");
this.props.put("mail.smtp.socketFactory.port", "465");
this.props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
this.props.put("mail.smtp.socketFactory.fallback", "false");
this.props.setProperty("mail.smtp.quitwait", "false");


mentre con gli altri non sò cosa usare...ho provato settando solo smtp.host, ma credo che non mi faccia l'autenticazione....boh!!!