Olá pessoal,
Modifiquei o programa do que está no site do GUJ … implementei autenticação (se bem que para alguns servers nem precisa colocar nome de usuario e senha válidos) e fiz algumas mudanças… e está enviando corretamente … estou enviando o código para vocês… só modificar os dados de login e servidor smtp diretamente do codigo, compilar e utilizar de acordo com o especificado… cria dois arquivos txt , um com a mensagem outro com o endereço e-mail de destino (não consegui fazer ele funcionar com mais de um endereço, acho que é o bug descrito pelo Paulo Silveira… mas depois eu penso num jeito de arrumar isso pois to cansado agora, ou se alguem puder me ajudar) mas está aí o código…
Abraço a todos
Ass.: Leandro
importjava.io.*;importjavax.mail.*;importjavax.mail.internet.*;importjava.util.*;classPegaLoginextendsAuthenticator{publicPasswordAuthenticationgetPasswordAuthentication(){Stringusername="NomedoUsuario";Stringpassword="Senha";returnnewPasswordAuthentication(username,password);}}publicclassSpammer{publicstaticvoidmain(Stringargs[]){if(args.length<4){System.out.println("Forma de uso: java Spammer <arquivo msg> <arquivo emails> <from> <subject>");System.exit(1);}try{postMail(args[0],args[1],args[2],args[3]);}catch(MessagingExceptione){System.out.println("Erro: "+e);}}publicstaticvoidpostMail(Stringmsg_file,Stringmails_file,Stringfrom,Stringsubject)throwsMessagingException{finalbooleandebug=false;//Set the host smtp addressPropertiesprops=newProperties();props.put("mail.host","smtp.uol.com.br");// create some properties and get the default SessionAuthenticatorauth=newPegaLogin();Sessionsession=Session.getDefaultInstance(props,auth);session.setDebug(debug);// create a messageMessagemsg=newMimeMessage(session);// set the from and to addressInternetAddressaddressFrom=newInternetAddress(from);// Sux, na documentacao que eu tenho diz que da para usar um objeto// Address simples, mas so funciona com um array de objetos. Entao // fiz essa gambiarra pq ja tava de saco cheio pra pensar numa // outra solucao :)Addressto[]=newInternetAddress[1];msg.setFrom(addressFrom);msg.setSubject(subject);StringBuffermensagem=newStringBuffer();Stringlinha;try{// Arquivo com os enderecos de email ( um por linha )BufferedReaderreader=newBufferedReader(newFileReader(mails_file));// Arquivo com a mensagemBufferedReadermsg1=newBufferedReader(newFileReader(msg_file));// Le todo o conteudo da mensagem a ser enviadawhile((linha=msg1.readLine())!=null)mensagem.append(linha);msg1.close();msg.setContent(mensagem,"text/html");// Le cada endereco de email , transforma em String e enviawhile((linha=reader.readLine())!=null){to[0]=newInternetAddress(linha);msg.setRecipients(Message.RecipientType.TO,to);msg.setText(mensagem.toString());Transport.send(msg);Thread.sleep(10);}}catch(Exceptione){System.out.println("Erro: "+e);}}}
Aliás testei agora para multiplos destinatarios no arquivo txt de e-mails e funcionou… no caso coloquei meu login e server smtp do UOL para autenticação…
Rafael_Steil
hehe… legal… fiz esse programa originalmente pq o sistema de envio de boletim da empresa, que era em php, so dava pau… dae um dia me enchi o saco de toda semana ser a mesma coisa ( o boletim nao foi, o boletim deu pau, o boletim isso, o boletim akilo ), e fiz algo em Java… a versao que foi postada no tutorial foi uma das primeiras, eu nao sabia mexer mto com javamail ( nao que seja um expert agora hehe )… e tinha um bugzinho mesmo… legal o seu post!!
exception javax.mail.MessagingException; must be caught or declared to be thrown
Falta um try/catch só
Renato_Teixeira
Mark valeu pela resposta, esse problema foi sanado, mas agora tenho outro:
Onde eu crio os arquivos .txt?
no meu código esta dando problema bem na hora que tenta ler este arquivo,,,, alguém pode me ajudar?
parte onde esta dando problema:
StringBuffer mensagem = new StringBuffer();
String linha;
try {
// Arquivo com os enderecos de email ( um por linha )
BufferedReader reader = new BufferedReader(new FileReader(mails_file));
// Arquivo com a mensagem
BufferedReader msg1 = new BufferedReader(new FileReader(msg_file));
// Le todo o conteudo da mensagem a ser enviada
while ((linha = msg1.readLine()) != null)
mensagem.append(linha);
BufferedReader reader = new BufferedReader(new FileReader(mails_file));
Passando da linha em negrito já cai para o catch.
Abs
Marky.Vasconcelos
Em algum lugar voce inicializa mails_file e msg_file.
Veja onde isso é feito.
Renato_Teixeira
Pessoal,
Deu este erro:
run:
Erro: javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 553 UTILIZE A AUTENTICACAO PARA ENVIO DE MENSAGENS/THIS SERVER IS TO BE USED WITH AUTHENTICATION (#5.7.1)
Alguém pode me ajudar …onde eu seto a autenticação?