Receber Email Via POP e "Avaliar" conteudo

6 respostas
M

Boa Noite.

Estou com dois problemas.

Tenho um sistema para uma determinada empresa. O Cliente deseja que parte dos emails, que tomam muito tempo e sao bem rotineiros sejam respondidos automaticamente de acordo com dados do sistema.

O que tenho que fazer é:
1-Algo que receba este email. Tipo uma API como o commons email. Tava pensando que deve existir uma API para receber email via POP. Estaria eu enganado?

2-Um programa para realizar uma varredura no corpo do email e identificar o assunto do email para poder atender automaticamente. Sei que isto é bem relativo, mas quero alguma coisa do tipo. Se houver duvidas, encaminha para alguem inspecionar o email antes do sistema enviar automaticamente ao cliente.
Tava pensando em fazer tipo por pontuacao. Criar alguns topicos padroes que devem ser a base de comparacao. O programa iria pegar o texto do email e verificar com qual dos intens dos topicos melhor se encaixa, o que houver mais pontuacao seria escolhido. E se houvesse muito pouca diferenca de pontuacoes entre um e outro, o programa pediria intervencao humana, caso contrario, montaria o email com base de dados do proprio sistema e enviaria ao solicitante.
Bom, acho que esta e aparte mais complexa desta aplicacao. Ainda nao pesquisei na web para ver se existe uma API para isto.

Isto porque antes disto, preciso que o programa seja capaz de receber o email primeiro.

Fico no aguardo de opinioes e sugestoes.

Att,

Lucas Israel

6 Respostas

M

Pessoal, problema1 resolvido. Consigo receber o email atraves de pop3. Se alguem precisar poste ai que eu coloco o fonte aqui.
Agora preciso identificar o conteudo do email. Alguem pode me sugerir algum caminho?

Att,

Lucas Israel

juno.rr

Opa, que legal encontrar este tópico, estou com um problema parecido, se puder compartilhar qual api vc usou para receber emails por pop3, ajudaria muito. Abraço.

M

Boa tarde, junio.
Usei duas APIs:
JavaMail
JavaBeans Activation Framework

Lista tudinho pra voce.
Caso voce tenha interesse, poco postar um codigo aqui. Eu segui um tutorial na internet, so que nao tenho o link aqui, mas posso postar o codigo como exemplo, caso voce queira.

Att,

Lucas Israel

juno.rr

Que legal cara, se vc puder colocar o codigo eu agradeco.

Valeu mesmo. Abraco.

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

public class Receiver {

    public static void main(String args[]) {
        try {
            String popServer = "pop.myhost.com.br"; //conferir com seu host. Habilitar o encaminhamento pop antes, senao nao funciona.
            String popUser = "[email removido]";  //O email.
            String popPassword = "mySecretPass";  //A senha de acesso
            boolean ssl = true;  //Se a conexao usa ou nao ssl.
            receive(popServer, popUser, popPassword, ssl);
        } catch (Exception ex) {
            System.out.println("Usage: java com.lotontech.mail.SimpleReceiver" + " popServer popUser popPassword");
        }
        System.exit(0);
    }

    public static void receive(String popServer, String popUser, String popPassword, boolean isSsl) {
        Store store = null;
        Folder folder = null;
        try {
            // -- Get hold of the default session --
            Properties props = System.getProperties();
            Session session = Session.getDefaultInstance(props, null);
            if (isSsl) {
                session.getProperties().put("mail.smtp.auth", "true");
                session.getProperties().put("mail.debug", "true");
                session.getProperties().put("mail.smtp.port", "465");
                session.getProperties().put("mail.smtp.socketFactory.port", "995");
                session.getProperties().put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
                session.getProperties().put("mail.smtp.socketFactory.fallback", "false");
                session.getProperties().put("mail.smtp.starttls.enable", "true");
            }

            // -- Get hold of a POP3 message store, and connect to it --
            store = session.getStore("pop3");
            store.connect(popServer, popUser, popPassword);

            // -- Try to get hold of the default folder --
            folder = store.getDefaultFolder();
            if (folder == null) {
                throw new Exception("No default folder");
            }
            // -- ...and its INBOX --
            folder = folder.getFolder("INBOX");
            if (folder == null) {
                throw new Exception("No POP3 INBOX");
            }
            // -- Open the folder for read only --
            folder.open(Folder.READ_ONLY);
            // -- Get the message wrappers and process them --
            Message[] msgs = folder.getMessages();
            for (int msgNum = 0; msgNum < msgs.length; msgNum++) {
                printMessage(msgs[msgNum]);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            // -- Close down nicely --
            try {
                if (folder != null) {
                    folder.close(false);
                }
                if (store != null) {
                    store.close();
                }
            } catch (Exception ex2) {
                ex2.printStackTrace();
            }
        }
    }

    public static void printMessage(Message message) {
        try {
            // Get the header information
            String from = ((InternetAddress) message.getFrom()[0]).getPersonal();
            if (from == null) {
                from = ((InternetAddress) message.getFrom()[0]).getAddress();
            }
            System.out.println("FROM: " + from);
            String subject = message.getSubject();
            System.out.println("SUBJECT: " + subject);
            Date dataa = message.getReceivedDate();
            System.out.println("Numero da MSG: " + message.getMessageNumber());
            System.out.println("Recebido em: " + dataa);
            // -- Get the message part (i.e. the message itself) --
            Part messagePart = message;
            Object content = messagePart.getContent();
            // -- or its first body part if it is a multipart message --
            if (content instanceof Multipart) {
                messagePart = ((Multipart) content).getBodyPart(0);
                System.out.println("[ Multipart Message ]");
            }
            // -- Get the content type --
            String contentType = messagePart.getContentType();
            // -- If the content is plain text, we can print it --
            System.out.println("CONTENT:" + contentType);
            if (contentType.startsWith("text/plain") || contentType.startsWith("text/html")) {
                InputStream is = messagePart.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                String thisLine = reader.readLine();
                while (thisLine != null) {
                    System.out.println(thisLine);
                    thisLine = reader.readLine();
                }
            }
            System.out.println("-----------------------------");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

Este é o codigo que fiz seguindo um tutorial. Algumas coisas, como a implementacao do SSL foi eu mesmo que fiz, mas o resto ta igualzinho.
É so um exemplo. Dai da para fazer a implementacao que desejar.

Espero ajudar.

Att,

Lucas Israel

juno.rr

Brigadão cara, ajudou pra caramba.
Era bem isso que eu estava precisando.

Abraço.

Criado 30 de janeiro de 2010
Ultima resposta 4 de fev. de 2010
Respostas 6
Participantes 2