[code]MimeBodyPart mbp1 = new MimeBodyPart();
msg.setText(text);
// cria a segunda parte da mensage
MimeBodyPart mbp2 = new MimeBodyPart();
// anexa o arquivo na mensagem
FileDataSource source = new FileDataSource(
"/home/tcarvalho/Desktop/newfile.txt");
mbp2.setDataHandler(new DataHandler(source));
mbp2.setFileName(source.getName());[/code]
Fiz um teste rodando com java application e deu tudo certo, enviou a mensagem com o anexo.
Só que quando eu faço o deploy da aplicação no apache Geronimo ocorre:
javax.mail.MessagingException: IOException while sending message; nested exception is: java.io.IOException: No content
Gostaria de saber se eu tenho que fazer um upload do arquivo para o servidor?
Não sei como fazer para anexar, pois o erro:
javax.mail.MessagingException: IOException while sending message; nested exception is: java.io.IOException: No content
é porque realmente o caminho não existe pois eu não estou testando na minha maquina local.
O que eu queria saber e como posso pegar o arquivo enviado e colocar em FileDataSource(???)
// anexa o arquivo na mensagem
FileDataSource source = new FileDataSource(???????????);
mbp2.setDataHandler(new DataHandler(source));
mbp2.setFileName(source.getName());
Entao cara, vc realmente precisa salvar o arquivo em disco?
Imagine se dois usuarios executarem isso ao msm tempo?
Quital montar o anexo com o arquivo empregadavetor de bytes?
Seria mais seguro e vc nao depende de acesso ao disco etc e tal…
Sei como te ajudar nisso, mas preciso estar na minha maquina pra isso. Amanha posto aqui pra vc, ok?
byte[] anexo = criaAnexo(); //seu anexo em vetor de bytes (adote a estrategia de conversão que melhor lhe convir)
MimeBodyPart partPhoto = new MimeBodyPart(); //cria seu bodypart normalmente
partPhoto.setDataHandler(new DataHandler(new ByteArrayDataSource(anexo, "aplication/pdf"))); //note o ByteArrayDataSource, esse é o pulo do gato. Vc diz qual é o seu anexo (o vetor de bytes) e o mime type dele, no meu caso foi um pdf
partPhoto.setFileName("MeuAnexo.pdf"); //diz o nome que vc quer que seu anexo vá, senao fica um nome zuadissimo.
Cara, é isso, muito simples!
O que demorei pra encontrar foi esse ByteArrayDataSource, é ai que ta o pulo do gato! Ele é do pacote javax.mail.util.ByteArrayDataSource.
Problema resolvido!
Estava dando erro com o vetor de bytes que eu mesmo tinha implementado para o upload do arquivo, resolvi seguir a dica do furutani e usei Commons FileUpload
ficou assim:
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();