• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

TaoOo

Envio de mails

42 mensagens neste tópico

boa noite,

tenho necessidade de criar um programa que envie e-mails para uma determinada lista num determinado dia ( tipo uma lembrança ).

o problema é que não faço ideia que classes podem ser utilizadas/necessárias para o envios de e-mails.

se alguem souber gostaria que me dessem umas "luzes" acerca de como funcionam estas ...

obrigado

TaoOo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Puro e duro. Mails simples usando as libs da sun que vem com o JDK.

            // Substituir o IP pelo IP do servidor SMTP
            SmtpClient smtpClient = new SmtpClient("192.168.0.1");
            smtpClient.from("origemxpto@xpto.com");
            smtpClient.to("destinoxpto@xpto.com");
    PrintStream message = smtpClient.startMessage();
            message.println("To: destinoxpto@xpto.com");
            message.println("Subject:  A friendly mail message");
            message.println();
            message.println("Hello mail messages world!");
            message.println();
            message.println();
            smtpClient.closeServer();

PS: Fiz uma ou duas correccoes de pormenor ao post inicial

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

neste código nao preciso de fazer import de nada ?

Em principio é, não sei de côr nem tenho aqui a API Java à mão mas deve ser preciso importar as bibliotecas de sockets. Digo eu...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hum.. ok muito obrigado, vou analizar isso kd tiver tempo e fazer uns testes, depois digo kk coisa..

ja agora, o ip do servidor é o ip do meu pc k está a fazer de servidor ou é o ip tipo do gmail, hotmail, etc ??

se for este ultimo caso como posso saber kual é o seu ip ?

tks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja agora, o ip do servidor é o ip do meu pc k está a fazer de servidor ou é o ip tipo do gmail, hotmail, etc ??

se for este ultimo caso como posso saber kual é o seu ip ?

tks

Depende do servidor que queiras testar. Se quizeres testar com o servidor local metes 127.0.0.1, se quizeres com outro servidor da internet metes o IP dele.

Podes saber o IP através da resolução de nomes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao percebi essa parte de saber o ip pela resolucao de nomes :| n faço ideia  o k isso seja :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao percebi essa parte de saber o ip pela resolucao de nomes :| n faço ideia  o k isso seja :S

Vais à consola ou à linha de comandos e escreves: nslookup "nome do endereço que queres saber o IP"

Ex: nslookup mail.google.com

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em vez de se escrever o IP pode-se escrever o nome (DNS) do servidor, é indiferente.

Hotmail e Gmail não têm servidores SMTP, mas normalmente os ISPs têm.

Não faço ideia dos imports porque o meu IDE gere isso tudo, so tive em atençao se pertenciam a alguma lib/framework macaca... :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hotmail e Gmail não têm servidores SMTP, mas normalmente os ISPs têm.

Estás enganado, pelo menos o Gmail tem. Sei disso porque uns colegas meus o ano passado tiveram de fazer um cliente de email em C e etstaram com o servidor de email do Gmail.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao percebi essa parte de saber o ip pela resolucao de nomes :| n faço ideia  o k isso seja :S

Vais à consola ou à linha de comandos e escreves: nslookup "nome do endereço que queres saber o IP"

Ex: nslookup mail.google.com

Fiz isso e deu-me

Non-authoritative answer:

mail.google.com canonical name = googlemail.l.google.com.

Name:  googlemail.l.google.com

Address: 64.233.185.83

Name:  googlemail.l.google.com

Address: 64.233.185.19

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se queres usar o Gmail é mais fácil usares o nome, assim não tens de te preocupar. Coloca apenas o servidor de smtp que está indicado na página de configuração do google.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:P nao consigo meter o codigo a funcionar.. tenho o seguinte:

import java.io.PrintStream; 
import sun.net.smtp.SmtpClient; 
import java.util.*;

public class SendEmail
{ 

public static String mailServer = "smtp.gmail.com"; 


	public static void main(String[] args)
	{
		Scanner s = new Scanner(System.in);
		String dest, rem, subj, msg;


		rem="...@gmail.com";
		dest="...@hotmail.com";

		System.out.println("Remetente: "+rem);
		System.out.println("Destinatário: "+dest); 
		System.out.print("Assunto: "); subj=s.next();
		System.out.println();
		System.out.println("Mensagem: ");msg=s.next();


		try 
		{ 
			SmtpClient smtpclient = new SmtpClient(mailServer); 
			smtpclient.from(dest); 
			smtpclient.to(rem); 
			PrintStream printstream = smtpclient.startMessage(); 
			printstream.println("To: " + dest); 
			printstream.println("Subject: " + subj + "\n"); 
			printstream.println(msg); 
			smtpclient.closeServer(); 

			System.out.println("ENVIADO COM SUCESSO");
		} 
		catch(Exception e) 
		{ 
			System.out.println("FALHA AO ENVIAR!"); 
		} 		

	}

}  

falha aqui "smtpclient.from(dest); " .. nao consigo encontrar a classe smtpclient na API ...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não creio que essa classe faça parte da API.

Podes sacar o JavaMail, que é uma API opcional para trabalhar com escrita de mensagens http://java.sun.com/products/javamail/downloads/index.html, e que inclui classes para enviar mails por smtp, tens o problema de ser implementação da sun e não parte do Java.

Ou podes usar a classe que tenho em anexo.

EDIT: Altera a extensão do ficheiro para ".java" eu coloquei como ".zip" para enganar o SMF que não me estava a deixar colocar ficheiros com extensão ".java". É apenas uma classe não é um zip!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigado, nao sabia isso do JavaMail... vou testar kd voltar a casa.. tks

onde e como instalo o javaMail ?

o .java k meteste em anexo fikou ilegivel, ou seja, fikou todo em 2 linhas de codigo, o k nao dá geito nenhum para analisar (se já estava assim peço desculpa :P )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei para que queres mas não aconselho a usares implementações proprietárias. O teu programa deixa de ser multiplataforma. Se da JavaMail  API usares apenas métodos que não venham do package sun.* ou org.* então tudo bem. No caso de precisares apenas da classe para enviar por SMTP então podes usar apenas a classe que coloquei em anexo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nao sao packages proprietarias, pelo menos nao ja nao lol :P

Essa classe ta no rt.jar que ja vem com o SDK 1.4.2 por isso.... Quanto ao problema de ser proprietario, nao me vao dizer que nao utilizam classes que vem com o SDK das quais nao tenham o codigo fonte, ja para nao falar que daqui a alguns meses vao ser todas open-source...

TaoOo se tiveres um IDE normal e tiveres o JDK (nao sei se so a JRE basta) instalado deve ser uma questao de fazer organizar imports ou kk coisa do genero.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei para que queres mas não aconselho a usares implementações proprietárias. O teu programa deixa de ser multiplataforma.

Explica la isto Knitter???? entao se tiveres implementacoes proprietaria o teu programa ja nao e multiplataforma???? tss tss, eu sei que enganaste, mas que calinada :P

outra coisa packages que comecem por org* sao normalmente opensource.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Calinada?! Não vejo onde. Todos os packages fora da API do Java tornam o java não multiplataforma, isto é uma regra geral. Nada garante que as novas funcionalidades sejam 100% Pure Java, até a própria sun avisa isso.

A única garantida de código multiplataforma é se usares código 100% Pure Java, nada te garante que uma implementação propriétaria o seja. Nada garante que a máquina virtual onde corras o código o consiga interpretar.

A questão dos packages org.* serem open source não é bem verdade. O que eu tenho mais são exemplos de packages que não são open source e têm nomenclatura org.* Por isso é que existem convenções de código e por isso é que também existem muitas pessoas que não as seguem.

Eu tenho o último jdk e também não consegui encontrar a classe. Mas posso ter falhado algures.

Nem todas as classes vão passar a ser open source, apenas as da API oficial. E sim, só uso classes da API oficial, ou que são 100% Pure Java, o que é o mesmo que dizer que são compostas por classes da API oficial. Tudo o que comesse por sun.* é automáticamente excluído.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em relacao aos org* por isso eu disse "normalmente" por acaso nao me lembro de nenhum caso do contrario mas acredito que existam.

Agora o facto de determinada ser multiplataforma nao tem nada a haver com o facto de ser closed-source ou proprietario, tem a haver com o facto de ser ou nao ser pure java, como tu disseste. Fora esta questao já é bastante raro surgirem novas libs que nao sejam pure java e nunca encontrei nenhuma que nao fosse pure java e que nao avisasse explicitamente que tinhas dists diferentes para plataformas diferentes e ja ando nisto ha uns tempos.

Em relacao a questao da API e tu sabes como funciona java o que se passa e o seguinte. A Java Community Process faz as especificacoes e sao apenas estas que estao incluidas naquilo que chamas API.

As implementacoes das especificacoes é que sao normalmente closed source, mas as da sun até vão deixar de ser. Normalmente o que pertence a um API começa por java* ou javax* e o que pertence a um implementacao comeca por sun* ou com* etc.

Não sei se alguma vez fizeste uma API mas quando fazes uma API nada garante que a implementação seja ou nao multiplataforma, isso cabe a quem faz a implementacao e nao a quem faz a API. Tomando por exemplo a especificacao de J2EE 5. o que tu usas nas tuas aplicacoes e a API agora como ela esta implementada por baixo pode ser a da JBoss a da Sun a da Apache etc. e o facto de ser ou nao multiplataforma depende das implementacoes.

Dizeres que todos os packages fora da API do java tornam o java nao multiplataforma, está errado e é estares a recusar usares libs como as da apache, as da jboss, as da webwork, etc.etc.etc. , o que significa perder das grandes vantagens de java, a grande quantidade e qualidade de frameworks e libs disponiveis principalmente fora da sun que sao muito bons especificadores mas pessimos implementadores (pelo menos piores que os outros) quem ja trabalhou com o Sun Java System Application Server e o tentou integrar com outros sabe disto.

Em relacao a classe propriamente dita e deveras estranho, ainda pensei que tivesse sido removida, mas nao. esta no rt.jar que fica em SDK_HOME/jre/lib/rt.jar, package sun.net.smtp isto tanto para o JDK 1.4 como para o 1.5

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vou ver isso da classe, também estou a achar estranho, até porque o netbeans não encontrou a classe. E até fiz o import explicito do package sun.net.* posso é ter escrito mal o nome.... tenho de ver...

Bem, seja como for, o problema está resolvido :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faz-me um favor diz-me qual é o caminho completo para a classe. E já agora se instalaste mais que a API standard.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Instalei o JDK normal (da no 1.4 e no 1.5).

Tou a ver a classe em sun.net.smtp.SmtpClient

Tu nao tens o SDK_Home\jre\lib\rt.jar ????

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora