Sobre o Spammer.java --- Modifiquei ele!

8 respostas
Leandro-SP

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

import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*; 


class PegaLogin extends Authenticator{


	public PasswordAuthentication getPasswordAuthentication(){

   		String username = "NomedoUsuario"; String password = "Senha";
		return new PasswordAuthentication(username, password);
	} 
		
}


public class Spammer
{
	public static void main (String args[])
	{
		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 (MessagingException e){
			System.out.println("Erro: "+ e);
		}
		
	}
	
	public static void postMail(String msg_file, String mails_file,  String from, String subject) throws MessagingException
	{
	    final boolean debug = false;
		 
	     //Set the host smtp address
	     Properties props = new Properties();
	     props.put("mail.host", "smtp.uol.com.br");
	   	
	    // create some properties and get the default Session
	    Authenticator auth = new PegaLogin();
	    Session session = Session.getDefaultInstance(props, auth);
	    session.setDebug(debug);
	
	    // create a message
	    Message msg = new MimeMessage(session);
	
	    // set the from and to address
	    InternetAddress addressFrom = new InternetAddress(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 :)
		Address to[] = new InternetAddress[1];
	        msg.setFrom(addressFrom);
	        msg.setSubject(subject);
		
		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);

			msg1.close();

	    		msg.setContent(mensagem, "text/html");

			// Le cada endereco de email , transforma em String e envia
			while ((linha = reader.readLine()) != null){
				to[0] = new InternetAddress(linha);
				msg.setRecipients(Message.RecipientType.TO, to);
				msg.setText(mensagem.toString());
				Transport.send(msg);
				Thread.sleep(10);
			}
		}
		catch (Exception e) {
			System.out.println("Erro: "+ e);
		}
	}
}

8 Respostas

Leandro-SP

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…
:smiley:

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!!

[]'s
Rafael Steil

Renato_Teixeira

Galera gerou este erro para mim:

<blockquote>Exception in thread AWT-EventQueue-0 java.lang.RuntimeException: Uncompilable source code - unreported exception javax.mail.MessagingException; must be caught or declared to be thrown

at tcm_redesocial.IC_Mail.btnEnvioActionPerformed(IC_Mail.java:110)

at tcm_redesocial.IC_Mail.access$100(IC_Mail.java:9)

at tcm_redesocial.IC_Mail$2.actionPerformed(IC_Mail.java:45)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.Component.processMouseEvent(Component.java:6216)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

at java.awt.Component.processEvent(Component.java:5981)

at java.awt.Container.processEvent(Container.java:2041)

at java.awt.Component.dispatchEventImpl(Component.java:4583)

at java.awt.Container.dispatchEventImpl(Container.java:2099)

at java.awt.Component.dispatchEvent(Component.java:4413)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)

at java.awt.Container.dispatchEventImpl(Container.java:2085)

at java.awt.Window.dispatchEventImpl(Window.java:2475)

at java.awt.Component.dispatchEvent(Component.java:4413)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)</blockquote>

Alguém pode me ajudar?

Obrigado

Marky.Vasconcelos

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?

Abs

Renato_Teixeira

Pessoal ninguém pode me ajudar neste caso??

Abs

Criado 29 de outubro de 2002
Ultima resposta 11 de jun. de 2009
Respostas 8
Participantes 4