Dúvida com aplicacao de email

Oi pessoal, estou desenvolvendo um sistema de envio de emails automaticos alertando com 60, 30, 15 e 7 dias de antecedência sobre a data de expiracao de convenios. Então eu fiz um Timer que deve verificar as datas de expiracao dos convênios uma vez por dia e comparar com a data atual para saber se é para enviar email naquele dia. Isso está OK. Porém quando eu vou buscar na lista de emails o endereco correspondente a um contrato especifico estou tendo dificuldades.
Ele está buscando todos os enderecos da lista e mandando os emails para todo mundo. O que estou fazendo de errado? Segue o código abaixo:


package br.ufpa.ctic.sicc.email.logica;

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

import br.ufpa.ctic.sicc.email.dao.DataExpiracaoDao;
import br.ufpa.ctic.sicc.email.dao.EnderecoEmailDAO;
import br.ufpa.ctic.sicc.email.modelo.DataExpiracao;
import br.ufpa.ctic.sicc.email.modelo.EnderecoEmail;

public class SiccEmailTimerConv {
	
	private final Timer timer = new Timer();
	private final int minuto = 60000;
	private final int dia = minuto * 60 * 24;
	
	public void start() {
		
		// Timer que inicia a partir da data atual e itera a cada dia
		timer.schedule(new TimerTask() {
			
			public void run() {
				
				try {
					
					// Pesquisa as datas e verifica se eh para mandar os emails
					pesquisaDatas();
					
				} catch (SQLException e) {
					e.printStackTrace();
				}
				
			}
			
			public void pesquisaDatas() throws SQLException {
				
				// Seta o calendario para a data atual
				Date dataAtual = new Date();
				Calendar calendar = Calendar.getInstance();
				calendar.setTime(dataAtual);
				
				DataExpiracaoDao dao = new DataExpiracaoDao();
				
				//Lista com a data de expiracao de todos os convenios
				List<DataExpiracao> listaDatas = new ArrayList<DataExpiracao>();
				listaDatas = dao.getDataExpConvenios();
				for (DataExpiracao dataExpiracao : listaDatas) {
					dataExpiracao = dao.getDataExpConvenio(dataExpiracao.getIdAjuste()); //
					System.out.println("### ID CONVÊNIO: " + dataExpiracao.getIdAjuste() + " ###");
					
					SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
					Date dataExp = dataExpiracao.getData();
					
					// *** Calculo dos dias ***
					Date testa60Dias = addDias(dataExp, -60);
					Date testa30Dias = addDias(dataExp, -30);
					Date testa15Dias = addDias(dataExp, -15);
					Date testa7Dias = addDias(dataExp, -7); 
					
					// *** Transfoma as datas para String para poder comparar ***
					String dataAtualForm = dateFormat.format(dataAtual);
					String testa60DiasForm = dateFormat.format(testa60Dias);
					String testa30DiasForm = dateFormat.format(testa30Dias);
					String testa15DiasForm = dateFormat.format(testa15Dias);
					String testa7DiasForm = dateFormat.format(testa7Dias);
					
					// Se a data de expiracao do contrato - 60 dias for igual a data atual
					// Ou seja, se faltar 60 dias para o termino do contrato
					if(testa60DiasForm.compareTo(dataAtualForm) == 0) {
						enviaEmail();
						
					}
					// Se a data de expiracao do contrato - 30 dias for igual a data atual
					// Ou seja, se faltar 30 dias para o termino do contrato
					else if(testa30DiasForm.compareTo(dataAtualForm) == 0) {
						enviaEmail();
						
					}
					// Se a data de expiracao do contrato - 15 dias for igual a data atual
					// Ou seja, se faltar 15 dias para o termino do contrato
					else if(testa15DiasForm.compareTo(dataAtualForm) == 0) {
						enviaEmail();	
						
					}
					// Se a data de expiracao do contrato - 7 dias for igual a data atual
					// Ou seja, se faltar 7 dias para o termino do contrato
					else if (testa7DiasForm.compareTo(dataAtualForm) == 0) {
						enviaEmail();
						
					}
					else {
						System.out.println("Não é para enviar email!");
					}
					System.out.println("-----------------------------------------------------------------");
				}
			}
			
			public Date addDias(Date data, int dias) {
				Calendar calendar = Calendar.getInstance();
				calendar.setTime(data);
				calendar.add(calendar.DATE, dias);
				
				return calendar.getTime();
			}
			
			public void enviaEmail() throws SQLException {
				
				//proad-ccc@ufpa.br

				try {
					
					// Itera sob a lista de emails dos convenios
					EnderecoEmailDAO dao = new EnderecoEmailDAO();
					List<EnderecoEmail> listaEndEmails = new ArrayList<EnderecoEmail>();
					listaEndEmails = dao.getEnderecoEmailsConv();
					
					System.out.println("##### CHECA CONVÊNIOS #####");
					SimpleEmail email = new SimpleEmail();
					
					for (EnderecoEmail enderecoEmail : listaEndEmails) {
						
						// Seta o calendario para a data atual
						Date dataAtual = new Date();
						Calendar calendar = Calendar.getInstance();
						calendar.setTime(dataAtual);
						
						// Seta o formato da data como esta no banco
						SimpleDateFormat formatoBanco = new SimpleDateFormat("yyyy-MM-dd");
						Date data = enderecoEmail.getDataFimVig();
						
						// Pega o email de uma instituicao especifica
						enderecoEmail = dao.getEnderecoEmailConv(enderecoEmail.getIdAjuste(), enderecoEmail.getIdInstituicao(), formatoBanco.format(data)); 
						
						email.setHostName("smtp.ufpa.br");
						
						if (enderecoEmail.getDestinatario() != null) {			
							// tah listando todos os enderecos como destinatario
							email.addTo(enderecoEmail.getDestinatario());  
							System.out.println("Enviado para: " + enderecoEmail.getIdAjuste());	
							
						}
						else {
							System.out.println("Endereço não informado!");
						}
						
						email.setFrom("sicc@ufpa.br");
						email.setSubject("Teste do SiccEmailTimer");
						email.setMsg("Caro usuário, \n"
								+ " \n"
								+ "Informamos que o prazo de vigência de seu convênio está perto de expirar. \n"
								+ "Favor entrar em contato com a instituição contratada. \n"
								+ " \n"
								+ "Atenciosamente, \n"
								+ " \n"
								+ "A Direção");
						
						email.send();
						
					}
					
				} catch (EmailException e) {
					System.out.println("Ocorreu um erro no envio!");	
				}	
			}
		}, new Date(), dia);
	}
	
	public static void main(String[] args) {
		SiccEmailTimerConv emailTimer = new SiccEmailTimerConv();
		emailTimer.start();
		
	}
}

cara,vi que vc usa varios componentes para chamada, eu sujiro que em vez de chamar todas as datas ao mesmo tempo vc faça um objeto e chame em um laço e busque os que falta 60 e manda,dewpois os de 30 e manda …

seu codigo ficou todo embananado

rsrs

:lol:

valeu pela dica artsby, me deu uma luz! vou fazer o que voce me sugeriu
quanto ao código, tah realmente uma zona, é q tenho q fazer num tempo curto e ainda num tenho muita experiencia, vou tentar melhorar, o negocio eh o tempo… :lol:

[]´s