Erro ao enviar email HTML usando Commons Email do Jakarta

Estou tendo problema para enviar email em HTML, usando o Commons Email do Jakarta, ele me volta o seguinte erro.

javax.activation.UnsupportedDataTypeException: no object DCH for MIME type text/html

Ao tentar enviar em txt, ele envia sem erro algum.
Estou usando exatamente os exemplos do endereço http://jakarta.apache.org/commons/email/userguide.html

<%@ page contentType="text/html; charset=ISO-8859-1"
  import="java.net.*"
  import="org.apache.commons.mail.*"
%>
<%
// Create the email message
HtmlEmail email = new HtmlEmail();
email.setHostName("mai.host.teste");
email.addTo("emailteste@teste.com.br", "Daniel To");
email.setFrom("emailteste@teste.com.br", "Daniel From");
email.setSubject("Test message");

// embed the image and get the content id
URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
String cid = email.embed(url, "Apache logo");

// set the html message
email.setHtmlMsg("<html>The apache logo - <img src=\"cid:"+cid+"\"></html>");

// set the alternative message
email.setTextMsg("Your email client does not support HTML messages");

// send the email
email.send();
%>

Olá

Você precisa usar um host válido…!!! Assim como endereço de email etc etc…

Zelopes,

Sim estou colocando host válido e email válido, só alterei para enviar para lista, por questões de segurança.

humm…

  1. ta usando o ultimo javamail e jaf…??? senão atualize…(descargo de consciencia)… :lol:

  2. se nao der na pior das hipóteses tente setar o mime type manualmente… :wink:

  3. cola o erro no google…alguem ja teve esse mesmo problema…

[]'s

Inclui o jar do javamail e o jaf. Como eu seto manualmente o mime type?

Vou nessa alternativa pq ñ fiz isso.

valeu zelopes

[quote=zelopes]humm…

  1. ta usando o ultimo javamail e jaf…??? senão atualize…(descargo de consciencia)… :lol:

  2. se nao der na pior das hipóteses tente setar o mime type manualmente… :wink:

  3. cola o erro no google…alguem ja teve esse mesmo problema…

[]'s[/quote]

Ola eu tô com um problema na no envio de email. Assim, eu uso uma máquina virtual pra desenvolver e testar.
Eu devo estar fazendo alguma burrada. Segue o erro e as classe utilizadas:

<<<<<>>>>>
org.apache.commons.mail.EmailException: Sending the email to the following server failed : mail.terra.com.br:25
at org.apache.commons.mail.Email.sendMimeMessage(Email.java:873)
at org.apache.commons.mail.Email.send(Email.java:898)
at com.rebaixarts.contato.services.EmailTeste.sendEmail(EmailTeste.java:32)
at com.rebaixarts.contato.struts.action.FaleConoscoAction.perform(FaleConoscoAction.java:50)
at org.apache.struts.action.Action.execute(Action.java:401)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:446)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:266)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1292)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:619)

<<<<<>>>>>
package com.rebaixarts.contato.services;

import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.PasswordAuthentication;
import javax.mail.internet.InternetAddress;

import com.rebaixarts.contato.vo.*;

public class Email extends Authenticator implements ConfigPadraoEmail {

/* Classe de Autenticação */
public class SmtpAuthenticator extends Authenticator {  
    public PasswordAuthentication getPasswordAuthentication()  {  
      
        return new PasswordAuthentication(ConfigPadraoEmail.USERNAME,
        		                          ConfigPadraoEmail.PASSWORD);  
    }  
}

/* Classe de Envio */
public String sendMail (String from, String mensagem) throws MessagingException {
			
	Address destTo = new InternetAddress(ConfigPadraoEmail.USERNAME); 
	Address destCc = new InternetAddress(ConfigPadraoEmail.USERNAME);
    Address destBcc = new InternetAddress(ConfigPadraoEmail.USERNAME);
	
	try{ 
		
	    Properties mailProps = new Properties();
	
        //Define o SMTP de envio
        mailProps.put("mail.smtp.host", ConfigPadraoEmail.MAILSERVER);
               
        //Realiza a autenticação
        Authenticator auth = new SmtpAuthenticator(); 
        
        Session mailsession = Session.getInstance(mailProps, auth);                           
         
        //Inicializa o objeto Message
        Message message = new MimeMessage(mailsession);

        message.setFrom(new InternetAddress(from));
                 
        //Define o(s) destinatário(s): TO, CC, BCC
        if (destTo != null) { 
           message.setRecipient(Message.RecipientType.TO, destTo); 
        }  
                          
        if (destCc != null) { 
           message.setRecipient(Message.RecipientType.CC, destCc); 
        }  
                          
        if (destBcc != null) { 
           message.setRecipient(Message.RecipientType.BCC, destBcc); 
        }  
        
        //Define o assunto do E-Mail
        message.setSubject(ConfigPadraoEmail.ASSUNTO);

        //Define o conteúdo da Mensagem
        message.setContent(mensagem.toString().replace("\n", "<br>"), "text/html");

        //Define a data atual a mensagem
        message.setSentDate(new Date());

        //Enviado o E-Mail
        Transport transport = mailsession.getTransport("smtp");
        
        System.out.println("Conectando no servidor de smtp: "+ ConfigPadraoEmail.MAILSERVER +"...");
        
        //Aqui ocorre o erro!!!!!
        transport.connect(ConfigPadraoEmail.MAILSERVER, ConfigPadraoEmail.USERNAME, ConfigPadraoEmail.PASSWORD);

        if (transport.isConnected()) {
        	
            System.out.println("Conectado ["+ ConfigPadraoEmail.MAILSERVER +"]");
            System.out.println("Enviando Mensagem...");
            
            transport.send(message);
        
            System.out.println("Mensagem Enviada!!!");
        }
        
    } catch (MessagingException e) {
        e.printStackTrace();
        return e.getMessage();
    } 
    
    return null;        
}    

}

<<<<<<Interface com variáveis>>>>>>
package com.rebaixarts.contato.vo;

public interface ConfigPadraoEmail {

public static final String USERNAME = "meuemail@terra.com.br";	
public static final String MAILSERVER = "mail.terra.com.br";
public static final String ASSUNTO = "Dúvida Internauta";
public static final String PASSWORD = "senha";

}

<<<<<>>>>>
package com.rebaixarts.contato.struts.action;

import java.io.IOException;

import org.apache.commons.mail.*;

import javax.mail.MessagingException;
import javax.servlet.ServletException;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.rebaixarts.contato.services.Email;
import com.rebaixarts.contato.services.EmailTeste;

import com.rebaixarts.contato.struts.form.FaleConoscoForm;

public final class FaleConoscoAction extends Action {

public ActionForward perform(ActionMapping mapping,
                             ActionForm form,
                             HttpServletRequest request,
                             HttpServletResponse response)
                             throws IOException, ServletException {
        	
	 FaleConoscoForm enviarForm = (FaleConoscoForm) form;
	 Email servicesEmail = new Email();  
	    	
	 String result = null;
       	    	    	
	 String nome  = enviarForm.getNome(); //Nome qualquer   	
 String texto = enviarForm.getTexto();   //Um texto em uma textArea
 String remetente = enviarForm.getEmail(); //Um email válido qualquer
      
     //Tratamento para página inicial 
 if (nome == null || remetente == null) {
   	return (mapping.findForward("first"));
 } else if (nome.equals("") || remetente.equals("")) {
     	return (mapping.findForward("empty"));    
 }
   	    	    
 //Enviando Email 
 try {			

	result = servicesEmail.sendMail(remetente, texto);

    } catch (MessagingException e) {
	e.printStackTrace();
    } 
 	
  		 
    if (result == null) {
    
       return mapping.findForward("failure");  
    
    } else { 
    
       enviarForm.setNome(null);
 	   enviarForm.setEmail(null);
       enviarForm.setTexto(null);
    }
    
    return mapping.findForward("success");                
}

}

Eu recomendo sempre, antes de mais nada, testar as suas configurações de email usando um client de email como o Outlook Express, o Mozilla Thunderbird ou o Eudora. Se conseguir configurar direitinho e conseguir enviar e receber emails, então copie as configurações para o seu programa.

Pode ser que você esteja sob um proxy corporativo e só consiga receber e enviar emails através do servidor de email corporativo (MS Exchange ou Lotus Notes); nesse caso, você não conseguirá testar seu programa; no máximo, você poderá simular seu funcionamento usando um servidor de email “stand-alone” como o Apache James. (Procure no site jakarta.apache.org ).