Não estou conseguindo instanciar a classe SendMail

6 respostas
mirrah

Bom gente, não estou conseguindo instanciar a uma classe chamada SendMail, sendo que o código dela eu peguei aqui mesmo no fórum.

Aqui está o servlet que estou tentando instanciar a SendMAil nele:

package controller;

import model.SendMail;
import model.dao.AlunoDAO;
import model.dao.FuncionarioDAO;
import model.dao.ProfessorDAO;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JOptionPane;
import org.apache.commons.lang.RandomStringUtils;

public class RegistroServlet extends HttpServlet {

    /*vei enviar um email de confirmação de inscrição,
     para a pessoa que acabou de efetuar o registro*/
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {

            //recupera dos dados do primeiro registro
            String email = request.getParameter("email");
            String matricula = request.getParameter("matricula");
            
            //gera a senha aleatória
            String alePWD = RandomStringUtils.randomAlphanumeric(6);
            
            String matricula1 = matricula.substring(0,3);
            
            if ( matricula1.equals( "PRO" ) )
            {
                ProfessorDAO.inserirRegistro(matricula, email, alePWD);
                
                JOptionPane.showMessageDialog(null, "Cadastro efetuado com sucesso! "
                    + "Verifique o email para completar o seu cadastro");
            
            response.sendRedirect("index.jsp");
            
            }
            else if ( matricula1.equals( "ALU" ) )
            {
                //faz o primeiro registro
                AlunoDAO.inserirRegistro(matricula, email, alePWD);
                
                SendMail sm = new SendMail();
                
                //envia o email
                //SendMail sm = new SendMail();
                //sm.sendMail("[email removido]", email, "Registro efetuado com sucesso", "sua senha aleatória é:"+ alePWD);
                
                JOptionPane.showMessageDialog(null, "Cadastro efetuado com sucesso! "
                    + "Verifique o email para completar o seu cadastro");
            
            response.sendRedirect("index.jsp");
            
            }    
            else if ( matricula1.equals( "FUN" ) )
            {
                FuncionarioDAO.inserirRegistro(matricula, email, alePWD);
                
                JOptionPane.showMessageDialog(null, "Cadastro efetuado com sucesso! "
                    + "Verifique o email para completar o seu cadastro");
            
            response.sendRedirect("index.jsp");
            }
            else{
                JOptionPane.showMessageDialog(null, "Insira uma matrícula válida. Consulte a sua secretaria para obte-la.");
                
                response.sendRedirect("index.jsp");
            }
            
            //SendMail sm = new SendMail();
            /*sm.sendMail("[email removido]", "[email removido]", "Complete o seu cadastro", 
                    "Email cadastrado com sucesso<br>"
                    + "Complete o seu cadastro por favor");*/
            
        } finally { 
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    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
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
    
}
e aqui vai a classe SendMail:
package model;

import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendMail {

    private String mailSMTPServer;
    private String mailSMTPServerPort;

    /*quando instanciar um objeto já será atribuido o servidor SMTP do GAMIL
     e a porta usada por ele
     */
    
    SendMail()
    {//Para o GMAIL
        mailSMTPServer = "smtp.gmail.com";
        mailSMTPServerPort = "465";
    }
    
    /*
     caso queira mudar o servidor e a porta, só enviar para o construtor
     * os valores cmo string
     */
    SendMail(String mailSMTPServer, String mailSMTPServerPort)
    {
        this.mailSMTPServer = mailSMTPServer;
        this.mailSMTPServerPort = mailSMTPServerPort;
    }

    public void sendMail(String from, String to, String subject, String message)
    {
        Properties props = new Properties();

        //proxy
        props.setProperty("proxySet","true");
        props.setProperty("socksProxyHost", "192.168.155.1");
        props.setProperty("socksProxyPort", "1080");

        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", mailSMTPServer);
        props.put("mai.smtp.auth", "true");
        props.put("mail.smtp.user", from);
        props.put("mail.debug", "true");
        props.put("mail.smtp.port", mailSMTPServerPort);
        props.put("mail.smtp.socketFactory.port", mailSMTPServerPort);
        props.put("mail.smtp.socketFactory.class",
                "javax.net.ssl.SSLSocketFactory");

        SimpleAuth auth = null;
        auth = new SimpleAuth("[email removido]","sistemaFIRJAN");

        Session session = Session.getDefaultInstance(props, auth);
        session.setDebug(true);

        Message msg = new MimeMessage(session);

        try
        {
            msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
            msg.setFrom(new InternetAddress(from));
            msg.setSubject(subject);
            msg.setContent(message, "text/html");

        }catch (Exception e)
        {
            System.out.println(">> Erro: Completar Mensagem");
            e.printStackTrace();
        }

        Transport tr;
        try
        {
            tr = session.getTransport("smtp");
            tr.connect(mailSMTPServer, "[email removido]","sistemaFIRJAN");
            msg.saveChanges();
            tr.sendMessage(msg, msg.getAllRecipients());
            tr.close();
        }catch( Exception e )
        {
            System.out.println( ">> Erro: Completar Mensagem" );
            e.printStackTrace();
        }


    }

}
Será que alguém do fórum poderia me dar uma mão d

PS: A API javamail está devidamente importada no projeto

PS: Tanto a classe SendMail quanto uma outr classe que a SendMail faz "referência", estão digitadas corretamente.

braços a todos!

6 Respostas

mateuscs

Amigo

Tem como postar o erro de exception, ou o problema que está gerando.
As classes postadas no forum são somente para entendimento de lógica, vc nao deve copiar e colar.

mirrah

Acho que eu não foi claro, foi mal, quando eu tento instanciar a classe SendMail no servlet RegistroServlet, o netbeans fica acusando um erro. Ele diz que não pode achar o construtor dessa classe e me dá a opção de criar um, só que esta classe(SendMail), já tem esse construtor.

mateuscs

Acho que você esta instaciando a classe erroniamente.

//faz o primeiro registro  
                AlunoDAO.inserirRegistro(matricula, email, alePWD);  
                  
                SendMail sm = new SendMail();  
                  
                //envia o email  
                //SendMail sm = new SendMail();  
                //sm.sendMail("[email removido]", email, "Registro efetuado com sucesso", "sua senha aleatória é:"+ alePWD);  
                  
                JOptionPane.showMessageDialog(null, "Cadastro efetuado com sucesso! "  
                    + "Verifique o email para completar o seu cadastro");

Ela esta dentro de sua função, experimente colocar ela fora da função, e fazer uma classe publica, essa classe deve permanecer dentro de sua classe Registro, incorpore somente a função com seus derivados.
Se quiser posso colocar um exemplo para você.

mirrah

cara, desculpe a minha extrema ignorancia, mas não estou conseguindo ver a diferença. rsrsrsrs

mateuscs

Para ficar claro vou postar meu exemplo....

public main(Strings[] args){									
				emailSimples();			
		}

		private SimpleEmail emailSimples(){			
										
					this.assuntoEmail = "Assunto";
					eviarEmail(getEmailDestinatario(), getNomeDestinatario(),
								getEmailRemetente(), getNomeRemetente(), assuntoEmail,
								mensagemEmail);				

					
		}

private void enviarEmail(String emailDest, String nomeDest,
				String emailRemet, String nomeRemet, String assunto, String corpo)
				throws Exception{
			
			Authenticator auth = new Authenticator() {
				@Override
				public PasswordAuthentication getPasswordAuthentication() {
						return new PasswordAuthentication(
								getUserMail(), getUserPassword());
					}			
			};

			Session session = Session.getInstance(Properties.Seu auth);
                        //Coloque em session seu properties ou sua configuração de servidor.

			MimeMessage message = new MimeMessage(session);
			message.setFrom(new InternetAddress(emailRemet, nomeRemet));
			message.addRecipient(Message.RecipientType.TO, new InternetAddress(emailDest, nomeDest));
			message.setSubject(assunto);
			message.setContent(corpo, "text/plain");
			
			Transport.send(message);
			
		}

O que faço então, utilizo em main, um metodo simpleemail, de envio de email simples(sem anexo),
com o metodo enviarEmail, um metodo void que pega todas informações de servidor e autenticação, adicionar e dar um transport.send

Nessa classe utilizei a bibilioteca javax.mail.

mateuscs
Crie uma classe para pegar seu properties.
public class PropertiesSeu{

	private static Properties config = new Properties();
	private static InputStream configFile = null;

	static {
		configFile = PropertiesSeu.class.getResourceAsStream("/configs.properties");
//Quando o arquivo esta dentro do seu projeto/package(pacote)
		try {
			config.load(configFile);
			configFile.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	public static Properties getPropertiesSeu() throws IOException{
		
		return config;
		
	}
}

Exemplo de arquivo properties para email:

#Configurações de servidor Email SMTP
#Host#
mail.smtp.host=smtp.gmail.com.br
#Autenticação#
mail.smtp.auth=false
#Porta para envio de email
mail.smtp.port=465
#SSL#
mail.smtp.starttls.enable=true
#Remetente#
remetente=[email removido]
#Nome específicado do Remetente#
nomeRemetente=NomeRemetente
#Senha para autenticação no servidor#
passwordUserMail=
#Destinátario#
destinatario=[email removido]
#Nome específicado do Destinátario#
nomeDestinatario=Destino

#------------------------------------#
Criado 12 de julho de 2011
Ultima resposta 12 de jul. de 2011
Respostas 6
Participantes 2