giovedì 20 ottobre 2011

Java invio Mail con autenticazione

Di seguito un esempio di invio mail utilizzando Java e Gmail come account di posta.
Il codice utilizza le librerie di Java Mail, in particolare nel classpath sono presenti i seguenti jar:
  • dsn.jar;
  • imap.jar;
  • mailapi.jar;
  • pop3.jar;
  • smtp.jar.
 Per gestire l'autenticazione si estende la classe astratta javax.mail.Authenticator e si effettua l'override del metodo getPasswordAuthentication.
Da notare che il codice seguente non funziona se si ha la connessione ad internet intermediata da un proxy server.
Di seguito il codice


package it.test;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import java.util.Properties;
public class SimpleMail {

 private static final String SMTP_HOST_NAME = "smtp.gmail.com";
 private static final String SMTP_AUTH_USER = "xxxxxxxxxxxxx";
 private static final String SMTP_AUTH_PWD  = "yyyyyyyyyyyyy";
 private static final String PORT="587";

    public static void main(String[] args) throws Exception{
       new SimpleMail().test();
    }
    private Properties loadGmailProperties(){
      Properties props = new Properties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.host", SMTP_HOST_NAME);
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", PORT);
        props.put("mail.smtp.starttls.enable", "true");
        return props;
    }
    public void test() throws Exception

{
       
  Authenticator auth = new SMTPAuthenticator();
  Session mailSession=Session.getDefaultInstance(loadGmailProperties(),auth);
  // con questo parametro settato a true sono inseriti
  // nello standar output i log dell'invio mail
  mailSession.setDebug(true);
  Transport transport = mailSession.getTransport();
  MimeMessage message = new MimeMessage(mailSession);
  message.setContent("Prova invio mail \n Non rispondere prego", "text/plain");
  message.setSubject("Invio di prova");
  message.setFrom(new InternetAddress("noreply@test.it"));
message.addRecipient(Message.RecipientType.TO,newInternetAddress("mailReceiver@test.it"));
  transport.connect();
  System.out.println("Invio....");
  transport.sendMessage(message,
  message.getRecipients(Message.RecipientType.TO));
  transport.close();
  System.out.println("Inviato....");
    }

    private class SMTPAuthenticator extends javax.mail.Authenticator {
        public PasswordAuthentication getPasswordAuthentication() {
           String username = SMTP_AUTH_USER;
           String password = SMTP_AUTH_PWD;
           return new PasswordAuthentication(username, password);
        }
    }
}


Nessun commento:

Posta un commento