我想发送两种电子邮件,并且可以共享一些逻辑。例如
parents.FirstOrDefault(e => e.Pos.Value.Equals("2")).Pos.Value = "new value";
以上是常用代码(例如sendEmail(Function customCode)),下面是向foo发送电子邮件的自定义代码
try {
MimeMessage msg = javaMailService.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg, true, DEFAULT_ENCODING);
//custom code here ...
} catch (MessagingException e) {
logger.error("build email fail", e);
} catch (Exception e) {
logger.error("send email fail", e);
}
我想要这个效果,
logger.info("send count mail to {}", toFoo);
helper.setFrom(sender);
helper.setTo(toFoo);
helper.setSubject("Foo Subject");
String content = generateFooContent(foo); //use fooTemplate.ftl
helper.setText(content, true);
javaMailService.send(msg);
然后调用Function fooFunc = ()->{logger.info("send count mail to {}", toFoo);
helper.setFrom(sender);
helper.setTo(toFoo);
helper.setSubject("Foo");
String content = generateFooContent(foo);
helper.setText(content, true);
javaMailService.send(msg);}
方法,
sendEmail
如果我想发送条形消息,
sendEmail(fooFunc);
在java8中可以实现这个吗?如果可以怎么做?
答案 0 :(得分:3)
您的“功能”有一个签名:
void doStuff(MimeMessageHelper helper)
我们已经拥有其中之一 - 它被称为Consumer<MimeMessageHelper>
。
所以:
final Consumer<MimeMessageHelper> messageCreator = ...
try {
MimeMessage msg = javaMailService.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(msg, true, DEFAULT_ENCODING);
messageCreator.accept(helper);
javaMailService.send(msg);
} catch (MessagingException e) {
logger.error("build email fail", e);
} catch (Exception e) {
logger.error("send email fail", e);
}
现在,要定义您的sender
,只需使用:
BiConsumer<MimeMessageHelper> fooFunc = helper -> {
logger.info("send count mail to {}", toFoo);
helper.setFrom(sender);
helper.setTo(toFoo);
helper.setSubject("Foo");
String content = generateFooContent(foo);
helper.setText(content, true);
}
P.S。请注意我的格式。
答案 1 :(得分:0)
感谢@Boris the Spider,它确实有效,见下文
private void sendFooHtmlMessage(List<Foo> body) {
BiConsumer<MimeMessage,MimeMessageHelper> fooFunc = (msg,helper) -> {
logger.info("send foo mail to {}", toFoo);
try {
helper.setTo(toFoo);
helper.setSubject("Foo Subject");
String content = generateFooContent(body);
helper.setText(content, true);
javaMailService.send(msg);
} catch (Exception e) {
}
};
sendMessage(fooFunc);
}
private void sendMessage(BiConsumer<MimeMessage,MimeMessageHelper> consumer) {
try {
final MimeMessage msg = javaMailService.createMimeMessage();
final MimeMessageHelper helper = new MimeMessageHelper(msg, true, DEFAULT_ENCODING);
helper.setFrom(sender);
consumer.accept(msg, helper);
} catch (MessagingException e) {
logger.error("build email failed", e);
} catch (Exception e) {
logger.error("send email failed", e);
}
}
但仍缺少某些内容,请参阅上面的代码我必须在fooFunc
中捕获异常,实际上我想抛出它,因为共同的sendMesage
会捕获这些异常。
所以我采用另一种方式,见下文
public interface SendMessageAction {
void action(MimeMessage msg, MimeMessageHelper helper) throws MessagingException;
}
private void sendMessage(SendMessageAction action) {
//...
}
private void sendFooHtmlMessage(List<Foo> body) {
SendMessageAction fooAction = (msg, helper) -> {
logger.info("send foo mail to {}", toFoo);
//...
};
sendMessage(fooAction);
}