Java Mail anexo com problemas [RESOLVIDO]

Olá galera estou com um problema na API JavaMail que não consigo resolver…
Qdo anexo um pdf ele volta assim…

[code]------=_Part_10_32628960.1251038363795
Content-Type: text/plain; name=anexo.pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=anexo.pdf

JVBERi0xLjQKJeLjz9MKMyAwIG9iaiA8PC9UeXBlL1hPYmplY3QvQ29sb3JTcGFjZS9EZXZpY2VS
R0IvU3VidHlwZS9JbWFnZS9CaXRzUGVyQ29tcG9uZW50IDgvV2lkdGggMTcyL0xlbmd0aCA0MTk3
L0hlaWdodCA4NS9GaWx0ZXIvRENURGVjb2RlPj5zdHJlYW0K/9j/4AAQSkZJRgABAQEBLAEsAAD/
2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0
Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABVAKwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEA
AAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJx
FDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNk
ZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJ[/code]

Tenho a inplementacao do DataSource

[code]public class InputStreamDataSource implements DataSource {

private String name;
private String contentType;
private ByteArrayOutputStream baos;

public InputStreamDataSource(String name, String contentType,
        InputStream inputStream) throws IOException {
    int read;
    this.name = name;
    this.contentType = contentType;

    baos = new ByteArrayOutputStream();

    byte[] buff = new byte[256];
    while ((read = inputStream.read(buff)) != -1) {
        baos.write(buff, 0, read);
    }
}

public String getContentType() {
    System.out.println("ContentType->>>" + contentType);
    return contentType;
}

public InputStream getInputStream() throws IOException {
    // TODO Auto-generated method stub
    return new ByteArrayInputStream(baos.toByteArray());
}

public String getName() {
    // TODO Auto-generated method stub
    return name;
}

public OutputStream getOutputStream() throws IOException {
    // TODO Auto-generated method stub
    throw new IOException("Cannot write to this read-only resource");
}

}
[/code]

Pego os bytes[] do pdf

[code] ByteArrayInputStream attachStream = new ByteArrayInputStream(bts);
//call constructor class:InputStreamDataSource

e esse é o metodo para envio

[code]protected void sendMail(InputStreamDataSource attach, Usuario usuario, Fornecedor fornecedor) throws IOException {
Session session = Session.getInstance(props, new MailAuthenticator(usuario.getUsuario(), usuario.getEmailSenha()));

    try {
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress(usuario.getEmail()));
        InternetAddress[] address = {new InternetAddress(fornecedor.getEmail())};
        msg.setRecipients(Message.RecipientType.TO, address);
        msg.setSubject("Assunto teste.");

        MimeBodyPart bp1 = new MimeBodyPart();
        bp1.setText("Texto teste.");


        MimeBodyPart bp2 = new MimeBodyPart();
        bp2.setDataHandler(new DataHandler(attach));
        bp2.setFileName(attach.getName());
  

        Multipart mp = new MimeMultipart();
        mp.addBodyPart(bp2);
        mp.addBodyPart(bp1);


        msg.setContent(mp);
        msg.setSentDate(new Date());

        Transport.send(msg);
        System.out.println("Email enviado com sucesso !");

    } catch (MessagingException mex) {
        mex.printStackTrace();
        Exception ex = null;
        if ((ex = mex.getNextException()) != null) {
            ex.printStackTrace();
        }
    }
}[/code]

Se alguem puder me ajudar, desde já agredeço…
InputStreamDataSource isds = new InputStreamDataSource(“anexo.pdf”, “application/pdf”, attachStream);[/code]

ninguém ?

Vc está fazendo isso apartir de um formulario web?

Não nao estou fazeendo de um formulario Web…

Estou fazendo de um servlet msm. O pior é que qdo eu rodo o serlvet a partir daminha maquina ele manda o anexo, normal.
Mas quando coloco no servidor ele anexa dessa forma aí.

Será que é alguma configuração do Tomcat?

Nome caso eu envio o arquivo por upload e uso esse trecho de código para anexar o arquivo que está em disco no servidor e envia-lo por email

		mbp2 = new MimeBodyPart();
		FileDataSource fds = new FileDataSource(getServletContext().getRealPath("/") + nomeArquivo);
		mbp2.setDataHandler(new DataHandler(fds));
		mbp2.setFileName(fds.getName());
		mbp2.setFileName("nomeArquivo"));
		mp.addBodyPart(mbp2);
		message.setContent(mp);
		Transport.send(message);

Já tentei isso também. O que acontece é que no Tomcat local, funciona, mas no Tomcat do Servidor ele envia o anexo desse jeito aí.
Já tentei usar a biblioteca do Commons-mail, e também deu a mesma coisa, só pode ser alguem coisa no Tomcat, mas o que será?

Já tentei isso também. O que acontece é que no Tomcat local, funciona, mas no Tomcat do Servidor ele envia o anexo desse jeito aí.
Já tentei usar a biblioteca do Commons-mail, e também deu a mesma coisa, só pode ser alguem coisa no Tomcat, mas o que será?

cara eu gero em pdf salvo no disco e envio funciona normalmente, veja:
http://www.guj.com.br/posts/list/133903.java#720780

Igweb,

Obrigado pela ajuda. Veja bem no meu computador, com o Tomcat local ele envia o e-mail, normal.
Já mudei esse código aí em cima. Simplifiquei um pouco.

[code]
public void send(Message msg) throws NoSuchProviderException, MessagingException, IOException {
this.msg = msg;
Session mailSession = Session.getInstance(this.props, auth);
mailSession.setDebug(false);

    message = new MimeMessage(mailSession);
    message.setFrom(new InternetAddress(msg.getMailFrom()));
    InternetAddress[] address = {new InternetAddress(msg.getMailTo())};
    message.setRecipients(javax.mail.Message.RecipientType.TO, address);
    message.setSubject(msg.getSubject());

    MimeBodyPart mbp1 = new MimeBodyPart();
    mbp1.setText(msg.getContents());


    MimeBodyPart mbp2 = new MimeBodyPart();

mbp2.setDataHandler(new DataHandler(new ByteArrayDataSource(msg.getBytes(), “application/x-any”)));
mbp2.setFileName(“p.pdf”);
mbp2.setDisposition(Part.ATTACHMENT);

    Multipart mp = new MimeMultipart();
    mp.addBodyPart(mbp1);
    mp.addBodyPart(mbp2);

    message.setContent(mp);

    message.setSentDate(new Date());
    message.saveChanges();


    Transport.send(message);[/code]

Já perdi q conta de qtos vezes mudei esse código. Ah lembrando que eu não estou gravbando o arquivo PDf em disco, ele é um relatório gerado pelo jasper.

Já tentei anexá-lo como um pdf físico, mas ele dá o mesmo erro. Anexa o arquivo dequele jeito.

Galera, tô pensando em posta isso no site do Javamail…

Depois de muito pesquisar, testar… o problema era a versao da JRE que o servidor estava usando, 1.3, meio antiga…

Atualizei e tudo funciounou… que beleza.

Fica aqui a dica, veja sempre qual JRE seu Tomcat está usando.

Valeu galera.

Galera… to tendo problemas aqui, mas estou utilizando somente a API Javamail mesmo, versão 1.3

O que acontece é o seguinte, já tentei com vários códigos que peguei na net por aí, mas meu e-mail nunca chega com anexo.
Na verdade o anexo chega no corpo em forma de texto, assim:

------=_Part_0_4875744.1272501496859
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Textando texto no meio
------=_Part_0_4875744.1272501496859
Content-Type: text/plain; name="C:\arquivo_em_anexo.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="C:\arquivo_em_anexo.txt"

conteudo do arquivo em anexo 123
conteudo do arquivo em anexo 456
conteudo do arquivo em anexo 789
conteudo do arquivo em anexo 012
conteudo do arquivo em anexo 345
------=_Part_0_4875744.1272501496859--

O código java que estou utilizando é o seguinte:

			Session session = Session.getInstance(p, null);

			Message message = new MimeMessage(session);
			message.setFrom(new InternetAddress("gp@hwhost.com.br"));
			message.addRecipient(Message.RecipientType.TO, new InternetAddress("teste@gmail.com"));
			message.setSubject("Hello JavaMail Attachment");

			BodyPart messageBodyPart = new MimeBodyPart();

			messageBodyPart.setText("Textando texto no meio");

			Multipart multipart = new MimeMultipart();
			multipart.addBodyPart(messageBodyPart);

			messageBodyPart = new MimeBodyPart();
			DataSource source = new FileDataSource("C:\arquivo_em_anexo.txt");
			messageBodyPart.setDataHandler(new DataHandler(source));
			messageBodyPart.setFileName("C:\arquivo_em_anexo.txt");
			multipart.addBodyPart(messageBodyPart);

			message.setContent(multipart);

			Transport tr = session.getTransport("smtp");
			tr.connect(host, fromAccount, password);
			tr.sendMessage(message, message.getAllRecipients());
			tr.close();

Detalhe: estou utilizando um exemplo da própria SUN… http://java.sun.com/developer/onlineTraining/JavaMail/contents.html#SendingAttachments

Já estou há dois dias vendo isso, sei lá, deve ser uma coisa pequena, mas já tentei com vários outros códigos e nada.

Alguém sabe o que pode estar acontecendo???

Valeu galera.