Oi pessoal, criei uma classe para envar e-mail no java.
Essa classe possui o seguinte método
[code]public void enviarEmailNovo(String nomeServidorSmtp, String nomeRemetente, String emailRemetente, String senhaRementente) throws Exception
{
System.out.println("inicia html");
email = new HtmlEmail();
System.out.println("SSL");
email.setSSL(true);
System.out.println("TLS");
email.setTLS(true);
System.out.println("porta");
email.setSmtpPort(465);
System.out.println("porta smtp");
email.setHostName(nomeServidorSmtp);
System.out.println("authentication");
email.setAuthentication(emailRemetente, senhaRementente);
System.out.println("set from");
email.setFrom(emailRemetente, nomeRemetente);
}[/code]
Mas quando chamo esse método de outra classe.
quando chega nessa linha
[code]email = new HtmlEmail();[/code]
O sistema para, não dá erro não acontece nada. simplesmente fica parado.
alguém sabe como posso inicializar essa variável?
Onde foi criada a variável email?
dentro da classe onde está o método
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
public class SendMail
{
public HtmlEmail email;
[quote=gustavoa]dentro da classe onde está o método
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
public class SendMail
{
public HtmlEmail email;
[/quote]
Olá amigo tenta esse metodo aqui
public void sendEmail() throws EmailException {
SimpleEmail email = new SimpleEmail();
//Utilize o hostname do seu provedor de email
System.out.println("alterando hostname...");
email.setHostName("smtp.gmail.com");
//Quando a porta utilizada não é a padrão (gmail = 465)
email.setSmtpPort(465);
//Adicione os destinatários
email.addTo("xxx@xxx.com", "Jose");
//Configure o seu email do qual enviará
email.setFrom("seuemail@seuprovedor.com", "Seu nome");
//Adicione um assunto
email.setSubject("Test message");
//Adicione a mensagem do email
email.setMsg("This is a simple test of commons-email");
//Para autenticar no servidor é necessário chamar os dois métodos abaixo
System.out.println("autenticando...");
email.setSSL(true);
email.setAuthentication("username", "senha");
System.out.println("enviando...");
email.send();
System.out.println("Email enviado!");
}
fonte: http://jamacedo.com/2010/02/envio-de-email-de-forma-facil-com-java/
Vc precisa declarar a variável email…
Ex:
HtmlEmail email = new HtmlEmail();
Abraços…
baseado nos dois exemplos
O exemplo HtmlEmail email = new HtmlEmail(); não funciona.
public SendMail() throws Exception {
System.out.println("foi pelo construtor");
//email = new HtmlEmail();
HtmlEmail email = new HtmlEmail();
enviarEmailNovoAtendimento("smtp.gmail.com","teste", "teste2@gmail.com","senha");
enviarMensagemHtml("XXXXXX@yahoo.com.br", 6024);
}
Usando o segundo exemplo
Essa linha não executa, na verdade não consigo fazer o new SimpleMail ser executado
SimpleEmail email = new SimpleEmail();
[code]import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;
import com.sun.org.apache.bcel.internal.generic.NEW;
public class SendMail
{
public static HtmlEmail email;
@SuppressWarnings("deprecation")
public static void enviarEmailNovoAtendimento(String nomeServidorSmtp, String nomeRemetente, String emailRemetente, String senhaRementente) throws Exception
{
System.out.println("inicia html");
email = new HtmlEmail();
System.out.println("SSL");
email.setSSL(true);
System.out.println("TLS");
email.setTLS(true);
System.out.println("porta");
email.setSmtpPort(465);
System.out.println("porta smtp");
email.setHostName(nomeServidorSmtp);
System.out.println("authentication");
email.setAuthentication(emailRemetente, senhaRementente);
System.out.println("set from");
email.setFrom(emailRemetente, nomeRemetente);
}
/*private static void anexarArquivoMensagem(String diretorioAnexo,String nomeArquivo) throws EmailException
{
EmailAttachment anexo = new EmailAttachment();
anexo.setPath(diretorioAnexo + File.separator + nomeArquivo);
anexo.setDisposition(EmailAttachment.ATTACHMENT);
anexo.setName(nomeArquivo);
email.attach(anexo);
}*/
public static void enviarMensagemHtml(String emailDestinatario, Integer codigoAtendimento) throws EmailException
{
email.addTo(emailDestinatario);
email.setSubject("teste" );
email.setMsg("<p>Segue em anexo o arquivo pdf do post sobre API <b>Commons-Email</b> da Apache.</p>");
// email.setHtmlMsg("<p>Segue em anexo o arquivo pdf do post sobre API <b>Commons-Email</b> da Apache.</p>");
email.send();
System.out.println("Email enviado com sucesso!");
}
//SE EU RODAR ESSA CLASSE PELO JAVA APPLICATION
//RODA BELEZA
public static void main(String[] args) throws Exception
{
try
{
System.out.println("foi pelo main");
enviarEmailNovoAtendimento("smtp.gmail.com","teste", "teste@gmail.com","senha");
enviarMensagemHtml("XXXXX@yahoo.com.br", 6024);
//System.out.println("Email enviado com sucesso!");
}
catch (Exception e)
{
System.err.println(e.getMessage());
}
}
//SE EU FOR RECEBER OS PARAMETROS PARA ENVIO DE OUTRA CLASSE
//ESSA CLASSE NÃO CONSEGUE INICIAR O //email = new HtmlEmail();
public SendMail() throws Exception {
System.out.println("foi pelo construtor");
//email = new HtmlEmail();
HtmlEmail email = new HtmlEmail();
enviarEmailNovoAtendimento("smtp.gmail.com","teste", "teste@gmail.com","senha");
enviarMensagemHtml("xxxxxxx@yahoo.com.br", 6024);
}
}[/code]
Amigo, é o seguinte, vc precisa ver o que retorna o new HtmlEmail(), ele cria uma instancia de qual objeto? se for, por exemplo, uma extância de qualquerObjetoDeEmail, então vc deve instanciar um objeto desta instância, por exemplo:
InstânciaRetornadaPeloNewHtmlEmail variável = new HtmlEmail();
Abraços.
Ele fica desta maneira
HtmlEmail variável = new HtmlEmail();
Mas não entendo o que acontece quando chamo de outra classe o método construtor.
não roda.
posta a classe para nós novamente… e posta a classe que esta chamando essa tmb…
Classe que chama é basicamente desta maneira
//chama o construtor
SendMail sm = new SendMail();
E a classe que eu chamo está no post ai pra cima
qual erro ta dando??? posta ele pra gente…
[quote=gustavoa]Classe que chama é basicamente desta maneira
//chama o construtor
SendMail sm = new SendMail();
E a classe que eu chamo está no post ai pra cima[/quote]
Amigo enviei com esse metodo usando a api JAVAMAIL
se vc quer apenas enviar texto puro acho que isso lhe serve
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class ForumGuj
{
public static void main(String[] args) {
Properties props = new Properties();
/** Parâmetros de conexão com servidor Gmail */
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("xxxxxx@gmail.com", "senha");
}
});
/** Ativa Debug para sessão */
session.setDebug(true);
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("douglas.janerson@gmail.com")); //Remetente
Address[] toUser = InternetAddress //Destinatário(s)
.parse("janerson.d.santos@hotmail.com, douglas.janerson@hotmail.com");
message.setRecipients(Message.RecipientType.TO, toUser);
message.setSubject("Enviando email com JavaMail");//Assunto
message.setText("Enviei este email utilizando JavaMail com minha conta GMail!");
/**Método para enviar a mensagem criada*/
Transport.send(message);
System.out.println("Feito!!!");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
Meu caro amigo, a forma que você fez seu código, claro que funciona, mas o meu também funciona desta maneira, pelo main.
Agora eu te peço, tenta fazer uma outra classe disparar esse envio de email usando o construtor.
Provavelmente, irá ocorrer o mesmo erro que o meu.
Vai dar erro aqui
Properties props = new Properties();
Ou aqui
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("xxxxxx@gmail.com", "senha");
}
faça o teste e me diga.
[quote=gustavoa]Meu caro amigo, a forma que você fez seu código, claro que funciona, mas o meu também funciona desta maneira, pelo main.
Agora eu te peço, tenta fazer uma outra classe disparar esse envio de arquivo usando o construtor.
Provavelmente, irá ocorrer o mesmo erro que o meu.
Vai dar erro aqui
Properties props = new Properties();
Ou aqui
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("xxxxxx@gmail.com", "senha");
}
faça o teste e me diga.[/quote]
Vamos lá
classe Email - responsável por enviar
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.apache.commons.mail.EmailException;
class Email{
Email(String envia, String recebe) throws EmailException{
Properties props = new Properties();
/** Parâmetros de conexão com servidor Gmail */
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("seu email", "sua_senha");
}
});
/** Ativa Debug para sessão */
session.setDebug(true);
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(envia)); //Remetente
Address[] toUser = InternetAddress.parse(recebe);
message.setRecipients(Message.RecipientType.TO, toUser);
message.setSubject("Enviando email com JavaMail");//Assunto
message.setText("Enviei este email utilizando JavaMail com minha conta GMail!");
/**Método para enviar a mensagem criada*/
Transport.send(message);
System.out.println("Feito!!!");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
classe com o main
import org.apache.commons.mail.EmailException;
public class ForumGuj
{
public static void main(String[] args) throws EmailException {
Email email = new Email("douglas.janerson@gmail.com","douglas.janerson@hotmail.com");
}
}
Testei aqui e funcionou.
Gostaria de saber como fazer essa chamada, fora do main, dentro de outro método
//NAO USAR ESTE
public static void main(String[] args) throws EmailException {
Email email = new Email("douglas.janerson@gmail.com","douglas.janerson@hotmail.com");
}
//USAR ESTE
public void vaiEnviar() throws EmailException {
Email email = new Email("douglas.janerson@gmail.com","douglas.janerson@hotmail.com");
}