Inviare mail da applicazione, chiarimento!

di il
5 risposte

Inviare mail da applicazione, chiarimento!


package magazzino;


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

	public class ProvaMail
	{
	    public static void invia ()
	    {
	        String smtpHost = "smtp.gmail.com";
	        String indirizzoDa = "mioindirizzo@mio.it";
	        String indirizzoA = "destinatario@";

	        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);
	        }
	    }
	
}
salve devo inviare una mail da un applicazione desktop, non ho un dominio, quindi uso gmail che fornisce pop e smtp gratuiti...ho trovato questo codice in giro ,ma non mi funziona, allora io faccio cosi:
a String smtpHost metto = "smtp.gmail.com";
e qua? props.put ("mail.smtp.host", smtpHost);

5 Risposte

  • Re: Inviare mail da applicazione, chiarimento!

    eleinad852 ha scritto:


    uso gmail che fornisce pop e smtp gratuiti...ho trovato questo codice in giro ,ma non mi funziona
    Non basta, il server SMTP di gmail richiede autenticazione con TLS o SSL.

    Vedi questo: http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/
    Dovrebbe essere corretto (non ho tempo di provarlo ora).
  • Re: Inviare mail da applicazione, chiarimento!

    Non funziona mi va sempre in eccezione
    Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. l10sm1175031wif.20 - gsmtp

    at SendMailTLS.invia(SendMailTLS.java:48)
    at menu$3.actionPerformed(menu.java:84)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$400(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Caused by: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. l10sm1175031wif.20 - gsmtp

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1333)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:906)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:535)
    at javax.mail.Transport.send0(Transport.java:151)
    at javax.mail.Transport.send(Transport.java:80)
    at SendMailTLS.invia(SendMailTLS.java:43)
    ... 37 more
  • Re: Inviare mail da applicazione, chiarimento!

    eleinad852 ha scritto:


    non funziona mi va sempre in eccezione
    Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. l10sm1175031wif.20 - gsmtp
    I due sorgenti di mkyong li ho provati poco fa, mettendo ovviamente i dati del mio account gmail. Nessuno dei due (né in TLS né in SSL) mi ha funzionato subito.
    Poi ho letto meglio quella pagina, in particolare nei commenti:
    Go to Gmail security setting (https://www.google.com/settin... , under "Password", disable to 2-step verification. Under "Account permission", enable "Access for less secure apps" .
    that should do it...
    Io in effetti ho già al momento la "2-step verification" disabilitata ma anche la "Access for less secure apps" ce l'avevo disabilitata. Quest'ultima l'ho abilitata e i due sorgenti ora funzionano perfettamente.

    Quindi: accedi al tuo account google, vai nella sezione "Sicurezza", verifica di avere la "2-step verification" (in italiano è "Verifica in due passaggi") disattivata e poi attiva (se non lo è già) invece il "Accesso per app meno sicure".

    Mi spiace ma effettivamente l'uso dell'account google è decisamente più macchinoso di altri. Ci credi se ti dico che ci ho messo 2 giorni per riuscire a configurare il mio account google per l'instant messaging (gtalk) in Miranda NG?
  • Re: Inviare mail da applicazione, chiarimento!

    Ciao a tutti, riapro questa discussione perché mi trovo nella stessa situazione: ho provato entrambi i codici di questo sito http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/ ho messo i miei dati e ho provato ad avviare. Quello che ho provato a fare è stato mettere una mail da cui inviare e una mail al quale mandare il messaggio semplicemente cambiando i campi del codice. Il codice SendMailTLS non da errori nella compilazione ma durante l'esecuzione da degli errori.
    
    Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: Could not convert socket to TLS;
      nested exception is:
    	javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    	at sendmailtls.SendMailTLS.main(SendMailTLS.java:48)
    Caused by: javax.mail.MessagingException: Could not convert socket to TLS;
      nested exception is:
    	javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    	at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1918)
    	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:652)
    	at javax.mail.Service.connect(Service.java:317)
    	at javax.mail.Service.connect(Service.java:176)
    	at javax.mail.Service.connect(Service.java:125)
    	at javax.mail.Transport.send0(Transport.java:194)
    	at javax.mail.Transport.send(Transport.java:124)
    	at sendmailtls.SendMailTLS.main(SendMailTLS.java:43)
    Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    	at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    	at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
    	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
    	at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
    	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1439)
    	at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:209)
    	at sun.security.ssl.Handshaker.processLoop(Handshaker.java:878)
    	at sun.security.ssl.Handshaker.process_record(Handshaker.java:814)
    	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
    	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
    	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
    	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
    	at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:548)
    	at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:485)
    	at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1913)
    	... 7 more
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
    	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
    	at sun.security.validator.Validator.validate(Validator.java:260)
    	at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
    	at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
    	at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
    	at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1421)
    	... 17 more
    Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
    	at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
    	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
    	... 23 more
    Java Result: 1
    
    Il secondo codice (SendMailSSL) sia nella compilazione che nell'esecuzione non da errori però non invia nulla, infatti una volta avviato rimane in esecuzione all'infinito (ho provato a lasciarlo anche per 25 minuti ma niente). L'eccezione non si verifica ma neanche il messaggio che dovrebbe darmi la conferma del messaggio inviato.
    Ho provato a cambiare le impostazioni del mio account gmail come scritto da andbin ed entrambe le impostazioni (Verifica in due passaggi e Accesso per app meno sicure) era disattivate. Così ho attivato solamente l'Accesso per app meno sicure (come scritto nel sito), ho provato a rieseguire i 2 programmi ma hanno entrambi gli stessi problemi di prima.
    Scusate se riapro questa discussione ma sono davvero interessato a far funzionare questo programma è un bel po' che ci provo ho provato anche altri codici sorgenti, ma questo sembra il più semplice da capire e sembrerebbe il più funzionante dato che gli altri mi davano più problemi.
  • Re: Inviare mail da applicazione, chiarimento!

    Aggiorno per chi fosse interessato visto che dopo un po' di giorni ho trovato la soluzione. L'unico problema che non riguardava la programmazione (codice sbagliato, porta sbagliato, istruzione scritta male) era che Avast il mio antivirus bloccava l'email e quindi il primo(TLS) andava in eccezione mentre l'altro rimaneva in esecuzione. Ho disabilitato temporaneamente avast ed entrambi hanno funzionato.
Devi accedere o registrarti per scrivere nel forum
5 risposte