Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    50

    javax.mail.AuthenticationFailedException

    Salve a tutti!
    Stò cercando di inviare da un programma java una mail. l'idea sarebbe di inviarne una con allegato, ma intanto comincio dalle cose semplici.

    ecco il codice:

    codice:
    String host = "smtp.gmail.com";
            int port = 587;
            String username = "user_name";
            String password = "psw";
    
            Properties props = new Properties();
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.starttls.enable", "true");
    
            Session session = Session.getInstance(props);
    
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("mail_mittente@gmail.com"));
            message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse("mail_destinatario@virgilio.it"));
            message.setSubject("Prova d'invio");
            message.setText("Ciaoooooooooooo!!!");
    
            Transport transport = session.getTransport("smtp");
            transport.connect(host, port, username, password);
      
            transport.send(message,message.getAllRecipients());      <---- qui mi lancia eccezione
    
            System.out.println("Inviata");
    Quando arriva nel punto segnato mi lancia eccezione del tipo:


    codice:
    Exception caught after invoking slot
    javax.mail.AuthenticationFailedException
            at javax.mail.Service.connect(Service.java:306)
            at javax.mail.Service.connect(Service.java:156)
            at javax.mail.Service.connect(Service.java:105)
            at javax.mail.Transport.send0(Transport.java:168)
            at javax.mail.Transport.send(Transport.java:120)
            at Interfaccia.Fattura.mail(Fattura.java:230)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at com.trolltech.qt.internal.QSignalEmitterInternal$AbstractSignalInternal.emit_helper(QSignalEmitterInternal.java:368)
            at com.trolltech.qt.QSignalEmitter$Signal1.emit(QSignalEmitter.java:209)
            at com.trolltech.qt.gui.QApplication.exec(Native Method)
            at Interfaccia.Home.main(Home.java:45)
    sono sicura al 100% che username e password sono corrette.
    Qualcuno sa aiutarmi?

    Grazie!!! =)

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non è quello il modo di effettuare l'autenticazione.
    Devi fornire un UserAuthenticator:

    codice:
    public class TuaClasse {
    
       private class UserAuthenticator extends Authenticator {
    
          private String user;
          private String pass;
    
          public UserAuthenticator(String user, String pass) {
             this.user = user;
             this.pass = pass;
          }
    
          @Override
          protected PasswordAuthentication getPasswordAuthentication() {
             return new PasswordAuthentication(user, pass);
          }
       }
    
       ...
    
       public void inviaMail() {
    String host = "smtp.gmail.com";
            int port = 587;
            String username = "user_name";
            String password = "psw";
    
            Properties props = new Properties();
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.starttls.enable", "true");
    
    
            UserAuthenticator userAuthenticator = new UserAuthenticator(username, password);
            Session session = Session.getDefaultInstance(props, userAuthenticator);
    
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("mail_mittente@gmail.com"));
            message.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse("mail_destinatario@virgilio.it"));
            message.setSubject("Prova d'invio");
            message.setText("Ciaoooooooooooo!!!");
    
    
            Transport.send(message);
    
            System.out.println("Inviata");   }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ad occhio direi subito che la porta è sbgliata: dovrebbe essere la 465 se non hanno cambiato le cose.
    Questo codice funziona:

    codice:
    import javax.mail.*;
    import javax.mail.internet.*;
    
    import java.util.Properties;
    
    
    public class SendMail {
    
        private static final String SMTP_HOST_NAME = "smtp.gmail.com";
        private static final int SMTP_HOST_PORT = 465;
        private static final String SMTP_AUTH_USER = "tuo_indirizzo@gmail.com";
        private static final String SMTP_AUTH_PWD  = "tua_password";
    
        public static void main(String[] args) throws Exception{
           new SendMail().test();
        }
    
        public void test() throws Exception{
            Properties props = new Properties();
    
            props.put("mail.transport.protocol", "smtps");
            props.put("mail.smtps.host", SMTP_HOST_NAME);
            props.put("mail.smtps.auth", "true");
            // props.put("mail.smtps.quitwait", "false");
    
            Session mailSession = Session.getDefaultInstance(props);
            mailSession.setDebug(true);
            Transport transport = mailSession.getTransport();
    
            MimeMessage message = new MimeMessage(mailSession);
            message.setSubject("Testing SMTP-SSL");
            message.setContent("This is a test", "text/plain");
    
            message.addRecipient(Message.RecipientType.TO,
                 new InternetAddress("tuo_destinatario@whatever.com"));
    
            transport.connect
              (SMTP_HOST_NAME, SMTP_HOST_PORT, SMTP_AUTH_USER, SMTP_AUTH_PWD);
    
            transport.sendMessage(message,
                message.getRecipients(Message.RecipientType.TO));
            transport.close();
        }
    
    
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non ho mai usato quel sistema per ottere il Transport, ma se lo dice Andrea1979 allora ok.

    La porta non l'ho nemmeno guardata: non posseggo un account GMail.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    nemmeno io l'avevo mai usato, ma non ho sotto mano il progetto con l'authenticator e tutto il resto fatti per benino

    poi c'è ancora la tua pillola in giro e anche lì dovrebbero esserci degli spunti utili!
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    50
    Grazie mille a entrambi!!

    Ho capito dov'era il problema e adesso va tutto alla grande!! =)

    Grazie ancora!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.