Qual função desse codigo

7 respostas
java
F

Gostaria de uma ajuda. Qual a função desse codigo? Consigo usar um get para buscar o anexo do email?

Obrigado pela atenção.

protected final Variant ebfEmailGetMessageFileName(Variant messageVar) throws Exception {
	Object messageObj = messageVar.getObject();
	
	if (!(messageObj instanceof javax.mail.Message)) {
		return Variant.VARIANT_NULL;
	}
	
	javax.mail.Message message = (javax.mail.Message) messageObj;
	String filename = message.getContentType();
	return VariantPool.get(filename);
}

7 Respostas

S

Já viu a resposta ao seu post anterior?

F

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

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

}

}
S

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

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
}

}

S

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();
F

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  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);

}

Criado 30 de maio de 2018
Ultima resposta 1 de jun. de 2018
Respostas 7
Participantes 2