JavaMail - Urgente!

Ola a todos, tenho uma aplicacao que deve notificar o usuario atraves de emails e para isso estou usando o javax.mail, porém já li alguns tutorias e a coisa nao vai para frente (li inclusive o artigo aqui do fórum). Bom, eu me cadastrei no gmail e posteriormente configurei o outlook para gerenciar os emails da minha conta no gmail. Com a configuracao esta tudo bem, pois tenho acesso aos servicos do gmail, porem, quando executo o metodo abaixo tenho uma excecao:

import java.net.Authenticator;
import java.util.Date;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


/**
 *
 * @author Proprietário
 */
public class EmailJob {

   public void notificar(){
        System.out.println("iniciando");
	Properties p = new Properties();   
	//p.put("mail.smtp.host", "GMAIL");
        p.put("mail.smtp.host", "smtp.gmail.com");
	p.put("mail.smtp.port", "995");
        p.put("mail.transport.protocol", "smtp");
	p.put("mail.smtp.starttls.enable","true");
	p.put("mail.smtp.auth", "true");
	
        //java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
	SMTPAuthenticator auth = new SMTPAuthenticator();
	Session session = Session.getDefaultInstance(p, auth);
	System.out.println("sessao");
	
        MimeMessage msg = new MimeMessage(session);  
	System.out.println("mime");
	
        try {   
            msg.setFrom(new InternetAddress("vinicius.empresa@gmail.com"));   
	    msg.setRecipient(Message.RecipientType.TO, new InternetAddress("vinicius.empresa@gmail.com"));   
	  
	    msg.setSentDate(new Date());   
		  
	    msg.setSubject("Testando java mail");   
		  
	    msg.setText("Apenas um testando novamente!!!");   
	    System.out.println("vai enviar");
	    
	    Transport.send(msg);   
	    System.out.println("Enviou a mensagem!");
	}   
	catch (AddressException e) {   
            Logger.getLogger(EmailJob.class.getName()).log(Level.SEVERE, null, e);
	}   
	catch (MessagingException e) {   
            Logger.getLogger(EmailJob.class.getName()).log(Level.SEVERE, null, e);
	} 
		
    }
    
    public static void main(String [] asdf) {
        try {
            new EmailJob().execute(null);
        } catch (JobExecutionException ex) {
            Logger.getLogger(EmailJob.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

class SMTPAuthenticator extends javax.mail.Authenticator {
	 
	public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication("vinicius.empresa@gmail.com", "xxx");
	}
}

e a excecao que tenho eh o seguinte:


javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 995, response: -1
        at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1201)
        at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:311)
        at javax.mail.Service.connect(Service.java:255)
        at javax.mail.Service.connect(Service.java:134)
        at javax.mail.Service.connect(Service.java:86)
        at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:144)
        at javax.mail.Transport.send0(Transport.java:150)
        at javax.mail.Transport.send(Transport.java:80)

Agradeco muito!

amigo eu uso também para para enviar email eu peguei a classe aqui no forum e fiz algumas moidificações no caso foi pra pega os dados da conta como senha e a conta


package util;

import gui.GUIConfContaEmail;

import java.net.Proxy;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; 
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication; 
import javax.swing.JOptionPane;

import dao.DAOContaEmail;

public class SendMail {
	
	private String mailSMTPServer;
	private String mailSMTPServerPort;
	
	/*
	 * quando instanciar um Objeto ja sera atribuido o servidor SMTP do GMAIL 
	 * e a porta usada por ele
	 */
	public SendMail() { //Para o GMAIL 
		Conexao con = new Conexao();
		DAOContaEmail daoContaEmail = new DAOContaEmail(con.getConnection());
		
		
		mailSMTPServer = daoContaEmail.getContas().get(3).toString();
		mailSMTPServerPort = daoContaEmail.getContas().get(4).toString();
		
		System.out.println(mailSMTPServer);
		System.out.println(mailSMTPServerPort);
		/*
		mailSMTPServer = "smtp.gmail.com";
		mailSMTPServerPort = "465";
		*/
	}
	/*
	 * caso queira mudar o servidor e a porta, so enviar para o contrutor
	 * os valor como string
	 */
	SendMail(String mailSMTPServer, String mailSMTPServerPort) { //Para outro Servidor
		this.mailSMTPServer = mailSMTPServer;
		this.mailSMTPServerPort = mailSMTPServerPort;
	}
	
	public void sendMail(String from, String to, String subject, String message) {
		
		Conexao con = new Conexao();
		DAOContaEmail daoContaEmail = new DAOContaEmail(con.getConnection());
		
		Properties props = new Properties();

                // quem estiver utilizando um SERVIDOR PROXY descomente essa parte e atribua as propriedades do SERVIDOR PROXY utilizado
                /*
                props.setProperty("proxySet","true");
                props.setProperty("socksProxyHost","192.168.155.1"); // IP do Servidor Proxy
                props.setProperty("socksProxyPort","1080");  // Porta do servidor Proxy
                props.setProperty("proxyUserName", "teste");
                props.setProperty("proxyPassword", "senha");
                */
		
		
		if(daoContaEmail.getContas().get(5).toString().equals(1)){
			 
			String endProxy = daoContaEmail.getContas().get(6).toString();
			String usuProxy = daoContaEmail.getContas().get(7).toString();
			String senhaProxy = daoContaEmail.getContas().get(8).toString();
			String portaProxy = daoContaEmail.getContas().get(9).toString();
			
			props.setProperty("proxySet","true");
            props.setProperty("socksProxyHost", endProxy); // IP do Servidor Proxy
            props.setProperty("socksProxyPort", portaProxy);  // Porta do servidor Proxy
            props.setProperty("proxyUserName", usuProxy);
            props.setProperty("proxyPassword", senhaProxy);
		}
		

		props.put("mail.transport.protocol", "smtp"); //define protocolo de envio como SMTP
		props.put("mail.smtp.starttls.enable","true"); 
		props.put("mail.smtp.host", mailSMTPServer); //server SMTP do GMAIL
		props.put("mail.smtp.auth", "true"); //ativa autenticacao
		props.put("mail.smtp.user", from); //usuario ou seja, a conta que esta enviando o email (tem que ser do GMAIL)
		props.put("mail.debug", "true");
		props.put("mail.smtp.port", mailSMTPServerPort); //porta
		props.put("mail.smtp.socketFactory.port", mailSMTPServerPort); //mesma porta para o socket
		//props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");   // usa pra servidor com ssl
		props.put("mail.smtp.socketFactory.fallback", "false");
		
		//Cria um autenticador que sera usado a seguir
		
		SimpleAuth auth = null;
		
		//auth = new SimpleAuth ("seuusuarioparalogin","suasenhaparalogin");
		
		auth = new SimpleAuth (daoContaEmail.getContas().get(1).toString(),
				daoContaEmail.getContas().get(2).toString());		
		
		
		//Session - objeto que ira realizar a conexão com o servidor
		/*Como há necessidade de autenticação é criada uma autenticacao que
		 * é responsavel por solicitar e retornar o usuário e senha para 
		 * autenticação */
		Session session = Session.getDefaultInstance(props, auth);
		session.setDebug(true); //Habilita o LOG das ações executadas durante o envio do email

		//Objeto que contém a mensagem
		Message msg = new MimeMessage(session);

		try {
			//Setando o destinatário
			msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
			//Setando a origem do email
			msg.setFrom(new InternetAddress(from));
			//Setando o assunto
			msg.setSubject(subject);
			//Setando o conteúdo/corpo do email
			msg.setContent(message,"text/plain");

		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "Não foi possível enviar o email",
					"ERRO",JOptionPane.ERROR_MESSAGE);
			System.out.println(">> Erro: Completar Mensagem");
			e.printStackTrace();
		}
		
		//Objeto encarregado de enviar os dados para o email
		Transport tr;
		try {
			tr = session.getTransport("smtp"); //define smtp para transporte
			/*
			 *  1 - define o servidor smtp
			 *  2 - seu nome de usuario do gmail
			 *  3 - sua senha do gmail
			 */
			String usuario = daoContaEmail.getContas().get(1).toString();
			String senha = daoContaEmail.getContas().get(2).toString();
			
			System.out.println(usuario +"\n"+ senha);
			
			tr.connect(mailSMTPServer, usuario, senha);
			
			msg.saveChanges(); // don't forget this
			//envio da mensagem
			tr.sendMessage(msg, msg.getAllRecipients());
			tr.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			JOptionPane.showMessageDialog(null, "Não foi possível enviar o email",
					"ERRO",JOptionPane.ERROR_MESSAGE);
			System.out.println(">> Erro: Envio Mensagem");
			e.printStackTrace();
		}

	}
}

//clase que retorna uma autenticacao para ser enviada e verificada pelo servidor smtp
class SimpleAuth extends Authenticator {
	public String username = null;
	public String password = null;


	public SimpleAuth(String user, String pwd) {
		username = user;
		password = pwd;
	}

	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication (username,password);
	}
} 

espero que t ajude