sim me desculpa por não da um feedback não conseguia responder tava bloqueando,eu uso plataforma chamada maker, que programação por fluxograma por tras tem codigos java, esse codigo e padrao da plataforma desse jeito ele funciona normal, mais o getcontenttype queria substituir por um get que traz o anexo,vou estudar mais java cara estou vendo na facul mais é OO bem basico mesmo.
F
FernandUrimtecnologi
Eu alterei o codigo para que fique compativel com plataforma gente usa por que é outra tipagem, mais ta dando erro ainda,podera verificar por favor onde estou errando.
protectedfinalVarianturimsalvarAnexoemail(Variantmensagem,VariantCaminho)throwsException{StringtipoDeConteudo=mensagem.getContentType();if(!tipoDeConteudo.contains(“multipart”)){return;// não há anexos}Multipartconteudo=(Multipart)mensagem.getContent();intpartes=conteudo.getCount();for(inti=0;i<partes;i++){// iterar as partes e extrair os anexosMimeBodyPartparte=(MimeBodyPart)conteudo.getBodyPart(i);if(!Part.ATTACHMENT.equalsIgnoreCase(parte.getDisposition())){continue;// essa parte não é um anexo}StringnomeDoArquivo=parte.getFileName();Filearquivo=newFile(Caminho,nomeDoArquivo);parte.saveFile(arquivo);// salvando o anexo em disco}}
S
staroski
Seu método precisa retornar um objeto do tipo Variant e você não está retornando nada.
O que é esse Variant?
É uma classe sua?
É de uma biblioteca de terceiros?
Tem a documentação dela?
F
FernandUrimtecnologi
esta dando erro somente na parte salvar arquivo: error: cannot find symbol parte.saveFile(arquivo); // salvando o anexo em disco
javax.mail.Messagemessage=(javax.mail.Message)messageObj;StringtipoDeConteudo=message.getContentType();if(!tipoDeConteudo.contains("multipart")){returnVariant.VARIANT_NULL;// não há anexos}javax.mail.Multipartconteudo=(javax.mail.Multipart)message.getContent();intpartes=conteudo.getCount();for(inti=0;i<partes;i++){// iterar as partes e extrair os anexosjavax.mail.Partparte=conteudo.getBodyPart(i);if(!parte.ATTACHMENT.equalsIgnoreCase(parte.getDisposition())){continue;// essa parte não é um anexo}StringnomeDoArquivo=parte.getFileName();java.io.Filearquivo=newjava.io.File(nomeDoArquivo);//File arquivo = new File(Caminho, nomeDoArquivo);parte.saveFile(arquivo);// salvando o anexo em disco}
}
S
staroski
Então você está usando uma versão antiga do JavaMail, o método saveFile existe a partir da versão 1.4.
Troque este código:
StringnomeDoArquivo=parte.getFileName();java.io.Filearquivo=newjava.io.File(nomeDoArquivo);parte.saveFile(arquivo);// salvando o anexo em disco
Por este:
StringnomeDoArquivo=parte.getFileName();InputStreamentrada=parte.getInputStream();// esse é o anexo do emailOutputStreamsaida=newFileOutputStream(nomeDoArquivo);// esse é o arquivo em disco// copiar os bytes da entrada para a saidabyte[]bytes=newbyte[8192];// buffer de 8KBfor(intlidos=-1;(lidos=entrada.read(bytes))!=-1;saida.write(bytes,0,lidos)){/* for sem corpo mesmo */}saida.flush();saida.close();
F
FernandUrimtecnologi
deu certo cara, ele so ta dando erro nos anexos que estao com caracter especial assento e etc, eu consigo tratar isso no codigo.
javax.mail.Multipartconteudo=(javax.mail.Multipart)message.getContent();intpartes=conteudo.getCount();for(inti=0;i<partes;i++){// iterar as partes e extrair os anexosjavax.mail.Partparte=conteudo.getBodyPart(i);if(!parte.ATTACHMENT.equalsIgnoreCase(parte.getDisposition())){continue;// essa parte não é um anexo}StringnomeDoArquivo=parte.getFileName();teste=teste+=nomeDoArquivo;InputStreamentrada=parte.getInputStream();// esse é o anexo do emailOutputStreamsaida=newFileOutputStream(teste);// esse é o arquivo em disco // copiar os bytes da entrada para a saidabyte[]bytes=newbyte[8192];// buffer de 8KBfor(intlidos=-1;(lidos=entrada.read(bytes))!=-1;saida.write(bytes,0,lidos)){/* for sem corpo mesmo */}saida.flush();saida.close();}returnVariantPool.get(teste);