E-mail - Delay

Boa tarde!

Galera, implementei um método para enviar e-mail. Mas, eu tenho que reenviar a página três vezes para o e-mail ser enviado corretamente.

Na primeira vez o e-mail não e enviado.

Atualizando a página F5
O e-mail é enviado sem os itens

Atualizando a página novamente
O e-mail é enviado juntamente com seus itens.

O que pode ser?

Meu método

// Lista Finalizar Orçamento
	@User
	@Get("/orcamento/confirmar/{id}")
	public List<Orcamento> finalizar(Long id) {

		// Include dos itens
		result.include("itemList", dao2.listaitensdorcamento(id));

		/*
		 * *******************************************************
		 * |: PRECISA RETIRAR ESSE MÉTODO DAQUI DE DENTRO :| |: SOMENTE PARA
		 * TESTE :| *******************************************************
		 */

		// Envia E-mail
		String host = "smtp.gmail.com";
		String login = "xxxx@gmail.com";
		String senha = "xxxxx";
		String remetente = "xxxxxr";
		String assunto = "xxxxxxxxxx!";
		for (Orcamento orcamento : dao.finalizar(id)) {

			HtmlEmail email = new HtmlEmail();
			try {
				email.setHostName(host);
				email.setAuthentication(login, senha);
				email.setSmtpPort(587);
				email.addTo(orcamento.getUsuario().getEmail());
				email.setFrom(remetente);
				email.setSubject(assunto);

				String msg1 = "<html><title>CompreSempre - Orçamento Qualificado</title>"
						+ "<body><h1> Mais um orçamento CompreSempre Finalizado </h1>"
						+ "<h2> Orçamento Número : "
						+ orcamento.getId()
						+ " - Data: "
						+ orcamento.getData_cadastro()
						+ " - Hora: "
						+ orcamento.getHora_cadastro()
						+ " </h2>"
						+ "<p> Usuário: "
						+ orcamento.getUsuario().getNome()
						+ " - E-mail: "
						+ orcamento.getUsuario().getEmail()
						+ " </p>"
						+ " <p>Endereço: "
						+ orcamento.getUsuario().getEndereço()
						+ " - "
						+ orcamento.getUsuario().getBairro().getNome()
						+ " </p>" + "&lt;h4&gt; Item (s) do Orçamento&lt;/h4&gt;";

				String msg2 = "";
				// Lista de produtos
				// Cabeçalho
				msg2 += ("&lt;table border=\"1\"&gt;");
				msg2 += ("&lt;tr&gt;");

				msg2 += ("&lt;td&gt;");
				msg2 += ("Produto");
				msg2 += ("&lt;/td&gt;");

				msg2 += ("&lt;td&gt;");
				msg2 += ("Menor Preço");
				msg2 += ("&lt;/td&gt;");

				msg2 += ("&lt;td&gt;");
				msg2 += ("Quantidade");
				msg2 += ("&lt;/td&gt;");

				msg2 += ("&lt;td&gt;");
				msg2 += ("Total");
				msg2 += ("&lt;/td&gt;");

				msg2 += ("&lt;td&gt;");
				msg2 += ("Empresa");
				msg2 += ("&lt;/td&gt;");
				msg2 += ("&lt;/tr&gt;");
				// Fim do Cabeçalho
				for (Item item : dao2.listaitensdorcamento(orcamento.getId())) {

					msg2 += ("&lt;tr&gt;");

					msg2 += ("&lt;td&gt;");
					msg2 += (item.getProdutoEmpresa().getProduto().getNome());
					msg2 += ("&lt;/td&gt;");

					msg2 += ("&lt;td&gt;");
					msg2 += ("R$ " + item.getPreco_unit());
					msg2 += ("&lt;/td&gt;");

					msg2 += ("&lt;td&gt;");
					msg2 += (item.getQuantidade());
					msg2 += ("&lt;/td&gt;");

					msg2 += ("&lt;td&gt;");

					DecimalFormat format = new DecimalFormat();
					format.setMaximumFractionDigits(2);
					format.setMinimumFractionDigits(1);

					msg2 += ("R$ " + format.format(item.getPreco_unit()
							* item.getQuantidade()));
					msg2 += ("&lt;/td&gt;");

					msg2 += ("&lt;td&gt;");
					msg2 += (item.getProdutoEmpresa().getEmpresa()
							.getFantasia());
					msg2 += ("&lt;/td&gt;");
					msg2 += ("&lt;/tr&gt;");
					msg2 += ("&lt;td&gt;");
				}
				msg2 += ("&lt;/table&gt;");

				String msg3 = "<p> Caso não esteja visualizando corretamente esta mensagem, acesse - "
						+ "<a > <font color=\"orange\">xxxxxr</a></p>"
						+ "&lt;/body&gt;&lt;/html&gt;";

				email.setHtmlMsg(msg1 + msg2 + msg3);
				// cópia para as empresas
				for (Empresa empresa : dao3.listaTudo()) {
					// empresa tem que estar ativa para receber e-mails
					if (empresa.getSituacao().equals("1")) {
						// Somente para as empresas que pertecem a atividade
						// selecionada
						if (empresa.getAtividade().getId() == (atividadeEmProgresso
								.getAtividade().getId())) {
							// Falta implementar - somente para as empresas da
							// cidade
							email.addCc(empresa.getEmail(),
									empresa.getFantasia());
						}
					}

				}
				email.addBcc("xxxxxxxxxxxxxxxxx");
				email.setSSL(true);
				email.setDebug(true);
				email.send();

			} catch (EmailException e) {
				System.err.print("...Erro:\n\t" + e.getMessage() + "\n\n");
				e.printStackTrace();
			}

		}
		// Retirar Orçamento da Sessão
		OrcamentoEmProgresso.setOrcamento(null);
		return dao.finalizar(id);
	}

Valeus!

O que acontece de diferente quando tu debuga na primeira e na terceira vez?

Cara, a única diferença. E que na primeira o e-mail e enviado.