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.
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.
protected final Variant urimsalvarAnexoemail(Variant mensagem, Variant Caminho) throws Exception {
String tipoDeConteudo = mensagem.getContentType();
if (!tipoDeConteudo.contains(“multipart”)) {
return; // não há anexos
}
Multipart conteudo = (Multipart) mensagem.getContent();
int partes = conteudo.getCount();
for (int i = 0; i < partes; i++) { // iterar as partes e extrair os anexos
MimeBodyPart parte = (MimeBodyPart) conteudo.getBodyPart(i);
if (!Part.ATTACHMENT.equalsIgnoreCase(parte.getDisposition())) {
continue; // essa parte não é um anexo
}
String nomeDoArquivo = parte.getFileName();
File arquivo = new File(Caminho, nomeDoArquivo);
parte.saveFile(arquivo); // salvando o anexo em disco
}
}
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?
esta dando erro somente na parte salvar arquivo: error: cannot find symbol
parte.saveFile(arquivo); // salvando o anexo em disco
protected final Variant urimsalvarAnexoemail(Variant messageVar, Variant Caminho) throws Exception {
// Verifica se a mensagem passada como parâmetro é um objeto Message
Object messageObj = messageVar.getObject();
if (!(messageObj instanceof javax.mail.Message)) {
return Variant.VARIANT_NULL;
}
javax.mail.Message message = (javax.mail.Message) messageObj;
String tipoDeConteudo = message.getContentType();
if (!tipoDeConteudo.contains("multipart")) {
return Variant.VARIANT_NULL; // não há anexos
}
javax.mail.Multipart conteudo = (javax.mail.Multipart) message.getContent();
int partes = conteudo.getCount();
for (int i = 0; i < partes; i++) { // iterar as partes e extrair os anexos
javax.mail.Part parte = conteudo.getBodyPart(i);
if (!parte.ATTACHMENT.equalsIgnoreCase(parte.getDisposition())) {
continue; // essa parte não é um anexo
}
String nomeDoArquivo = parte.getFileName();
java.io.File arquivo = new java.io.File(nomeDoArquivo);
//File arquivo = new File(Caminho, nomeDoArquivo);
parte.saveFile(arquivo); // salvando o anexo em disco
}
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:
String nomeDoArquivo = parte.getFileName();
java.io.File arquivo = new java.io.File(nomeDoArquivo);
parte.saveFile(arquivo); // salvando o anexo em disco
Por este:
String nomeDoArquivo = parte.getFileName();
InputStream entrada = parte.getInputStream(); // esse é o anexo do email
OutputStream saida = new FileOutputStream(nomeDoArquivo); // esse é o arquivo em disco
// copiar os bytes da entrada para a saida
byte[] bytes = new byte[8192]; // buffer de 8KB
for (int lidos = -1; (lidos = entrada.read(bytes)) != -1; saida.write(bytes, 0, lidos)) { /* for sem corpo mesmo */ }
saida.flush();
saida.close();
deu certo cara, ele so ta dando erro nos anexos que estao com caracter especial assento e etc, eu consigo tratar isso no codigo.
protected final Variant urimsalvarAnexoemail( Variant messageVar, Variant Caminho) throws Exception {
String teste = Caminho.getString();
// Verifica se a mensagem passada como parâmetro é um objeto Message
Object messageObj = messageVar.getObject();
if (!(messageObj instanceof javax.mail.Message)) {
return Variant.VARIANT_NULL;
}
javax.mail.Message message = (javax.mail.Message) messageObj;
String tipoDeConteudo = message.getContentType();
if (!tipoDeConteudo.contains(“multipart”)) {
return Variant.VARIANT_NULL; // não há anexos
}
javax.mail.Multipart conteudo = (javax.mail.Multipart) message.getContent();
int partes = conteudo.getCount();
for (int i = 0; i < partes; i++) { // iterar as partes e extrair os anexos
javax.mail.Part parte = conteudo.getBodyPart(i);
if (!parte.ATTACHMENT.equalsIgnoreCase(parte.getDisposition())) {
continue; // essa parte não é um anexo
}
String nomeDoArquivo = parte.getFileName();
teste = teste += nomeDoArquivo;
InputStream entrada = parte.getInputStream(); // esse é o anexo do email
OutputStream saida = new FileOutputStream(teste); // esse é o arquivo em disco
// copiar os bytes da entrada para a saida
byte[] bytes = new byte[8192]; // buffer de 8KB
for (int lidos = -1; (lidos = entrada.read(bytes)) != -1; saida.write(bytes, 0, lidos)) { /* for sem corpo mesmo */ }
saida.flush();
saida.close();
}
return VariantPool.get(teste);