JavaMail

7 respostas
jbjares

Olá Amigos,
Tenho um sistema web o qual usa a API javamail para mandar e-mail, ta funcionando legal! Mas não consigo enviar os anexos… a mensagem chega ao destino com um anexo vazio, se for um txt ou doc até abri o visualizador, mas tudo em branco e no caso de imagem mostra a mensagem de visualização indisponivel.
Não sei oque fazer… existe algum upload que eu deva fazer antes de envia-lo para a classe que trata as MultParts?

Muito Obrigado a Todos,
jbjares

7 Respostas

leandrokjava

cara vc tah utlizando qual servidor de aplicações??

leandrokjava

?

T

Para enviar email em formato html com anexos é preciso entender corretamente o padrão MIME, o que não é trivial usando apenas Javamail. O Commons-Email do projeto Jakarta ( http://commons.apache.org/email/ ) lhe ajuda com esse tipo de coisa, que reconhecidamente não é simples.

leandrokjava

fiz um tutorial bem simples para vc.

para Enviar emails vc precisa de um servidor SMTP.

vc pode utilizar o JAMES (java apache Mail Server é um servidor SMTP,PPOP3 e NNTP todo feito em java.\o/

http://james.apache.org/

eo JavaMail onde vc já deve saber.

http://java.sun.com/products/javamail/

coloque todos os frameworks dentro da lib.

bom agora se vc quiser fazer upload somente como javamail, é mais dificil e vc tera que fazer, assim:
no caso do JSP.

<%
import =“JAVA.UTIL., JAVAX.MAIL., JAVAX.MAIL.INTERNET., MEUPACOTE.aUTENTICAR, JAVAX.ACTIVATION.
%>

<%

Properties props = new Proterties():

props.put(mail.smtp.host,locahost);

props.put(mail.smtp.auth,true);

Session s= Session.getDefaultInstance(props,new Autenticater(“[email removido]”,“guj”));

MimeMessage message = new MimeMessage(s);

InternetAddress from = new InternetAddress([email removido]);

message.setFrom(from);

InternetAddress to = new InternetAddress(<a>"[email removido]</a>");

message.addRecipent(Message.recipientType.TO, to);

message.setSubject(“Teste usando JavaMail”);.
message.setSendDate(new Date());

//cria MultiPart
MultiPart mp = new MimeMultipart();

//adiciona o conteudo

MimeBodyPart conteudo= new MimeBodyPart();

conteudo.setContent(e-mail com conteudo anexo,text/html);

mp.addBodyPart(conteudo);
//anexa o arquivo na mensagem

MimeBodyPart anexo new MimeBodyPart();

FileDataSource fds = new FileDataSource (C:/temp/logoGUJ.jpg);

anexo.setDataHandler(new DataHadler(fds));

anexo.setFileName(fds.getName());

mp.addBodyPart(anexo);

//adiciona a Multipart na mensagem
message.setContent(mp);

Transport.send(message);
%>

OU VC PODE FACILITAR AS COISAS.\O/

Utilizando a biblioteca Commons Email
ela pertence ao Apache.
baixe em:
http://commons.apache.org/email/

baixe o arquivo commons-email-*.*zip
e pegue os jar dentro dele.

entao vamos ao codigo, vc pode fazer assim em seu JSP.

<%

EmailAttachment attachment = new EmailAttachment();

attachment.setPath(C:/temp/logoGUJ.jpg);

attachment.setDisposition(EmailAttachment.ATTACHMENT);

attachment.setDescription(Logo da GUJ);

attachmentsetName(GUJ);

MultiPartEmail email = new MultiPartEmail();

email.setHostName(localhost);

email.addTo([email removido], guj);

email.setFrom([email removido],leandro);

email.setSubjection(mensagem Teste);

email.setMsg(teste de email utilizando commons email);

email.attach(attachment);

emailsend();

%>

ficou bem melhor neh.!!!

mas é isso aee…

qualquer coisa estamos aee.

t+

leandrokjava

http://www.guj.com.br/posts/list/15/17337.java

jbjares

Estou usando Tomcat 5.5, Jsp, Struts e Hibernate.
Segue anexo o código:

*Jsp

<!-- topo -->
			<%@ include file="topoMenu.html"%>
			<!-- x -->
			<!-- main -->
			<div id="mainADM">

				<form action="enviarEmails.do" method="post" name="formP" >

				<div id="BoxPadrao">
						<div id="brTopEsq"></div>
						<div id="brTopDir"></div>
						<input type="hidden" value="<c:out value="${curso.idCurso}"/>"
							name="idCurso" />
						<div id="conteudo">

							<h3>
								Envio de e-mails para Pré-Inscritos do Curso
								<br />
								de
								<strong><c:out value="${curso.tipoCurso}" />
								</strong> em
								<strong><c:out value="${curso.nomeCurso}" />
								</strong>
							</h3>

							<fieldset>
								<p class="msgErroADM">
									<c:out value="${mensagemPreResultadoEmail}" />
								</p>

						<label>Digite as informações do e-mail</label><br /><br />
						<label>Assunto:</label>
							<input type="text" name="assunto" align="left" /><br /><br />
							<label>Mensagem</label>
							<div class="textarea3"><textarea name="corpoEmail" cols="57" rows="10"></textarea></div>


							</fieldset>
							<div style="margin-left: 70px;"><strong>Anexar um arquivo:</strong> <br/>
							<input type="file" name="filename" />
							
							</div>
							<br/><br/>
							
						
							<!-- Primeira TABELA -->
							<div style="margin-left:70px;" ><input type=checkbox name="selall" onClick="CheckAll()"/><strong><u>Selecionar Todos os E-mails</u></strong></div><br/><br/>							
							<table>
								
								<c:forEach var="pre" items="${listaPreInscrCurso}">
									<tr>
										<td>
											<c:out value="${pre.nomePreinscrito}" />
										</td>
										<td>
											<input type="checkbox" name="checkboxEmail" id="curso" value="${pre.email}" /> <label> <c:out value="${pre.email}" /></label>
										</td>
									</tr>
								</c:forEach>
							</table>
							<!-- x -->
						</div>
						<div id="brDownEsq"></div>
						<div id="brDownDir"></div>
						<div id="botoes">
							<a href="inicioAdm.do"><img class="botaoUnico" border="0" src="lib/imagens/botoes/voltar.gif" style="cursor:pointer" /></a>
							<input class="botaoEnviarEmail" type="image" src="lib/imagens/botoes/enviarEmail.gif" onclick="return validacaoEmail()" style="border:0;cursor:pointer" />

							<!--<a href="" /> </a> -->
						</div>

*Action do Struts

/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package unama.supos.control.action.admin;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Multipart;
import javax.mail.MultipartDataSource;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;


import unama.supos.model.data.preinscrito.TabelaPreInscrito;
import unama.supos.model.email.ValidaEmail;
import unama.supos.model.email.Email;


/** 
 * MyEclipse Struts
 * Creation date: 09-24-2007
 * 
 * XDoclet definition:
 * @struts.action validate="true"
 * @struts.action-forward name="erro" path="/pages/administrador/erro.jsp"
 * @struts.action-forward name="sucesso" path="/pages/administrador/resultado_envio_emails.jsp"
 */
public class EnviarEmailsAction extends Action {
	/*
	 * Generated Methods
	 */

	/** 
	 * Method execute
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return ActionForward
	 * @throws IOException 
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws IOException {
		HttpSession session = request.getSession();
		ActionMessages erros = new ActionMessages();
		if (session.getAttribute("login")==null) {
			return mapping.findForward("login");
		}
		String idCurso = request.getParameter("idCurso");
		System.out.println("idCurso: " + request.getParameter("idCurso"));
		String assunto = request.getParameter("assunto");
		String corpoEmail = request.getParameter("corpoEmail");
		String emails[] = request.getParameterValues("checkboxEmail");
		String anexos = request.getParameter("filename");	
		ValidaEmail valEmail = new ValidaEmail();
		List emailsValidos = valEmail.verificaEmails(Integer.parseInt(idCurso));
		List emailsInvalidos = valEmail.getEmailsInvalidos();
		List emailsEnviados = new ArrayList();
		List emailsNaoEnviados = new ArrayList();
		TabelaPreInscrito preInscrito = new TabelaPreInscrito();		
		
		//laço para concatenar os emails escolhidos
		
		for(int i=0; i < emails.length; i++)
		{
			
			try{
						 Email email = new Email();
						 if(!anexos.equals("")) //testa se tem anexo e envia para metodo sobrecarregado 
						 {
		                 boolean teste = email.enviar(assunto, corpoEmail, emails[i], anexos); 
	                     if (teste == true){
	                    	 emailsEnviados.add(emails[i]);
	                     }else{
	                         emailsNaoEnviados.add(emails[i]);
	                     }
						 }
						 else //testa se não tem anexo e envia para metodo sobrecarregado
						 {
			                 boolean teste = email.enviar(assunto, corpoEmail, emails[i]); 
		                     if (teste == true){
		                    	 emailsEnviados.add(emails[i]);
		                     }else{
		                         emailsNaoEnviados.add(emails[i]);
		                     }
						 }


						
	        }catch(Exception e) {
	            System.out.println("O seguinte erro ocorreu: " + e); 
	        }

			
		}

		if (emails == null){
		   	ActionMessage am = new ActionMessage("erro.listagemPreCurso");
			erros.add("erros", am);
			saveMessages(request, erros);
			return mapping.findForward("erro");	
		}else if(emailsValidos.isEmpty()){
			session.setAttribute("mensagemPreResultadoEmail", "Não existem Pré-Inscritos neste curso!");
			return mapping.findForward("sucesso");			    
		}else{
			session.setAttribute("emailsEnviados", emailsEnviados);
			session.setAttribute("emailsNaoEnviados", emailsNaoEnviados);
			session.setAttribute("emailsInvalidos", emailsInvalidos);
			return mapping.findForward("sucesso");		 
		}
	}

}

*Javamail Class

public boolean enviar(String assuntoEmail, String corpoEmail, String preInscrito, String anexos) { 
        try {
           dest = preInscrito;
           assunto = assuntoEmail;
           
           String mensagem = "<HTML>"+corpoEmail+"</HTML>";
           
           Properties mailProps = new Properties();
//    definição do mailserver

           mailProps.put("mail.smtp.host", host);
           mailProps.put("mail.smtp.auth", "true");

           Session mailSession = Session.getDefaultInstance(mailProps, null);

//    As duas linhas seguintes de código, colocam no
//    formato de endereços,
//    supostamente válidos, de email os dados
//    passados pelos parâmetros to e from.
           InternetAddress destinatario = new InternetAddress (dest);
           InternetAddress remet = new InternetAddress (remetente);
           Address destinatario2 = new InternetAddress("[email removido]");


//    As duas linhas de código a seguir, são
//    responsáveis por setar os atributos e
//    propriedas necessárias do objeto message
//    para que o email seja enviado.
//    inicialização do objeto Message
           Message message = new MimeMessage (mailSession);

//    Definição de quem está enviando o email
           message.setFrom(remet);

//    define o(s) destinatário(s) e qual o tipo do
//    destinatário.
//    os possíveis tipos de destinatário: TO, CC, BCC

           message.setRecipient( Message.RecipientType.TO, destinatario );
           message.addRecipient(Message.RecipientType.BCC, destinatario2);

//    definição do assunto do email

           message.setSubject (assunto);
//    definição do conteúdo da mensagem e do
//    tipo da mensagem

           
//    a linha de código seguinte é a responsável
//    pelo envio do email

           MimeMultipart mp = new MimeMultipart();
             //1ª parte a
			 MimeBodyPart mbp = new MimeBodyPart();
		     //mbp.setContent("mensagem", "text/html");
			 mbp.setText(corpoEmail);
			 
			 
			 //Anexa o Arquivo a
			 MimeBodyPart mbp3 = new MimeBodyPart();  
			 DataSource fds = new FileDataSource("//"+anexos);  
			 mbp3.setDisposition(Part.ATTACHMENT);  
			 mbp3.setDataHandler(new DataHandler(fds));  
			 mbp3.setFileName(fds.getName());  
			 
			 
			 /**FileDataSource source = new FileDataSource (anexos);			 
			 MimeBodyPart mbp2 = new MimeBodyPart();
			 
			 
			 mbp2.addHeaderLine(source.getContentType());
			 
			 DataHandler data =  new DataHandler(source);
			 mbp2.setDataHandler(data);
			 mbp2.setFileName(data.getDataSource().toString());**/




			 //Cria o Multpart a 
			 mp.addBodyPart(mbp);
			 mp.addBodyPart(mbp3);

			 
			 //Adiciona na mensagem a
			 
			 //message.setContent(mp);
			 message.setContent (mp);
			 message.saveChanges();
			 
           Transport transport = mailSession.getTransport("smtp");
           System.out.print("Conectando smtp... ");
           transport.connect(host, username + "@unama.br", senha);
           if (transport.isConnected()) {
             System.out.println("Conectado [smtp:" + host + "]");
             System.out.print("Enviando Mensagem...");
//                    Transport.send(message);
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
           }

           System.out.println("\n -> Email ENVIADO COM SUCESSO a " + dest + "!\n");

           return true;
         }
         catch (Exception e) {
           setErro(e);
           System.out.println("\n > Erro no envio do email: "+e+"\n");
           e.printStackTrace();
           return false;
       }
     }
        
}

Muito Obrigado a Todos,
jbjares

jbjares

Boa Tarde Amigo leandrokjava,
Sou enormemente grato a sua boa vontade. Já estou pondo a mão na massa… só me restou uma dúvida… como encontrar o caminho? Em seu código você ultilizou o caminho absoluto, mas eu preciso saber como encontrar o caminho que o usuário irá setar.

<%
EmailAttachment attachment = new EmailAttachment();
attachment.setPath("C:/temp/logoGUJ.jpg"); // Preciso do caminho do usuário!
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription("Logo da GUJ");
attachment..setName("GUJ");
MultiPartEmail email = new MultiPartEmail();
email.setHostName("localhost");
email.addTo("[email removido]", "guj");
email.setFrom("[email removido]","leandro");
email.setSubjection("mensagem Teste");
email.setMsg("teste de email utilizando commons email");
email.attach(attachment);
email..send();
%>

Muito Obrigado a Todos,
jbjares

Criado 21 de janeiro de 2008
Ultima resposta 21 de jan. de 2008
Respostas 7
Participantes 3