1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

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

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags email vraptor java jsp ou faça a sua própria pergunta.