[Resolvido]Enviar email com anexo setado pelo usuário via formulário - Java Web com PrimeFaces

Bom pessoal, estou fazendo testes para minha aplicação utilizando o commons mail, mas pude perceber que dentre suas propriedades, existe uma que seta o caminho de um anexo, mas somente isso, Até o momento não encontrei algo parecido para que o usuário pudesse mandar o anexo via página. Caso alguém tenha algum exemplo de como fazer isso eu agradeceria. Acredito que é um problema para muitos, visto que vasculhei a net e não encontrei nada voltado para o java web com o commons mail implementado de uma forma que o desenvolvedor não só possa utilizar mas também entender e aprender. Agradeço!

Creio que voce deva trabalhar com o stream do arquivo anexado,

1 curtida

Muito obrigado, vou estudar sobre e fazer a implementação do exemplo dado. :relaxed:

Entendi que dessa forma que você me repassou eu necessitaria pegar o dado do banco, correto?.
Mas não teria como implementar uma forma em que o usuário possa fazer o envio deste arquivo pelo form html e ele fosse encaminhado direto para o email ao executar a funlção?

Esse ai foi um exemplo onde o cara pega a stream direto do banco

Você teria que fazer isso assim:
no html voce iria cria um input do type="file"
quando fizer o submit, esse input vai te passar um objeto do tipo File.
atraves desse objeto file voce vai pegar a stream do arquivo e fazer o attached no email.

1 curtida
// get your inputstream from your db
InputStream is = new BufferedInputStream(MyUtils.getBlob());  
DataSource source = new ByteArrayDataSource(is, "application/pdf");

nesta parte do código ele está pegando o file que está em “myutils.getblob()” correto?
implementei, o que foi pedido no html com o input, criei o atributo do tipo file e então adicionei o meu no local do “myutils.getblob()” mas recebo "file cannot be converted to inputStream.

no meu caso, como não utilizarei o dataSource, então utilizaria apenas o “is” e o converteria para datasource ao adicionar o anexo?

Desculpe pela demora,

Veja esses dois tutoriais:
tutorial 1
tutorial 2

Voce precisa do dataSource pois ele é o tipo que o atached aceita.
No caso voce precisa pegar o InputStream do arquivo, no tutorial 2 mostra isso.

Sem problemas,

Vou olhar agora e logo após retorno aqui.

Agradeço novamente.

olhei aqui o tutorial 2 e verifico que ele cria um new File(“src/main/resources/sample.txt”);
mas ele recebe somente String, ainda não entendi como vou passar o parâmetro para ele.
O que eu fiz foi desta forma, mesmo incorreta pois pelo que imaginei e aconteceu ele n consegue converter o valor para datasource

Abaixo segue meu código

Classe de configuração do email
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.ufpa.scontroleportaria.testeEmail;

import java.io.BufferedInputStream;
import java.io.InputStream;
import javax.activation.DataSource;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.Email;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;

/**
 *
 * @author andreismiths
 */
public class EmailUtils {

    private static final String username = "******@gmail.com";
    private static final String password = "******";
    private static final String emailOrigem = "*****@gmail.com";

    public static Email conectaEmail() throws EmailException {
        MultiPartEmail email = new MultiPartEmail();
        email.setDebug(true);
        email.setHostName("smtp.gmail.com");
        email.setSmtpPort(587);
        email.setAuthenticator(new DefaultAuthenticator(username, password));
        email.setFrom(emailOrigem);
        email.getMailSession().getProperties().put("mail.smtp.auth", "true");
        email.getMailSession().getProperties().put("mail.debug", "true");
        email.getMailSession().getProperties().put("mail.smtp.port", "587");
        email.getMailSession().getProperties().put("mail.smtp.socketFactory.port", "587");
        email.getMailSession().getProperties().put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        email.getMailSession().getProperties().put("mail.smtp.socketFactory.fallback", "false");
        email.getMailSession().getProperties().put("mail.smtp.starttls.enable", "true");
        return email;
    }

    public static void enviaEmail(Mensagem mensagem) throws EmailException {
        //adiciona as caracteristicas do email que são repassadas pelo usuário
        MultiPartEmail email = new MultiPartEmail();
        email = (MultiPartEmail) conectaEmail();
        email.setSubject(mensagem.getTitulo());
        email.setMsg(mensagem.getMensagem());
        email.addTo(mensagem.getDestino());

        //cria o anexo para o email junto com suas propriedades
        InputStream is = new BufferedInputStream((InputStream) mensagem.getAnexo());

// add the attachment
        email.attach((DataSource) is, "somefile.pdf", "Description of some file");

        
        //envia o email
        String resposta = email.send();
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                "E-mail enviado com sucesso para: " + mensagem.getDestino(), "Informação"));
    }

    public static String getUsername() {
        return username;
    }

    public static String getPassword() {
        return password;
    }

    public static String getEmailOrigem() {
        return emailOrigem;
    }

}

xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://xmlns.jcp.org/jsf/html"
                xmlns:f="http://xmlns.jcp.org/jsf/core"
                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
                xmlns:p="http://primefaces.org/ui"
                template="/WEB-INF/template/Func_Layout.xhtml">

    <ui:define name="content">
        <h1 class="aw-page-title">Enviar Relatório</h1>

        <p:outputPanel id="outputPanelMail">
            <h:form>
                <p:panel header="Envio de e-mail" style="width: 700px; height: 350px">
                    <p:messages/>
                    <h:panelGrid columns="2">
                        <h:outputText value="Para: "/>
                        <h:inputText value="#{MBindexController.mensagem.destino}" size="66"/>
                        <h:outputText value="Título: "/>
                        <h:inputText value="#{MBindexController.mensagem.titulo}" size="66"/>
                        <h:outputText value="Mensagem: "/>
                        <h:inputTextarea value="#{MBindexController.mensagem.mensagem}" cols="65" rows="12"/>
                        <h:outputText value="Anexo: "/>
                        <p:fileUpload value="#{MBindexController.mensagem.anexo}" mode="simple" skinSimple="true"/>
                        
                    </h:panelGrid>
                    <p:commandButton value="Enviar e-mail" image="ui-icon-mail-closed" action="#{MBindexController.enviaEmail()}" update="outputPanelMail"/>
                    <p:commandButton value="Limpar campos" image="ui-icon-circle-close" action="#{MBindexController.limpaCampos()}" update="outputPanelMail"/>
                </p:panel>
            </h:form>

        </p:outputPanel>

    </ui:define>

</ui:composition>

classe mensagem que contem os atributos

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ufpa.scontroleportaria.testeEmail;

import java.io.File;
import org.primefaces.model.UploadedFile;

/**
 *
 * @author andreismiths
 */
public class Mensagem {

    private String destino;
    private String titulo;
    private String mensagem;
    private UploadedFile anexo;
    private File anexoFile;

    public String getDestino() {
        return destino;
    }

    public void setDestino(String destino) {
        this.destino = destino;
    }

    public String getMensagem() {
        return mensagem;
    }

    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public UploadedFile getAnexo() {
        return anexo;
    }

    public void setAnexo(UploadedFile anexo) {
        this.anexo = anexo;
    }

    public File getAnexoFile() {
        return anexoFile;
    }

    public void setAnexoFile(File anexoFile) {
        this.anexoFile = anexoFile;
    }

    
    
    
}

MB do email

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.apache.commons.mail.EmailException;

/**
 *
 * @author andreismiths
 */
@ManagedBean(name = "MBindexController")
@ViewScoped
public class IndexController {
 private Mensagem mensagem = new Mensagem();
 
 public Mensagem getMensagem() {
 return mensagem;
 }
 public void setMensagem(Mensagem mensagem) {
 this.mensagem = mensagem;
 }
 
 public void enviaEmail() {
 try {
 EmailUtils.enviaEmail(mensagem);
 } catch (EmailException ex) {
 FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro! Occoreu um erro ao enviar a mensagem.", "Erro"));
 Logger.getLogger(IndexController.class.getName()).log(Level.SEVERE, null, ex);
 }
 }
 
 public void limpaCampos() {
 mensagem = new Mensagem();
 }
}

https://www.primefaces.org/docs/api/5.1/org/primefaces/model/UploadedFile.html

De acordo com a documentação o uploadedFile tem um metodo chamado getInputstream().

Entao no seu codigo voce deve fazer:

InputStream is = new BufferedInputStream(mensagem.getAnexo().getInputstream());
DataSource source = new ByteArrayDataSource(is, mensagem.getAnexo().getContentType());
 email.attach(source, mensagem.getAnexo().getFileName() , "Description of some file");
1 curtida

Implementei, e ele pediu para um throws io exception e eu adicionei, mas ao construir ele gera um erro e por consequência não constrói.

segue a imagem onde ele pede e tambem o log de construção

Falha ao executar o objetivo org.apache.maven.plugins: maven-compilador-plugin: 3.1: compilação (compilação padrão) no projeto SControlePortaria: falha de compilação
Com / ufpa / scontroleportaria / testeEmail / IndexController.java: [34,23] exceção não declarada java.io.IOException; Deve ser pego ou declarado a ser jogado
-> [Ajuda 1]

Para ver o rastreamento completo da pilha dos erros, re-execute o Maven com a opção -e.
Re-execute o Maven usando a opção -X para habilitar o log completo de depuração.

Para obter mais informações sobre os erros e possíveis soluções, leia os seguintes artigos:
[Ajuda 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

PS: a imagem está antes de adicionar o IO exception, e o log é depois de adicionado o exception.

Coloca aqui a class depois que você colocou o try catch

ele pede try catch tanto no InputStream quanto no DataSource source, vou ja colocar

segue a class depois de circundar os dois ele pediu p iniciar a variável “is”

    public static void enviaEmail(Mensagem mensagem) throws EmailException {
        try {
            //adiciona as caracteristicas do email que são repassadas pelo usuário
            MultiPartEmail email = new MultiPartEmail();
            email = (MultiPartEmail) conectaEmail();
            email.setSubject(mensagem.getTitulo());
            email.setMsg(mensagem.getMensagem());
            email.addTo(mensagem.getDestino());
            
            //cria o anexo para o email junto com suas propriedades
            InputStream is = null;
            try {
                is = new BufferedInputStream(mensagem.getAnexo().getInputstream());
            } catch (IOException ex) {
                Logger.getLogger(EmailUtils.class.getName()).log(Level.SEVERE, null, ex);
            }
            DataSource source = new ByteArrayDataSource(is, mensagem.getAnexo().getContentType());
            email.attach(source, mensagem.getAnexo().getFileName(), "Description of some file");
            
            //envia o email
            String resposta = email.send();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "E-mail enviado com sucesso para: " + mensagem.getDestino(), "Informação"));
        } catch (IOException ex) {
            Logger.getLogger(EmailUtils.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

após isto ele constrói mas ao executar me gera nullpointer
Log do servidor abaixo

Advertência:   #{MBindexController.enviaEmail()}: java.lang.NullPointerException
javax.faces.FacesException: #{MBindexController.enviaEmail()}: java.lang.NullPointerException
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
	at java.lang.Thread.run(Thread.java:745)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	... 35 more
Caused by: java.lang.NullPointerException
	at com.ufpa.scontroleportaria.testeEmail.EmailUtils.enviaEmail(EmailUtils.java:62)
	at com.ufpa.scontroleportaria.testeEmail.IndexController.enviaEmail(IndexController.java:34)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at javax.el.ELUtil.invokeMethod(ELUtil.java:332)
	at javax.el.BeanELResolver.invoke(BeanELResolver.java:537)
	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
	at com.sun.el.parser.AstValue.invoke(AstValue.java:283)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
	... 36 more

Grave:   javax.faces.el.EvaluationException: java.lang.NullPointerException
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
	at com.ufpa.scontroleportaria.testeEmail.EmailUtils.enviaEmail(EmailUtils.java:62)
	at com.ufpa.scontroleportaria.testeEmail.IndexController.enviaEmail(IndexController.java:34)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at javax.el.ELUtil.invokeMethod(ELUtil.java:332)
	at javax.el.BeanELResolver.invoke(BeanELResolver.java:537)
	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
	at com.sun.el.parser.AstValue.invoke(AstValue.java:283)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
	... 36 more

Voce esta com dois try, um dentro do outro.

fique apenas com o try de fora, e remova o de dentro.

está desta forma agora mas com o mesmo erro nullpointer

public static void enviaEmail(Mensagem mensagem) throws EmailException {
        try {
            //adiciona as caracteristicas do email que são repassadas pelo usuário
            MultiPartEmail email = new MultiPartEmail();
            email = (MultiPartEmail) conectaEmail();
            email.setSubject(mensagem.getTitulo());
            email.setMsg(mensagem.getMensagem());
            email.addTo(mensagem.getDestino());
            
            //cria o anexo para o email junto com suas propriedades
            InputStream is = null;
            
                is = new BufferedInputStream(mensagem.getAnexo().getInputstream());
            
            DataSource source = new ByteArrayDataSource(is, mensagem.getAnexo().getContentType());
            email.attach(source, mensagem.getAnexo().getFileName(), "Description of some file");
            
            //envia o email
            String resposta = email.send();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "E-mail enviado com sucesso para: " + mensagem.getDestino(), "Informação"));
        } catch (IOException ex) {
            Logger.getLogger(EmailUtils.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Oque tem na linha 62?[quote=“AndreiSmith, post:16, topic:350692”]
InputStream is = null;

            is = new BufferedInputStream(mensagem.getAnexo().getInputstream());

[/quote]

Refaça essa linha.

InputStream is = new BufferedInputStream(mensagem.getAnexo().getInputstream());

mesmo erro, o problema está neste InputStream.

Advertência:   #{MBindexController.enviaEmail()}: java.lang.NullPointerException
javax.faces.FacesException: #{MBindexController.enviaEmail()}: java.lang.NullPointerException
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
	at java.lang.Thread.run(Thread.java:745)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	... 35 more
Caused by: java.lang.NullPointerException
	at com.ufpa.scontroleportaria.testeEmail.EmailUtils.enviaEmail(EmailUtils.java:60)
	at com.ufpa.scontroleportaria.testeEmail.IndexController.enviaEmail(IndexController.java:34)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at javax.el.ELUtil.invokeMethod(ELUtil.java:332)
	at javax.el.BeanELResolver.invoke(BeanELResolver.java:537)
	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
	at com.sun.el.parser.AstValue.invoke(AstValue.java:283)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
	... 36 more

Grave:   javax.faces.el.EvaluationException: java.lang.NullPointerException
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
	at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
	at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
	at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
	at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
	at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
	at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
	at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
	at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
	at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
	at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
	at com.ufpa.scontroleportaria.testeEmail.EmailUtils.enviaEmail(EmailUtils.java:60)
	at com.ufpa.scontroleportaria.testeEmail.IndexController.enviaEmail(IndexController.java:34)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at javax.el.ELUtil.invokeMethod(ELUtil.java:332)
	at javax.el.BeanELResolver.invoke(BeanELResolver.java:537)
	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
	at com.sun.el.parser.AstValue.invoke(AstValue.java:283)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
	... 36 more

Faça um debug e veja oque esta null, pelo visto eh o arquivo.

testei diversos arquivos, no debug ao clicar para enviar recebi esta mensagem.
não estou entendendo que campo password é esse.

Anexando a localhost:9009
Executando programa do usuário
Não foi possível submeter o ponto de interrupção FieldBreakpoint com.ufpa.scontroleportaria.testeEmail.EmailUtils.PASSWORD, motivo: O campo 'PASSWORD' não existe na classe com.ufpa.scontroleportaria.testeEmail.EmailUtils.