Apache james mailet无尽循环
问题描述:
我试图将我的第一个示例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";
}
}
我在做什么错?
答
您使用的匹配 “全部”,即
<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。