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 (tentando)
Transport transport = session.getTransport("smtp");
transport.connect(mailServer, login, password);
transport.send(msg);
}
[/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!!!
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(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");
Transport.send(message);
}
catch(Exception e){
throw new ServletException("Problemas no envio ("+e+":"+e.getMessage()+")");
}
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
PrintWriter out = res.getWriter();
res.setContentType("text/html");
try {
String to = req.getParameter("para");
String subject =req.getParameter("assunto");
String body = req.getParameter("corpo");
String from = req.getParameter("de");
enviaMail(to, from, subject, body);
res.sendRedirect("/mail_sucesso.htm");
}
catch (Exception e) {
throw new ServletException("Email nao pode ser enviado [" + e.getMessage()+"]");
}
}[/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
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() + ")");
}
}
}