在电子邮件事件上调用java Rest Web服务

时间:2014-08-28 08:09:01

标签: java web-services rest

我有一个网络服务x暴露。如果我在我的电子邮件中收到一封邮件,其中包含我想要打电话的附件 这个webservice.I我不是要求代码。我在高层询问你的建议如何做到这一点?

1 个答案:

答案 0 :(得分:1)

  1. 你需要REST。所以 - 你不能使用org.apache.http.client库。 (其他方式,如果您将拥有Web服务,则可以使用wsimport创建WebService java-client。)
  2. 使用javax.mail库打开邮箱并迭代字母。
  3. 处理信件。标记或删除已处理的信件。
  4. 添加crontab / sheduler任务以运行您的应用。 (至于我,它比创建一个线程应用程序更好)。不要忘记使用run-one选项来防止双重执行。
  5. 这里有一些从邮箱消息中读取“* .xls”文件的代码示例:

        public void processEmail() throws MessagingException {
    
        Store emailStore = null;
        Folder emailFolder = null;
    
        try {
            // connecting
            Properties properties = new Properties();
            properties.setProperty("mail.store.protocol", "imaps");
            Session emailSession = Session.getDefaultInstance(properties);
    
            Main.getLog().debug("CONNECT TO : " + config.mailServer + " ["
                    + config.mailUser + "] DEBUG: "+config.debug);
    
            // check mailbox
            emailStore = emailSession.getStore("imaps");
            emailStore.connect(config.mailServer, config.mailUser,
                    config.mailPassword);
            Main.getLog().debug("CONNECT DONE");
    
            emailFolder = emailStore.getFolder("INBOX");
            emailFolder.open(Folder.READ_WRITE);
    
            Message[] messages = emailFolder.getMessages();
            Main.getLog().debug("RECEIVED " + messages.length + " MESSAGSES");
    
            // for each letter
            for (Message message : messages) {
                try {
                    Main.getLog().debug("\nPROCESS LETTER : "
                            + message.getSubject());
                    if (message.getFlags().contains(Flags.Flag.DELETED)) {                      
                        continue; // don't process such letters
                    }
    
                    if (message.getFlags().contains(Flags.Flag.SEEN)) {
                        continue; // don't process such letters
                    }
                    // 
                    Map<String, String> parseResult = new HashMap<String, String>();
                    String auditId = "";
    
                    // get file
                    if (message.getContent() instanceof Multipart) {
                        Multipart multipart = (Multipart) message.getContent();
                        for (int i = 0; i < multipart.getCount(); i++) {
                            BodyPart bodyPart = multipart.getBodyPart(i);
                            if (!Part.ATTACHMENT.equalsIgnoreCase(bodyPart
                                    .getDisposition())) {
                                continue;
                            }
                            // Process file
                            if (bodyPart.getFileName().contains(".xls")) {
                                auditId = maintainExcelFile(bodyPart.getInputStream());
                            }
                        }
                    } else if (message.getContent() instanceof BASE64DecoderStream) {
                        // Process file
                        if (message.getFileName().contains(".xls")) {
                            auditId = maintainExcelFile(((BASE64DecoderStream) message
                                    .getContent()));
                        }
                    }
                    if (!config.debug && auditId!=null && !auditId.equals("")) { 
                        message.setFlag(Flags.Flag.SEEN, true);
                    } 
                    if (!config.debug) {
                        sendAcceptMail(message, auditId);
                    }
                } catch (Exception e) {
                    // Process errors
                    if (!config.debug) {
                        message.setFlag(Flags.Flag.SEEN, true);
                        sendErrorMail(message, e);
                    }
                    Main.getLog().error(e.getMessage(), e);
                    throw new Exception(e);
                }
            }
        } catch (Exception e) {
            Main.getLog().error(e.getMessage(), e);
        } finally {
            emailFolder.close(true);
            emailStore.close();
        }
    }