Conectar recuperar e manipular emails no sistema

Olá a todos! Eu gostaria de saber se é possível receber emails no sistema e manipular os dados desse e-mail? a aplicação que irei desenvolver precisa se comunicar com os emails do Google Gmail.
A empresa tem 12 sites e cada site tem um formulário de orçamento, simples com nome, e-mail, telefone, Modelo, Medida, quantidade, Mensagem. O cliente preenche e envia o orçamento para o e-mail respectivo ao site.

O sistema vai ter que captar esse e-mail da respectiva empresa e por forma de notificação dentro do sistema avisar que um cliente solicitou um orçamento, após isso o gerente vai ter a opção de direcionar esse orçamento para um vendedor entre os vendedores cadastrados no sistema, o vendedor logado no sistema vai receber a notificação que tem um orçamento para enviar e quando ele clicar em gerar orçamento eu preciso que os dados daquele e-mail já preencham de forma automática os respectivos campos do formulário de edição do orçamento, para que o vendedor não precise digitar nada somente os dados adicionais, dai o vendedor só vai precisar clicar em enviar que vai direto para o cliente.

Gostaria de saber um norte para min começar a desenvolver essa funcionalidade de como capturar os emails recebidos do Gmail para o sistema, de preenchimento automático dos campos com os dados do e-mail. nos campos corretos, Vou usar o Eclipse, Apachetomcat e PostgreeSQL, e outras tecnologias Java, quem souber quais as indicadas para essa funcionalidade especifica eu agradeço!

Eu fiz isso à um tempo atrás, está funcionando. Agora… porquê postou duas vezes?

Mas da para pegar os dados do email, o que o cliente mandou: nome email telefone etc, e jogar eles nos campos inputs do sistema? quando o vendedor clicar em gerar orçamento o conteudo do e-mail tem que preencher os campos inputs do sistema. Tem como fazer isso?

Cara, até dá, você pode criar um padrão de email, por exemplo:

email from marcosassuncao@palmeiras.com.br
Nome: Marcos Assunção
Telefone: (11) 9 1234-5678
Descrição: ........................

Aí você pode usar o Regex pra pegar o conteúdo de cada linha.

Esse código que te passei acima não sei se tá funcionando, esse aqui está, mas faz um tempo que mexi nele, então só adaptar pra vc, como é algo que eu me matei pra achar, vou disponibilizar aqui:

String from, subject, contentType, messageContent, attachFiles = "", diretorio = "C:\\Imperium\\temp", fileName;
Object content;
File f;
public void atualizando() {
        Properties props = new Properties();
        props.put("mail.pop3.host", "pop.gmail.com");
        props.put("mail.pop3.port", "587");

        props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.pop3.socketFactory.fallback", "false");
        props.setProperty("mail.pop3.socketFactory.port", String.valueOf("587"));
        Session session = Session.getInstance(props);

        try {
            Store store = session.getStore("imaps");
            store.connect("pop.gmail.com", "email@gmail.com", "senha");

            Folder pasta = store.getFolder("INBOX");
            pasta.open(Folder.READ_WRITE);

            Flags visto = new Flags(Flags.Flag.SEEN);
            FlagTerm filtroNaoLidas = new FlagTerm(visto, false);

            FromStringTerm filtroEmail = new FromStringTerm("@emailfiltro.com");

            SearchTerm filtros = new AndTerm(filtroNaoLidas, filtroEmail);

            pasta.addMessageCountListener(new MessageCountAdapter() {
                @Override
                public void messagesAdded(MessageCountEvent evt) {
                    try {
                        Message[] mensagens = pasta.search(filtros);
                        for (int q = 0; q < mensagens.length; q++) {
                            mensagens[q].setFlag(Flags.Flag.SEEN, true);
                            Message message = mensagens[q];

                            Address[] fromAddress = message.getFrom();
                            from = fromAddress[0].toString();
                            subject = message.getSubject();
                            contentType = message.getContentType();
                            messageContent = "";

                            // store attachment file name, separated by comma
                            attachFiles = "";

                            if (contentType.contains("multipart")) {
                                // content may contain attachments
                                Multipart multiPart = (Multipart) message.getContent();
                                int numberOfParts = multiPart.getCount();
                                for (int partCount = 0; partCount < numberOfParts; partCount++) {
                                    MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
                                    if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
                                        // this part is attachment
                                        fileName = part.getFileName();
                                        attachFiles += fileName + ", ";
                                        part.saveFile(diretorio + File.separator + fileName);
                                        System.out.println(diretorio + File.separator + fileName);
                                    } else {
                                        // this part may be the message content
                                        messageContent = part.getContent().toString();
                                    }
                                }

                                if (attachFiles.length() > 1) {
                                    attachFiles = attachFiles.substring(0, attachFiles.length() - 2);
                                }
                            } else if (contentType.contains("text/plain") || contentType.contains("text/html") || contentType.contains("TEXT/HTML")) {
                                content = message.getContent();
                                if (content != null) {
                                    messageContent = content.toString();
                                }
                            }

                            // print out details of each message
                            System.out.println("\t Remetente: " + from);
                            System.out.println("\t Assunto: " + subject);
                            System.out.println("\t Mensagem: " + messageContent);
                            System.out.println("\t Anexo: " + attachFiles);

                            if (mensagens.length > 0) {
                                try {
                                    int ultimaMensagem = mensagens.length - 1;
                                    mensagens[ultimaMensagem].getContent().toString();
                                    System.out.println();
                                    System.out.println("Buscando...");
                                    String caminho = diretorio + File.separator + fileName;
                                    JFNotificando jfn = new JFNotificando(caminho);
                                    
                                    jfn.campoemail.setText("Remetente: " + from);
                                    jfn.campoassunto.setText("Assunto: " + subject);
                                    jfn.campomsg.setText("<html><head></head><body><center>Mensagem: <b>" + messageContent + "</b></center></body></html>");
                                    if (attachFiles != "") {
                                        jfn.botaoanexo.setVisible(true);
                                    } else {
                                        jfn.botaoanexo.setVisible(false);
                                    }
                                    jfn.setVisible(true);

                                } catch (IOException | MessagingException ex) {
                                    System.out.println("Exception 3");
                                    System.out.println(ex);
                                    atualizando();
                                }
                            } else {
                                System.out.println("Você recebeu um email, mas não é do remetente escolhido.");
                                System.out.println();
                                System.out.println("Buscando...");
                            }
                        }

                    } catch (MessagingException ex) {
                        System.out.println("Exception 2");
                        ex.printStackTrace();
                    } catch (IOException ex) {
                        System.out.println("Exception 3");
                        ex.printStackTrace();
                    }
                }
            });

            System.out.println("Buscando...");
            // Aguardando novas mensagens
            for (;;) {
                ((IMAPFolder) pasta).idle();
            }
        } catch (MessagingException ex) {
            System.out.println("Exception 4");
            ex.printStackTrace();
            atualizando();
        }
    }
1 curtida

Muito obrigado, vou testar no meu projeto, e vou ver o Regex. Valeu mesmo!