So consigo enviar e-mail para o mesmo domínio

Estou usando o servidor smtp.sao.terra.com.br para enviar e-mail com o JavaMail. No entanto, somente estou conseguindo enviar e-mail para os destinatários do mesmo domínio. Segui os exemplos do tutorial do GUJ.
Alguém sabe se eh possível enviar e-mails para domínios diferentes?

Provavelmente eh pq vc nao tem permissao para usar os outros servidores… Ao inves de fazer

Transport.send()

tente primeiro conectar no servidor:

Transport transport = session.getTransport();
transport.connect(host, username, senha);

e entao use

transport.sendMessage()

Rafael

esse problema acontece em qq envio por smtp… se vc usa o oulook e tentar enviar um email sem antes ter conectado na sua conta pop3, vai dar esse erro tambem… para contornar isso, faça uma conexao pop3 antes de enviar o email por smtp… nao sei como funciona o processo no servidor, mas acho q qdo conecta por pop3 seu computador é autorizado a enviar emails por smtp durante um certo tempo…

(eu usava está solucao qdo tinha q fazer uns sistemas semelhantes em PHP)

[quote=“sergiousp”]esse problema acontece em qq envio por smtp… se vc usa o oulook e tentar enviar um email sem antes ter conectado na sua conta pop3, vai dar esse erro tambem… para contornar isso, faça uma conexao pop3 antes de enviar o email por smtp… nao sei como funciona o processo no servidor, mas acho q qdo conecta por pop3 seu computador é autorizado a enviar emails por smtp durante um certo tempo…

(eu usava está solucao qdo tinha q fazer uns sistemas semelhantes em PHP)[/quote]Estranha essa solução, mas vamos tentar. Aproveitando…estou tentando utilizar os servidores da Locaweb, mas nao estou conseguindo nem realizar a autenticacao. A seguinte excessao eh lancada:
Sending failed;
nested exception is:
class javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
class javax.mail.SendFailedException: 553 UTILIZE A AUTENTICACAO PARA ENVIO DE MENSAGENS/THIS SERVER IS TO BE USED WITH AUTHENTICATION (#5.7.1)

Serah q esse problema eh com o servidor ou com a minha aplicacao? Estou usando os mesmos parametros do outlook que funciona corretamente.

faço assim na Locaweb:

[code]

public void envia(String pAssunto, StringBuffer pMensagem) throws MessagingException, SQLException, ClassNotFoundException {
StringBuffer corpo = new StringBuffer(1000);

	corpo.append("<html>");
	corpo.append("<head><link rel="stylesheet" );

             ...



	/* Configurações do e-mail */
    Properties mailp = new Properties();
	mailp.put("mail.smtp.host", "smtp2.locaweb.com.br");

    Session mails = Session.getInstance(mailp, null);

    Message message = new MimeMessage(mails);        

	InternetAddress remetente = new InternetAddress("seuemail@seudominio.com.br");
    message.setFrom(remetente);
	message.setSubject("O que rola no Clube do Tereré!");
	message.setContent(corpo.toString(), "text/html");

	/* Seleciona todos os e-mails */ 
	Conexao conexao = new Conexao();
	conexao.abre();
	PreparedStatement ps = conexao.con.prepareStatement("select * from newsletter");
	conexao.rs = ps.executeQuery();

	InternetAddress destinatario = new InternetAddress();

	while(conexao.rs.next()){
		/* endereço do destinatário */
		destinatario.setAddress(conexao.rs.getString(1));

		try{
		message.setRecipient(Message.RecipientType.TO, destinatario);

		/* Envia a mensagem */
        Transport.send(message);

		}
		catch(AddressException e){
			continue;
		}
		catch(SendFailedException e){
			continue;
		}
		catch(IllegalWriteException e){
			continue;
		}
	}

	conexao.fecha();
	corpo = null;
	conexao.rs = null;
   }

[/code][/quote]

[quote=“EddiE”]faço assim na Locaweb:

(puta snippet de codigo gigantesco removido pelo cv)[/quote]

Tentei com smt2.locaweb.com.br e nao funciona. Vc não usa autenticação? A aplicação necessita estar rodando no servido da Locaweb?

Estou usando o seguinte codigo que reporta o erro da mensagem anterior:

[code] public void sendMail() throws AddressException, MessagingException {
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.<meudominio.locaweb>");
Authenticator au = new MailAuthenticator(login, password);
Session session = Session.getInstance(props, au);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
msg.setSentDate(new Date());
msg.setSubject(subject);
msg.setText(message);

    // enviando mensagem &#40;tentando&#41;
    Transport transport = session.getTransport&#40;&quot;smtp&quot;&#41;;
    transport.connect&#40;mailServer, login, password&#41;; 
    transport.send&#40;msg&#41;;
&#125;   

[/code]

Sera q tem algo errado?

ela está rodando no servidor da Locaweb. Lembro que pedi ajuda pelo Help Desk e eles solucionaram o meu problema… pede uma força para eles também!!! :wink:

mandar email pelo smtp da maquina local normalmente funciona legal mesmo… o problema é mandar de outra maquina usando um smtp remoto… aí precisa fazer uma conexao POP3 antes…

PELAMORDEDEUS

o codigo que eu postei na segunda msg resolve o problema… use na locaweb e no servidor da pqp… ate da minha maquina localhost funciona, acessando qq servidor que eu tenha login e senha…

Ou a msg soh aparece pra mim??

Rafael

[quote=“Rafael Steil”]PELAMORDEDEUS

o codigo que eu postei na segunda msg resolve o problema… use na locaweb e no servidor da pqp… ate da minha maquina localhost funciona, acessando qq servidor que eu tenha login e senha…

Ou a msg soh aparece pra mim??

Rafael[/quote]

Funcionou!!!

[quote=“wendell almeida silva”]Estranha essa solução, mas vamos tentar. Aproveitando…estou tentando utilizar os servidores da Locaweb, mas nao estou conseguindo nem realizar a autenticacao. A seguinte excessao eh lancada:

o servidor ou com a minha aplicacao? Estou usando os mesmos parametros do outlook que funciona corretamente.[/quote]

Só um comentário: a LocaWeb possui uma configuração de SMTP muito loka, certa vez o cara do suporte me deu um exemplo para funcionar em um site que pûs lá, só que este exemplo utilizava o SMTP de um site de outro cliente. Não sei se eles requerem autenticação, mas o fato é que funcionava o treco mandando e-mail pelo SMTP dos outros… eu pedi pro carinha me indicar o meu próprio SMTP e funcionou, tenho o código aqui, perae, vou postar…

[code]
public static void enviaMail(String to, String from, String subject, String body) throws ServletException{
try{
Properties props = new Properties();
props.put("mail.smtp.host", "smtp2.locaweb.com.br");

        Session sessao = Session.getInstance&#40;props, null&#41;;

        MimeMessage message = new MimeMessage&#40;sessao&#41;;

        message.setFrom&#40;new InternetAddress&#40;from&#41;&#41;;
        Address toAddress = new InternetAddress&#40;to&#41;;
        message.addRecipient&#40;Message.RecipientType.TO, toAddress&#41;;

        message.setSubject&#40;subject&#41;;

        message.setContent&#40;body, &quot;text/html&quot;&#41;;

        Transport.send&#40;message&#41;;
    &#125;
	catch&#40;Exception e&#41;&#123;
		throw new ServletException&#40;&quot;Problemas no envio &#40;&quot;+e+&quot;&#58;&quot;+e.getMessage&#40;&#41;+&quot;&#41;&quot;&#41;;
	&#125;	
	
&#125;

public void doPost&#40;HttpServletRequest req, HttpServletResponse res&#41; throws ServletException, IOException &#123;	
	PrintWriter out = res.getWriter&#40;&#41;;
	res.setContentType&#40;&quot;text/html&quot;&#41;;
	try &#123;

		String to = req.getParameter&#40;&quot;para&quot;&#41;;
		String subject =req.getParameter&#40;&quot;assunto&quot;&#41;;
		String body = req.getParameter&#40;&quot;corpo&quot;&#41;;
		String from = req.getParameter&#40;&quot;de&quot;&#41;;
		
		enviaMail&#40;to, from, subject, body&#41;;
		
		res.sendRedirect&#40;&quot;/mail_sucesso.htm&quot;&#41;;
	&#125;
	catch &#40;Exception e&#41; &#123;
		throw new ServletException&#40;&quot;Email nao pode ser enviado &#91;&quot; + e.getMessage&#40;&#41;+&quot;&#93;&quot;&#41;;
	&#125;
&#125;[/code]

Bom, o código não é nenhuma maravilha [não fui eu que fiz, não fui eu que fiz! Mentira, fui eu mesmo, alguma hora da madrugada, mas ninguém precisa saber disso… :oops: ] mas funcionou bem até hoje.

[]s

o exemplo que o Rafael Steil é perfeito e funciona para qualquer um servidor :slight_smile:

ta ai minha classe de mandar email, funciona para servidor que exige ou nao autenticação

import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**

  • @author Lawrence Barbosa
  • @version 26/03/2004 - 15:13:24
  • EnviaEmail.java
  • Classe generia utilizada para envio de email
    */

public class EnviaEmail extends Authenticator {

public void enviaEmail(String bodyEmail, String assunto ,String remetente, Address destTo[], Address destCc[], Address destBcc[], String srvSmtp, String tpEmail, String user, String passwd ,String fileAttach)  
throws MessagingException  {
    
	try {

		if (!srvSmtp.trim().equalsIgnoreCase("")) { 
			
			//Set the host smtp address
			Properties props = new Properties();
			props.put("mail.smtp.host",srvSmtp);
			
			//Create some properties and get the default Session
			Session session = Session.getInstance(props,null);
			
			//Create a message
			Message msg = new MimeMessage(session);

			//Remetente
			msg.setFrom(new InternetAddress(remetente));

			//Destinatario(s)			
			if (destTo != null) { msg.setRecipients(Message.RecipientType.TO,destTo); }
			
			//Destinatario(s) com Copia
			if (destCc != null) { msg.setRecipients(Message.RecipientType.CC,destCc); }

			//Destinatario(s) com Copia Oculta
			if (destBcc != null) { msg.setRecipients(Message.RecipientType.BCC,destBcc); }				

			//Assunto da mensagem
			msg.setSubject(assunto);
			
			
			//Verificando tipo de Envio
			if (tpEmail.trim().equalsIgnoreCase("HTML")) {
				//Montando corpo da mensagem no formato HTML
				msg.setContent(bodyEmail,"text/html");
			} else {
				msg.setText(bodyEmail);
			}

			if (!fileAttach.trim().equalsIgnoreCase("")) {
				//Envia Arquivo Se nescessario
				msg.setFileName(fileAttach);
			}
			
			//Adicionando a data atual a mensagem
 			msg.setSentDate(new Date());
		
			//Enviando mensagem (tentando)
			Transport transport = session.getTransport("smtp"); 
			System.out.println("Conectando no servidor de smtp:"+srvSmtp+"...");
			transport.connect(srvSmtp, user, passwd);
			
			if (transport.isConnected()) {
				System.out.println("Conectado ["+srvSmtp+"]");
				System.out.println("Enviando Mensagem...");
				transport.sendMessage(msg,destTo);
				System.out.println("Mensagem Enviada!!!");
			}
		}
	}
	catch (MessagingException e) {
		e.printStackTrace();
	}
}

}

Agora deu este erro:

javax.servlet.ServletException: Problemas no envio (javax.mail.MessagingException: Could not connect to SMTP host: smtp.terra.com.br, port: 25, response: 450:Could not connect to SMTP host: smtp.terra.com.br, port: 25, response: 450)

Meu código é:

 public static void main(String args[]) {
        email mail = new email();

        try {
            mail.enviaMail("email@destino",
                    "e-mail@origem", "assunto", "mensagem");
        } catch (ServletException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public static void enviaMail(String to, String from, String subject,
            String body) throws ServletException {
        try {
            Properties props = new Properties();
            props.put("mail.smtp.host", "smtp.terra.com.br");

            Session sessao = Session.getInstance(props, null);

            MimeMessage message = new MimeMessage(sessao);

            message.setFrom(new InternetAddress(from));
            Address toAddress = new InternetAddress(to);
            message.addRecipient(Message.RecipientType.TO, toAddress);

            message.setSubject(subject);

            message.setContent(body, "text/html");

            //       Enviando mensagem (tentando)
            Transport transport = sessao.getTransport("smtp");
            System.out
                    .println("Conectando no servidor de smtp:smtp.terra.com.br...");
            transport.connect("smtp.terra.com.br", "login",
                    "senha");

            if (transport.isConnected()) {
                System.out.println("Conectado [smtp:smtp.terra.com.br]");
                System.out.println("Enviando Mensagem...");
                //transport.sendMessage(msg,destTo);
                Transport.send(message);
                System.out.println("Mensagem Enviada!!!");
            }

        } catch (Exception e) {
            throw new ServletException("Problemas no envio (" + e + ":"
                    + e.getMessage() + ")");
        }

    }
}