Programma per inviare email con libreria JavaMail

di il
3 risposte

Programma per inviare email con libreria JavaMail

Ciao a tutti

sto cercando di fare un programmino in java che controlla un file, e se si verifica una determinata condizione invia un email.

Ho visto vari esempi su come utilizzare la libreria javamail ma in runtime ottengo il seguente errore : 

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Session
at InvioEmail.<init>(InvioEmail.java:14)

di seguito il codice che utilizzo:

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.*;

public class InvioEmail {

	public  InvioEmail(String host,String mittente,String destinatario,String oggetto,String testo ) {
		Properties proprieta = new Properties();
		proprieta.put("mail.smtp.host", host);
		
		
		Session sessione=Session.getInstance(proprieta);
		
		MimeMessage mail=new MimeMessage(sessione);
		
		try {
			mail.setFrom(new InternetAddress(mittente));
			mail.addRecipients(Message.RecipientType.TO,destinatario);
			mail.setSubject(oggetto);
			mail.setText(testo);
			
			Transport.send(mail);
			
			System.out.println("invio email correttamente");
			} catch (MessagingException e) {
			
			e.printStackTrace();
		}

Il codice si blocca alla riga 14 che corrisponde al comando  Session sessione=Session.getInstance(proprieta);

Sono agli inizi con la programmazione java quindi mi scuso se ho fatto errori banali.

Potete aiutarmi?

Grazie ciao

3 Risposte

  • Re: Programma per inviare email con libreria JavaMail

    La libreria JavaMail non fa parte del core standard di Java. Va importata appositamente.

    Se usi MAVEN per la gestione del progetto, devi aggiungere la relativa dependency:

    <dependency>
       <groupId>javax.mail</groupId>
       <artifactId>mail</artifactId>
       <version>1.4.7</version>
    </dependency>
    

    Se usi altro, (tipo ANT) devi includere la libreria tra le libraries e far sì che venga esportata durante la generazione del file JAR (generalmente viene esportata all'interno di una cartella “lib” che va portata assieme al JAR)

    Ma questo credo tu l'abbia giò fatto perchè dici che l'applicazione si avvia (quindi compila).

    Come stai eseguendo? Quali passaggi fai esattamente?

    L'eccezione che ottieni significa che non hai in classpath la libreria JavaMail. Questo dipende da come esegui, da cosa hai (un JAR? I file class sparsi?) e da come è configurato l'ambiente di esecuzione.

  • Re: Programma per inviare email con libreria JavaMail

    Ciao e grazie per la risposta,

    ho fatto varie prove ed alla fine sono riuscito a farla funzionare, ho messo nel build path del programma il percorso nella class path che prima non c'era ed ora funziona, però ho dei dubbi su come poter andare avanti.

    Il lavoro del programmino è quello che deve controllare la dimensione di un file e se è superiore ad una certa dimensione avvisarmi tramite email, il programma non deve essere messo solo su un pc ma su diversi che hanno tutti un loro provider e credenziali diverse di posta. Facendo un test qui sul mio pc mi da un errore di invio email  : 

    com.sun.mail.smtp.SMTPSendFailedException: 530 authentication required for mail submission.

    Immagino che il problema sia perchè mancano utente e pw di autentificazione solo che i parametri li carico sul programma tramite un file properties dove vado a leggere il provider e le varie configurazioni che deve avere e scrivere in chiaro un nome utente e pw li sarebbe troppo pericoloso a livello di sicurezza, ed a livello di riga di comando non potrei usarlo per pc diversi.

    Esiste un modo per non utilizzare l'autentificazione?

    All'epoca avevo fatto un programmino in vb6 che faceva una cosa del genere ma inviava l'email tramite il programma di posta installato sul pc (outlook ,thunderbird ecc..) apriva il programma creava l'email e la inviava utilizzando quindi le impostazioni sul client di posta senza cosi dover scrivere nessuna credenziale.

    Come potrei ovviare a questo problema ?

    Grazie

  • Re: Programma per inviare email con libreria JavaMail

    Ovviamente non puoi spedire senza autenticarti sul server SMTP (in realtà non è proprio del tutto vero, ma tu non sei un MTA quindi non lo puoi fare).

    Non ci sono alternative: da qualche parte e in qualche modo le credenziali te le devi memorizzare; a te la scelta sul dove/come/con che livello di sicurezza memorizzarle (e a quale livello di sbattimento ti vuoi sobbarcare quando sarà ora di cambiare la password… perchè, generalmente, la password scade e va rinnovata con una certa frequenza).

Devi accedere o registrarti per scrivere nel forum
3 risposte