[Resolvido] Por que não consigo enviar anexo por e-mail?

Se eu tentar com arquivo txt vai porém se eu tento com outro arquivo mais nao vai.

import java.util.Date;
import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.MultiPartEmail;



public class EnviarEmail {
    
    Configuracoes c = new Configuracoes();
    Date data = new Date();
    
    
    public void enviar(){
            MultiPartEmail email = new MultiPartEmail();
            email.setHostName("smtp.gmail.com");
            email.setSslSmtpPort("465");
            email.setStartTLSRequired(true);
            email.setStartTLSEnabled(true);
            email.setSSLOnConnect(true);
            c.readFile();
            

            email.setAuthenticator(new DefaultAuthenticator("backup*****@gmail.com","****"));
            try {
                    email.setFrom("backup.mails.java@gmail.com");
                    email.setSubject(c.getTitulo());
                    email.addTo(c.getDestinatario());
                    email.setMsg("Teste");
                    
                    
                    //anexando
                    EmailAttachment attachment = new EmailAttachment();
                    attachment.setPath(c.getCaminho());
                    attachment.setDescription(EmailAttachment.ATTACHMENT);
                    attachment.setDescription("Arquivo 7z");
                    attachment.setName("backup " + data.getDate());
                    
                    email.attach(attachment);
                    email.send();
                    
        } catch (Exception e) {
            e.printStackTrace();
        }
            
    }
    
}

o Erro:

org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:465

Bom dia João, seja bem vindo ao fórum! Cara, eu uso o JavaMail, demorei um século pra conseguir fazer funcionar com qualquer anexo! Exemplo funcional:

usuario e remetente precisam ser o mesmo email.
nomeRemetente é o nome da sua empresa ou o seu nome.
imagem é o caminho do arquivo que você vai jogar para o anexo. Você pode colocar qualquer arquivo, como eu uso uma imagem, acabei colocando o nome da String de imagem.

Se quiser que ver todo o processo de envio, e bla bla bla, seta o sessionDebug como true

public void envioAnexo(String nomeRemetente, String assunto, String mensagem, String destinatario, String imagem) {
        try {
            ModeloEmail me = new ModeloEmail();
            String host = "smtp.gmail.com";
            String usuario = "email@gmail.com";
            String senha = "senha";
            String remetente = "email@gmail.com";
            me.setAssunto(assunto);
            me.setMensagem(mensagem);
            boolean sessionDebug = false;

            Properties props = System.getProperties();

            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.port", "587");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.starttls.required", "true");
            props.put("mail.smtp.ssl.trust", "smtp.gmail.com");

            java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
            Session mailSession = Session.getDefaultInstance(props, null);
            mailSession.setDebug(sessionDebug);
            Message msg = new MimeMessage(mailSession);
            msg.setFrom(new InternetAddress(remetente, nomeRemetente));
            msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(destinatario));
            msg.setSubject(assunto);
            msg.setSentDate(new Date());

            // cria a primeira parte da mensagem
            MimeBodyPart mbp1 = new MimeBodyPart();
            mbp1.setContent(mensagem, "text/html;charset=UTF-8");

            // cria a segunda parte da mensage
            MimeBodyPart mbp2 = new MimeBodyPart();

            // anexa o arquivo na mensagem
            FileDataSource fds = new FileDataSource(imagem);
            mbp2.setDataHandler(new DataHandler(fds));
            mbp2.setFileName(fds.getName());

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

            // adiciona a Multipart na mensagem
            msg.setContent(mp);

            // configura a data: cabecalho
            msg.setSentDate(new Date());

            // envia a mensagem
            Transport transport = mailSession.getTransport("smtp");
            transport.connect(host, usuario, senha);
            transport.sendMessage(msg, msg.getAllRecipients());
            transport.close();
            System.out.println("Enviado com Sucesso");
        } catch (MessagingException ex) {
            ex.printStackTrace();
        } catch (UnsupportedEncodingException ex) {
            ex.printStackTrace();
        }
    }

Deu certo Muito Obrigado.

Renomeei o conteúdo dos arquivos para “.remova” também dentro do zip para burlar o bloqueio. Mas seu método foi o unico q deu certo.

1 curtida