2013-02-22 150 views
2

我试图将我的第一个示例mailet部署到apache james v2.3.2,但它进入无限循环,即使重新启动服务器后也会一次又一次地向我发送电子邮件。停止它的唯一方法是清理spool文件夹。Apache james mailet无尽循环

在config.xml我配置我的mailet如下:

<mailet match="All" class="MyMailet" onMailetException="ignore"> 
    <supportMailAddress>[email protected][mydomain].com</supportMailAddress> 
</mailet> 

我所有的mailet确实是电子邮件,支持@ [MYDOMAIN] .com上的我@ mydomain的网站] .com邮箱:

public class MyMailet extends GenericMailet { 
    private MailAddress supportMailAddress; 

    public void init() throws ParseException { 
    supportMailAddress = new MailAddress(getInitParameter("supportMailAddress")); 
    } 

    public void service(Mail mail) throws MessagingException { 
    MailAddress sender = mail.getSender(); 
    MailAddress realMailbox = new MailAddress("[email protected][mydomain].com"); 

    try { 
     sendToRealMailbox(mail, realMailbox); 
    } catch (MessagingException me) { 
     me.printStackTrace(); 
    } catch (IOException ioe) { 
     ioe.printStackTrace(); 
    } 

    mail.setState(Mail.GHOST); 
    } 


    private void sendToRealMailbox(Mail mail, MailAddress realMailbox) throws MessagingException, IOException { 
    Properties props = System.getProperties(); 
    Session session = Session.getDefaultInstance(props); 
    MimeMessage message = new MimeMessage(session); 

    message.setFrom(supportMailAddress.toInternetAddress()); 
    message.setRecipient(Message.RecipientType.TO, realMailbox.toInternetAddress()); 
    message.setSubject("MyMailet: " + mail.getMessage().getSubject()); 
    message.setText("MyMailet: message body"); 
    message.setSentDate(new Date()); 

    Collection recipients = new Vector(); 
    recipients.add(realMailbox); 
    getMailetContext().sendMail(supportMailAddress, recipients, message); 
    } 

    public String getMailetInfo() { 
    return "MyMailet"; 
    } 
} 

我在做什么错?

回答

2

您使用的匹配 “全部”,即

<mailet match="All">

这告诉詹姆斯来运行这个mailet的所有电子邮件。因此,当您发送第一封电子邮件至[email protected][mydomain].com时,mailet会触发并发送电子邮件至[email protected][mydomain].com。进来的[email protected][mydomain].com电子邮件引起的mailet再次触发并发送另一封电子邮件给[email protected][mydomain].com,这将导致mailet的再次触发,等等

尝试使用“RecipientIs”匹配代替,即

<mailet match="[email protected][mydomain].com">

仅当电子邮件支持@ [mydomain] .com时,才会触发mailet。

看到这个list of James matchers with examples