java - 如何使用 java 在 postfix 的 milter 中复制电子邮件
问题描述
我在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);
}
解决方案
推荐阅读
- c# - CrystalQuartz 在作为 Windows 服务运行时不工作
- java - 尝试在单击时更改按钮名称
- react-native - highcharts事件加载函数中的访问状态变量
- excel - 创建某个值旁边的所有单元格的列表
- c# - 如何忽略自定义属性中方法的执行?
- java - IntelliJ 中的 glassfish 以错误的编码开始
- javascript - Highcharts:柱形范围图,条形高度与 y 轴上的区间高度相同
- javascript - 画布事件侦听器不起作用
- javascript - 在有状态和无状态组件中使用 Props
- sql-server - 查询分析两个不同数据库中的两个表并返回其中一个表中不存在列值的位置