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

12 respostas
W

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?

12 Respostas

Rafael_Steil

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

sergiolopes

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)

W

“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)</blockquote>Estranha essa solução, mas vamos tentar. Aproveitandoestou 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.

E

faço assim na Locaweb:

public void envia&#40;String pAssunto, StringBuffer pMensagem&#41; throws MessagingException, SQLException, ClassNotFoundException &#123;
        StringBuffer corpo = new StringBuffer&#40;1000&#41;; 

		corpo.append&#40;&quot;&lt;html&gt;&quot;&#41;;
		corpo.append&#40;&quot;&lt;head&gt;&lt;link rel=&quot;stylesheet&quot; &#41;;

                 ...



		/* Configurações do e-mail */
        Properties mailp = new Properties&#40;&#41;;
		mailp.put&#40;&quot;mail.smtp.host&quot;, &quot;smtp2.locaweb.com.br&quot;&#41;;

        Session mails = Session.getInstance&#40;mailp, null&#41;;

        Message message = new MimeMessage&#40;mails&#41;;        

		InternetAddress remetente = new InternetAddress&#40;&quot;[email removido]&quot;&#41;;
        message.setFrom&#40;remetente&#41;;
		message.setSubject&#40;&quot;O que rola no Clube do Tereré!&quot;&#41;;
		message.setContent&#40;corpo.toString&#40;&#41;, &quot;text/html&quot;&#41;;

		/* Seleciona todos os e-mails */ 
		Conexao conexao = new Conexao&#40;&#41;;
		conexao.abre&#40;&#41;;
		PreparedStatement ps = conexao.con.prepareStatement&#40;&quot;select * from newsletter&quot;&#41;;
		conexao.rs = ps.executeQuery&#40;&#41;;

		InternetAddress destinatario = new InternetAddress&#40;&#41;;

		while&#40;conexao.rs.next&#40;&#41;&#41;&#123;
			/* endereço do destinatário */
			destinatario.setAddress&#40;conexao.rs.getString&#40;1&#41;&#41;;

			try&#123;
			message.setRecipient&#40;Message.RecipientType.TO, destinatario&#41;;

			/* Envia a mensagem */
	        Transport.send&#40;message&#41;;
	
			&#125;
			catch&#40;AddressException e&#41;&#123;
				continue;
			&#125;
			catch&#40;SendFailedException e&#41;&#123;
				continue;
			&#125;
			catch&#40;IllegalWriteException e&#41;&#123;
				continue;
			&#125;
		&#125;

		conexao.fecha&#40;&#41;;
		corpo = null;
		conexao.rs = null;
       &#125;
[/quote]
W
"EddiE":
faço assim na Locaweb:

(puta snippet de codigo gigantesco removido pelo cv)

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:

public void sendMail&#40;&#41; throws AddressException, MessagingException  &#123;        
        Properties props = new Properties&#40;&#41;;        
        props.put&#40;&quot;mail.smtp.host&quot;, &quot;smtp.&lt;meudominio.locaweb&gt;&quot;&#41;;       
        Authenticator au = new MailAuthenticator&#40;login, password&#41;;
        Session session = Session.getInstance&#40;props, au&#41;;
        MimeMessage msg = new MimeMessage&#40;session&#41;;
        msg.setFrom&#40;new InternetAddress&#40;from&#41;&#41;;
        msg.setRecipient&#40;Message.RecipientType.TO, new InternetAddress&#40;to&#41;&#41;;
        msg.setSentDate&#40;new Date&#40;&#41;&#41;;
        msg.setSubject&#40;subject&#41;;
        msg.setText&#40;message&#41;;
 
        // 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;

Sera q tem algo errado?

E

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:

sergiolopes

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…

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

OutLaw

“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

Funcionou!!!

pcalcado
"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.

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

public static void enviaMail&#40;String to, String from, String subject, String body&#41; throws ServletException&#123;
		try&#123;
	        Properties props = new Properties&#40;&#41;;
	        props.put&#40;&quot;mail.smtp.host&quot;, &quot;smtp2.locaweb.com.br&quot;&#41;;
	
	        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;

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

OutLaw

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();
	}
}

}

S

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() + ")");
        }

    }
}
Criado 12 de março de 2004
Ultima resposta 23 de mai. de 2005
Respostas 12
Participantes 7