⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bayesiananalysis.java

📁 java mail,java mailjava mailjava mailjava mail
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        try {            analyzer.initSqlQueries(datasource.getConnection(), getMailetContext());        } catch (Exception e) {            throw new MessagingException("Exception initializing queries", e);        }                        try {            loadData(datasource.getConnection());        } catch (java.sql.SQLException se) {            throw new MessagingException("SQLException loading data", se);        }            }        /**     * Scans the mail and determines the spam probability.     *     * @param mail The Mail message to be scanned.     * @throws MessagingException if a problem arises     */    public void service(Mail mail) throws MessagingException {                try {            MimeMessage message = mail.getMessage();                        if (ignoreLocalSender) {                // ignore the message if the sender is local                if (mail.getSender() != null                        && getMailetContext().isLocalServer(mail.getSender().getHost())) {                    return;                }            }                        String [] headerArray = message.getHeader(headerName);            // ignore the message if already analyzed            if (headerArray != null && headerArray.length > 0) {                return;            }                        ByteArrayOutputStream baos = new ByteArrayOutputStream();                        double probability;                        if (message.getSize() < getMaxSize()) {                message.writeTo(baos);                probability = analyzer.computeSpamProbability(new BufferedReader(new StringReader(baos.toString())));            } else {                probability = 0.0;            }                        mail.setAttribute(MAIL_ATTRIBUTE_NAME, new Double(probability));            message.setHeader(headerName, Double.toString(probability));                        DecimalFormat probabilityForm = (DecimalFormat) DecimalFormat.getInstance();            probabilityForm.applyPattern("##0.##%");            String probabilityString = probabilityForm.format(probability);                        String senderString;            if (mail.getSender() == null) {                senderString = "null";            } else {                senderString = mail.getSender().toString();            }            if (probability > 0.1) {                log(headerName                        + ": "                        + probabilityString                        + "; From: "                        + senderString                        + "; Recipient(s): "                        + getAddressesString(mail.getRecipients()));                                appendToSubject(message,                        " [" + probabilityString                        + (probability > 0.9 ? " SPAM" : " spam") + "]");            }                        saveChanges(message);                    } catch (Exception e) {            log("Exception: "                    + e.getMessage(), e);            throw new MessagingException("Exception thrown", e);        }    }        private void loadData(Connection conn)    throws java.sql.SQLException {                try {            // this is synchronized to avoid concurrent update of the corpus            synchronized(JDBCBayesianAnalyzer.DATABASE_LOCK) {                analyzer.tokenCountsClear();                analyzer.loadHamNSpam(conn);                analyzer.buildCorpus();                analyzer.tokenCountsClear();            }                        log("BayesianAnalysis Corpus loaded");                        touchLastCorpusLoadTime();                    } finally {            if (conn != null) {                theJDBCUtil.closeJDBCConnection(conn);            }        }            }        private String getAddressesString(Collection addresses) {        if (addresses == null) {            return "null";        }                Iterator iter = addresses.iterator();        StringBuffer sb = new StringBuffer();        sb.append('[');        for (int i = 0; iter.hasNext(); i++) {            sb.append(iter.next());            if (i + 1 < addresses.size()) {                sb.append(", ");            }        }        sb.append(']');        return sb.toString();    }        private void appendToSubject(MimeMessage message, String toAppend) {        try {            String subject = message.getSubject();                        if (subject == null) {                message.setSubject(toAppend, "iso-8859-1");            } else {                message.setSubject(toAppend + " " + subject, "iso-8859-1");            }        } catch (MessagingException ex) {}    }        private void sendReplyFromPostmaster(Mail mail, String stringContent) throws MessagingException {        try {            MailAddress notifier = getMailetContext().getPostmaster();                        MailAddress senderMailAddress = mail.getSender();                        MimeMessage message = mail.getMessage();            //Create the reply message            MimeMessage reply = new MimeMessage(Session.getDefaultInstance(System.getProperties(), null));                        //Create the list of recipients in the Address[] format            InternetAddress[] rcptAddr = new InternetAddress[1];            rcptAddr[0] = senderMailAddress.toInternetAddress();            reply.setRecipients(Message.RecipientType.TO, rcptAddr);                        //Set the sender...            reply.setFrom(notifier.toInternetAddress());                        //Create the message body            MimeMultipart multipart = new MimeMultipart();            //Add message as the first mime body part            MimeBodyPart part = new MimeBodyPart();            part.setContent(stringContent, "text/plain");            part.setHeader(RFC2822Headers.CONTENT_TYPE, "text/plain");            multipart.addBodyPart(part);                        reply.setContent(multipart);            reply.setHeader(RFC2822Headers.CONTENT_TYPE, multipart.getContentType());                        //Create the list of recipients in our MailAddress format            Set recipients = new HashSet();            recipients.add(senderMailAddress);                        //Set additional headers            if (reply.getHeader(RFC2822Headers.DATE)==null){                reply.setHeader(RFC2822Headers.DATE, rfc822DateFormat.format(new java.util.Date()));            }            String subject = message.getSubject();            if (subject == null) {                subject = "";            }            if (subject.indexOf("Re:") == 0){                reply.setSubject(subject);            } else {                reply.setSubject("Re:" + subject);            }            reply.setHeader(RFC2822Headers.IN_REPLY_TO, message.getMessageID());                        //Send it off...            getMailetContext().sendMail(notifier, recipients, reply);        } catch (Exception e) {            log("Exception found sending reply", e);        }    }        /**     * Saves changes resetting the original message id.     */    private void saveChanges(MimeMessage message) throws MessagingException {        String messageId = message.getMessageID();        message.saveChanges();        if (messageId != null) {            message.setHeader(RFC2822Headers.MESSAGE_ID, messageId);        }    }    private static class CorpusLoader extends Thread {                private BayesianAnalysis analysis;                private CorpusLoader(BayesianAnalysis analysis) {            super("BayesianAnalysis Corpus Loader");            this.analysis = analysis;        }                /** Thread entry point.         */        public void run() {        analysis.log("CorpusLoader thread started: will wake up every " + CORPUS_RELOAD_INTERVAL + " ms");                try {            Thread.sleep(CORPUS_RELOAD_INTERVAL);            while (true) {                if (analysis.getLastCorpusLoadTime() < JDBCBayesianAnalyzer.getLastDatabaseUpdateTime()) {                    analysis.log("Reloading Corpus ...");                    try {                        analysis.loadData(analysis.datasource.getConnection());                        analysis.log("Corpus reloaded");                    } catch (java.sql.SQLException se) {                        analysis.log("SQLException: ", se);                    }                                    }                                if (Thread.interrupted()) {                    break;                }                Thread.sleep(CORPUS_RELOAD_INTERVAL);            }        }        catch (InterruptedException ex) {            interrupt();        }        }            }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -