我们正在使用apache commons邮件,特别是ImageHtmlEmail。我们真的想记录发送的每封电子邮件 - 完全按照发送的方式 - 在完美的世界中,它可以粘贴到sendmail中 - 包含所有标题和其他信息。
这主要是为了解决我们一直遇到的一些问题,它们以text / plain而不是text / html形式出现 - 而且因为记录系统发送的确切内容会很好日志。
基本上 - 梦想是一个函数,它将采用ImageHtmlEmail并返回一个字符串 - ,因为它将被发送。我知道我可以自己将它渲染成一个字符串,但是我绕过了库函数中所做的任何事情,这是我们真正想要捕获的。我尝试了BuildMimeMessage,然后尝试了getMimeMessage,我认为这可能是正确的第一步 - 但这让我想到了如何将mimemessage变成字符串的问题。
答案 0 :(得分:0)
我有一种解决方案 - 但是会喜欢更好的解决方案:
/**
* add content of this type
*
* @param builder
* @param content
*/
private static void addContent(final StringBuilder builder, final Object content)
{
try
{
if (content instanceof MimeMultipart)
{
final MimeMultipart multi = (MimeMultipart) content;
for (int i = 0; i < multi.getCount(); i++)
{
addContent(builder, ((MimeMultipart) content).getBodyPart(i));
}
}
else if (content instanceof MimeBodyPart)
{
final MimeBodyPart message = (MimeBodyPart) content;
final Enumeration<?> headers = message.getAllHeaderLines();
while (headers.hasMoreElements())
{
final String line = (String) headers.nextElement();
builder.append(line).append("\n");
}
addContent(builder, message.getContent());
}
else if (content instanceof String)
{
builder.append((String) content).append("\n");
}
else
{
System.out.println(content.getClass().getName());
throw CommonException.notImplementedYet();
}
}
catch (final Exception theException)
{
throw CommonException.insteadOf(theException);
}
}
/**
* get a string from an email
*
* @param email
* @return
*/
public static String fromHtmlEmail(final ImageHtmlEmail email)
{
return fromMimeMessage(email.getMimeMessage());
}
/**
* @param message
* @return a string from a mime message
*/
private static String fromMimeMessage(final MimeMessage message)
{
try
{
message.saveChanges();
final StringBuilder output = new StringBuilder();
final Enumeration<?> headers = message.getAllHeaderLines();
while (headers.hasMoreElements())
{
final String line = (String) headers.nextElement();
output.append(line).append("\n");
}
addContent(output, message.getContent());
return output.toString();
}
catch (final Exception theException)
{
throw CommonException.insteadOf(theException);
}
}
}