我在java中使用jmilter为后缀编写了一个milter代码(队列前过滤器) 。我想从原始电子邮件中复制并将其发送到防病毒服务器以检查电子邮件,然后保留原始电子邮件。
当杀毒软件通知电子邮件是干净的时,原始电子邮件将被释放。复制电子邮件很容易出错,因为我需要检查和解析电子邮件并创建一个 MimeMessage 对象。
有没有办法在不解析原始正文和标题的情况下复制电子邮件?
我不是指always_bcc
后缀中的选项。我想发送带有原始数据的电子邮件而不制作Mimemessage
.
我将正文和标题保存在 hashMap 中并传递给sendBccEmail
方法。sendBccEmail
解析正文并制作MimeMessage
然后发送电子邮件。
@Override
public void envrcpt(MilterContext context, List < String > recipients) throws MilterException {
// Keep body to append body data in other steps(because the data is sent chunk by chunk
if (isFirstChunk(context)) {
contextMap.put(context.id(), new HashMap < > ());
contextMap.get(context.id()).put("X-body", "");
}
}
@Override
public void header(MilterContext context, String headerName, String headerValue) throws MilterException {
logger.debug("<HEADER> headerName= {}, headerValue= {}", headerName, headerValue);
if (!isBccEmail(context)) {
contextMap.get(context.id()).put(headerName, headerValue);
}
super.header(context, headerName, headerValue);
}
@Override
public void body(MilterContext context, String bodyChunk) throws MilterException {
logger.debug("<BODY> bodyChunk= {}", bodyChunk);
if (!isBccEmail(context)) {
String body = contextMap.get(context.id()).get("X-body");
body += nullToEmptyString(bodyChunk);
contextMap.get(context.id()).put("X-body", body);
}
super.body(context, bodyChunk);
}
@Override
public void eom(MilterContext context, @Nullable String bodyChunk) throws MilterException {
logger.debug("<EOM> bodyChunk= {}", bodyChunk);
if (!isBccEmail(context)) {
String body = contextMap.get(context.id()).get("X-body");
body += nullToEmptyString(bodyChunk);
//send header hashMap and body as parameters
sendBccEmail(contextMap.get(context.id()), body);
}
super.eom(context, bodyChunk);
}