Package mireka.filter.dnsbl

Source Code of mireka.filter.dnsbl.RefuseBlacklistedRecipient$FilterImpl

package mireka.filter.dnsbl;

import java.util.ArrayList;
import java.util.List;

import mireka.filter.AbstractDataRecipientFilter;
import mireka.filter.DataRecipientFilterAdapter;
import mireka.filter.Filter;
import mireka.filter.FilterReply;
import mireka.filter.FilterType;
import mireka.filter.MailTransaction;
import mireka.filter.RecipientContext;
import mireka.smtp.EnhancedStatus;
import mireka.smtp.RejectExceptionExt;
import mireka.smtp.SmtpReplyTemplate;

public class RefuseBlacklistedRecipient implements FilterType {
    private final List<Dnsbl> blacklists = new ArrayList<Dnsbl>();
    private SmtpReplyTemplate smtpReplyTemplate = new SmtpReplyTemplate(530,
            "5.7.1",
            "Rejected: unauthenticated e-mail from {0} is restricted. "
                    + "Contact the postmaster for details.");

    public void addBlacklist(Dnsbl dnsbl) {
        if (dnsbl == null)
            throw new NullPointerException();
        blacklists.add(dnsbl);
    }

    @Override
    public Filter createInstance(MailTransaction mailTransaction) {
        DnsblsChecker dnsblChecker =
                new DnsblsChecker(blacklists, mailTransaction);
        FilterImpl filterInstance =
                new FilterImpl(mailTransaction, dnsblChecker);
        return new DataRecipientFilterAdapter(filterInstance, mailTransaction);
    }

    private class FilterImpl extends AbstractDataRecipientFilter {
        private final DnsblsChecker dnsblChecker;

        private FilterImpl(MailTransaction mailTransaction,
                DnsblsChecker dnsblChecker) {
            super(mailTransaction);
            this.dnsblChecker = dnsblChecker;
        }

        @Override
        public FilterReply verifyRecipient(RecipientContext recipientContext)
                throws RejectExceptionExt {
            DnsblResult dnsblResult = dnsblChecker.getResult();
            if (dnsblResult.isListed) {
                EnhancedStatus smtpReply = calculateSmtpReply(dnsblResult);
                throw new RejectExceptionExt(smtpReply);
            }
            return FilterReply.NEUTRAL;
        }

        private EnhancedStatus calculateSmtpReply(DnsblResult dnsblResult) {
            SmtpReplyTemplate reply =
                    dnsblResult.dnsbl.smtpReplyTemplate
                            .resolveDefaultsFrom(smtpReplyTemplate);
            reply = reply.format(mailTransaction.getRemoteInetAddress());
            return reply.toEnhancedStatus();
        }
    }
}
TOP

Related Classes of mireka.filter.dnsbl.RefuseBlacklistedRecipient$FilterImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.