Enviar e-mail com o Java

6 respostas
H

Boa noite pessoal! Eu já procurei em todo lugar e já li muitos tutoriais, mas ainda não consigo fazer minha aplicação enviar um bendito e-mail! :(

Quando eu tento enviar usando meu e-mail do yahoo, da esse erro [color=red]530 authentication required - "for help go to http://help.yahoo.com/help/us/mail/pop/pop-11.html"[/color], segue o código que eu estou usando para esse email...

import java.util.Properties;

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

public class Main{
	public Main(){
		try{
			Properties p = new Properties();
			p.put("mail.smtp.host", "smtp.mail.yahoo.com.br");
			p.put("mail.smtp.auth", "true");
			
			Session session = Session.getDefaultInstance(p, new Auth());
			
			MimeMessage msg = new MimeMessage(session);
			msg.setFrom(new InternetAddress(EMAIL1));
			
			InternetAddress[] toList={new InternetAddress(EMAIL2)};
			msg.setRecipients(Message.RecipientType.TO, toList);
			
			msg.setSubject("Assunto");
			msg.setText("corpo da mensagem");

			Transport.send(msg);
		}catch(Exception e){
			System.out.println(e.getMessage());
		}
	}
	
	private class Auth extends Authenticator{
		protected PasswordAuthentication getPasswordAuthentication(){
			return new PasswordAuthentication(LOGIN, SENHA);
		}
	}
	
	public static void main(String[] args){
		new Main();
	}
}

e quando eu tento enviar usando meu e-mail do gmail, da esse erro [color=red]530 5.7.0 Must issue a STARTTLS command first. 30sm1256777agc.29[/color], segue o código que eu estou usando para esse email...

import java.util.Properties;

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

public class Main{
	public Main(){
		try{
			Properties p = new Properties();
			p.put("mail.smtp.host", "smtp.gmail.com");
			p.put("mail.smtp.auth", "true");
			
			Session session = Session.getDefaultInstance(p, new Auth());
			
			MimeMessage msg = new MimeMessage(session);
			msg.setFrom(new InternetAddress(EMAIL_GMAIL));
			
			InternetAddress[] toList={new InternetAddress(EMAIL_YAHOO)};
			msg.setRecipients(Message.RecipientType.TO, toList);
			
			msg.setSubject("Assunto");
			msg.setText("corpo da mensagem");

			Transport.send(msg);
		}catch(Exception e){
			System.out.println(e.getMessage());
		}
	}
	
	private class Auth extends Authenticator{
		protected PasswordAuthentication getPasswordAuthentication(){
			return new PasswordAuthentication(LOGIN, SENHA);
		}
	}
	
	public static void main(String[] args){
		new Main();
	}
}

Se alguem puder me ajudar, eu agradeço!
Flw!!!

6 Respostas

hiram

opa!

O problema, como você deve ter percebido, não está em como você está utilizando a API (aparentemente tudo correto), mas no método de autenticação padrão que o JavaMail está tentando utilizar com esses serviços de e-mail.

Para o gmail, por exemplo, verifique se o POP está ativado p/ sua conta. No mais segue as exigências para q mail clients acessem POP e SMTP deles:

http://mail.google.com/support/bin/answer.py?answer=13287

Essa autenticação padrão da classe Authenticator parece ser a chamad a PLAIN.

Enfim, você está no caminho certo. Quando descobrir como alterar o método de autenticação nos avise. Não sei se tem algo dentro da própria API ou se você vai ter que implementar isso. :shock:

Abraços!

Link_pg

Olá!

Eu fiz isso uma vez em um applet dentro de um site. Também foi punk pra funcionar direitinho. Só algumas coisas:

  • Se for um applet, todos os seus arquivos .jar devem estar assinados digitalmente;
  • Você deve adicionar ao seu classpath a activation-api.jar;
  • Como o amigo disse, acredito que o método de autenticação deva ser alterado, só não lembro exatamente como… :frowning:

Vou procurar o código e respondo quando eu chegar em casa.

Abraços

Link_pg

http://www.guj.com.br/posts/list/87637.java

R

aew veio…eu tbm passei mau pra conseguir fazer uma aplicação minha mandar email…eh uma aplicação web (site) que utiliza um smtp que eu comprei (para o cliente)
vou colocar o codigo e no caso vou colocar o smtp do cliente como smtp.lojasamericanas.com.br ok…
entao vamos lá

package br.com.camptech.javaMail;

import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class EmailServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        HttpSession sessao = req.getSession();
        String mensagem = req.getParameter("mensagem");
        String email = req.getParameter("email");
        String nome = req.getParameter("nome");

        Pattern p = Pattern.compile("^[\\w-]+(\\.[\\w-]+)*@([\\w-]+\\.)+[a-zA-Z]{2,7}$");
        Matcher m = p.matcher(email);
        if (!m.find()) {
            sessao.setAttribute("email", "naofoi");
            sessao.setAttribute("erro", "Email inválido");
        } else {
            try {
                String to = "[email removido]";
                String from = "[email removido]";
                Properties props = new Properties();
                props.put("smtp.lojasamericanas.com.br", "lojasamericanas");
                Session session = Session.getInstance(props, null);
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(from));
                Address toAddress = new InternetAddress(to);
                message.addRecipient(Message.RecipientType.TO, toAddress);
                message.setSubject("Contato do Site");
                message.setContent("Nome: " + nome + "<br>" + "Email: " + email + "<br>" + mensagem, "text/html");
                Transport.send(message);
                sessao.setAttribute("email", "foi");
            } catch (MessagingException e) {
                sessao.setAttribute("email", "naofoi");
                sessao.setAttribute("erro", e.getMessage());
            }
        }
        res.sendRedirect("email.jsp");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException,
            IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException,
            IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }
}

entao o codigo acima esta funcionando certinho…eu sei que na String from vc obrigatoriamente tem que colocar o email referente ao smtp que vc esta usando…

bom tai o codigo…espero que ajude…pois eu fikei desesperado um dia e me ajudaram ake no forum…bom tai a minha contribuição!! XDDD

obs: akele mfind eh soh pra verifica se o email esta escrito certo…

R

O servidor precisa de uma conexão segura(TLS/SSL), não basta só autenticar com a senha. Procura algo do tipo no google que deve ajudar.

Além disso, vc consegue enviar e receber através de um cliente de email, como o Thunderbird/Outlook usando essa conta? Pq pra fazer isso pelo YAHOO, vc precisa de uma conta PLUS. O que não é o erro agora, mas se vc não tiver, provavelmente vai esbarrar nisso também.

gabrielmassote

Tudo bem?

pelo que vi, na sua classe vc nao faz a autenticacao. Fiz dois topicos aqui no guj, de uma olhada sobre. Qualquer coisa me mande uma msg pessoal.

API Java Mail: http://www.guj.com.br/posts/list/87637.java
API Commons Mail: http://www.guj.com.br/posts/list/104645.java

[]s.

Criado 23 de junho de 2009
Ultima resposta 25 de jun. de 2009
Respostas 6
Participantes 6