Versão atual:

enviar email com anexo

Boa noite. Tenho uma aplicação web usando VRaptor. Preciso enviar e-mail e através de um formulário, preenchendo: destinatário, assunto e mensagem funciona.

O problema é que preciso enviar anexo.

Aí acrescentei o campo para anexo no meu formulário e acrescentei a lógica para adicionar o anexo.

Ao enviar dá erro de: java.lang.IllegalArgumentException: argument type mismatch

Já alterei o tipo tipo de String anexo1 para File anexo1 e a mensagem é a mesma.

Vou postar parte do código do formulário e do método que envia de meu Controller

Formulário:

<form class="grid-form" name="formEmail"  id="formEmail" action="" method="post" enctype="multipart/form-data">

<label>Assunto</label>
<input type="text" id="assunto" name="assunto" value="">

<label>Para</label>
<input type="text" id="destinatario" name="destinatario" value="">

<label>Mensagem</label>
<textarea  id="corpo" name="corpo"></textarea>

<label>Anexo 1</label>
<input type="file" id="anexo1" name="anexo1">

</form>

Aqui meu método que envia o e-mail, onde passo assunto, destinatario, corpo e anexo1

Lembrando que só passou a dar erro quando implementei o envio de anexo.

public void enviarPropostaPorEmail(String assunto, String destinatario, String corpo, String anexo1) throws MessagingException {
        final String remetente = "xxxx@yyyy.com.br";
        final String user = "usuario@yyyy.com.br";
        final String pass = "senha";

        Properties props = new Properties();
        /**
         * Parâmetros de conexão com servidor SMTP
         */
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "false");
        props.put("mail.smtp.host", "smtp.yyyy.com.br");
        props.put("mail.smtp.port", "587");

        Session session = Session.getDefaultInstance(props,
                new javax.mail.Authenticator() {
                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(user, pass);
                    }
                });

        /**
         * Ativa Debug para sessão
         */
        session.setDebug(true);

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(remetente)); //Remetente

            Address[] toUser = InternetAddress
                    .parse(destinatario);//Destinatário(s)
            message.setRecipients(Message.RecipientType.TO, toUser);                   

            message.setSubject(assunto);//Assunto

            // cria a primeira parte da mensagem
            MimeBodyPart mbp1 = new MimeBodyPart();
            mbp1.setText(corpo);

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

            // anexa o arquivo na mensagem
            FileDataSource fds = new FileDataSource(anexo1);
            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
            message.setContent(mp);

            /**
             * Método para enviar a mensagem criada
             */
            Transport.send(message);

            System.out.println("Feito!!!");

        } catch (MessagingException e) {

            throw new RuntimeException(e);

        }
        result.include("retorno", retorno);
        result.redirectTo(this).lista();
    }

Por favor, poderiam me ajudar?

Aguardarei respostas. Tks

Ainda não resolvi a questão.

Pelo que pude entender, eu preciso passar o caminho do anexo, exemplo: c:/teste.txt

O problema, é que meu formulário, não "pega" esse caminho, pois ele apenas envia o nome do arquivo.

Pela dica, eu teria que fazer um upload do arquivo e isso não estou sabendo fazer.

Poderiam me ajudar, por favor.

Att gtalkSP

Versões(2):

Ver a versão formatada

enviar email com anexo

Comentário

new question