Enviando mensagem para email por Servlet

2 respostas
farzac

Ola amigos

Ja faz algum tempo que estou tentando enviar mensagem para meu email atraves de servlet, porem nao consigo.

Com o codigo abaixo eu consigo enviar a mensagem para o email, porem o codigo é desktop.

package email;

import org.apache.commons.mail.EmailException;   
import org.apache.commons.mail.SimpleEmail;   
  
public class Email
{
    public static void main(String[] args) 
    {
        SimpleEmail email = new SimpleEmail();   
  
        try 
        {
            email.setDebug(true);   
            email.setHostName("smtp.gmail.com");   
            email.setAuthentication("pedrorbz","123456");   
            email.setSSL(true);   
            email.addTo("[email removido]"); 
            email.setFrom("[email removido]"); 
            email.setSubject("Teste Email");   
            email.setMsg("testando..........");   
            email.send();   
        } catch (EmailException e) 
        {
            System.out.println(e.getMessage());   
        }   
    }   
}

Com o codigo acima eu consigo enviar o email com a mensagem, porem quando utilizo o codigo abaixo, utilizando servlet, nao é enviado o email.
Acredito que seja alguma configuracao que preciso fazer no glassfish.

O codigo da servlet segue abaixo, espero que alguem tenha curiosidade de testar e possa descobir o que falta.

Desde ja , muito obrigado a todos.

import java.io.*;   
import java.net.*;   
import java.util.logging.Level;   
import java.util.logging.Logger;   
import javax.servlet.*;   
import javax.servlet.http.*;   
import org.apache.commons.mail.*;   
  
/**  
*  
*/   
public class Email extends HttpServlet {   
     
    /**  
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.  
    * @param request servlet request  
    * @param response servlet response  
    */   
       
       
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)   
    throws ServletException, IOException ,MalformedURLException   
    {   
        response.setContentType("text/html;charset=UTF-8");   
        PrintWriter out = response.getWriter();   
        try   
        {   
            SimpleEmail email = new SimpleEmail();   
            email.setDebug(true);   
            email.setHostName("smtp.gmail.com");   
            email.setAuthentication("pedrorbz", "123456");   
            email.setSSL(true);   
            email.addTo("[email removido]");   
            email.setSubject("teste email");   
            email.setMsg("testando..........");   
            email.send();   
               
        }   
        catch (EmailException ex) {   
            Logger.getLogger(ServiceLoginAuth.class.getName()).log(Level.SEVERE, null, ex.getStackTrace()+ex.getMessage());   
        } finally {   
            out.close();   
        }   
    }   
  
    // <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">   
    /**  
    * Handles the HTTP <code>GET</code> method.  
    * @param request servlet request  
    * @param response servlet response  
    */   
    protected void doGet(HttpServletRequest request, HttpServletResponse response)   
    throws ServletException, IOException {   
        processRequest(request, response);   
    }   
  
    /**  
    * Handles the HTTP <code>POST</code> method.  
    * @param request servlet request  
    * @param response servlet response  
    */   
    protected void doPost(HttpServletRequest request, HttpServletResponse response)   
    throws ServletException, IOException {   
        processRequest(request, response);   
    }   
  
    /**  
    * Returns a short description of the servlet.  
    */   
    public String getServletInfo() {   
        return "Short description";   
    }   
    // </editor-fold>   
}

2 Respostas

maquiavelbona

http://www.guj.com.br/posts/list/60158.java
http://www.guj.com.br/posts/list/26045.java

Dica: Não é colocando o mesmo tópico em todos os fóruns que sua dúvida vai ser resolvida mais rápido, só vai fazer você ficar com fama de spammer.

Até!

marcelotrajano

Cara aqui eu usei duas libs: Activation.jar e mail.jar...

Segue as classes:

package exemplo;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;


public class Autenticacao extends Authenticator{
	private String userName;
	private String password;
	
	public Autenticacao(String userName, String password) {
		this.userName = userName;
		this.password = password;
	}
	
	public PasswordAuthentication getPasswordAuthentication() {
	      return new PasswordAuthentication(userName, password);
	   }
}
package exemplo;

import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;


public class EnvioEmail {
	
	public EnvioEmail() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public void enviaEmail(String data, String email, String receptor) throws UnsupportedEncodingException, MessagingException { 
		
		Properties p = new Properties();
		Authenticator auth = new Autenticacao("[email removido]", "123456");
		p.put("mail.smtp.auth", "true");
		p.put("mail.smtp.host", "10.30.20.10");
		p.put("mail.smtp.port", "25");
		
		Session mailsession = Session.getDefaultInstance(p, auth);
 		
 		MimeMessage msg = new MimeMessage(mailsession);
 	
 		msg.setFrom (new InternetAddress ("[email removido]", "CPD - Opinião")); 
		msg.addRecipient(Message.RecipientType.TO, new InternetAddress (email, receptor)); 
		msg.setSubject ("Confirmação do cadastro de opinião - "+data);
		 
		Multipart multipart = new MimeMultipart(); 
 
		MimeBodyPart messageBodyPart = new MimeBodyPart(); 
		
		messageBodyPart.setText("A sua opinião sobre os serviços oferecidos pelo CPD durante sua " +
				"passagem na instituição foi registrada em nosso Sistema de Gestão da Qualidade.\n" +
				"Obrigado por avaliar os nossos serviços." +
				"\n" +
				"\n" +
				"Escritório do CPD\n" +
				"CPD\n" +
				"CPD"); 
				
 
		multipart.addBodyPart(messageBodyPart);
		 
		msg.setContent(multipart);
 
		mailsession.setDebug(false); 
		
		Transport.send(msg); 

	}
}

E no servlet chama assim:

if(!email.equals("") && !alteracao){
				new EnvioEmail().enviaEmail(Conversao.dateToString(Conversao.getDataAtual()), email, receptor);
}

Nesse exemplo uma mensagem é enviada automaticamente o um cadastro de opiniao é cadastrada na minha Action...o principio é o mesmo basta vc fazer algumas alterações...

Criado 8 de fevereiro de 2009
Ultima resposta 9 de fev. de 2009
Respostas 2
Participantes 3