package gov.nysenate.openleg.service.spotcheck.base;
import gov.nysenate.openleg.config.Environment;
import gov.nysenate.openleg.util.MailUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import javax.mail.*;
import java.io.File;
import java.io.IOException;
public abstract class BaseCheckMailService {
private static final Logger logger = LoggerFactory.getLogger(BaseCheckMailService.class);
@Autowired
protected Environment environment;
@Autowired
protected MailUtils mailUtils;
protected void moveToArchive(Folder sourceFolder, Folder archive, Message... messages) throws MessagingException {
sourceFolder.copyMessages(messages, archive);
for (Message message : messages) {
message.setFlag(Flags.Flag.DELETED, true);
}
sourceFolder.expunge();
}
protected void saveMessageBody(Message message, File file) throws MessagingException, IOException {
if (message.isMimeType("text/*")) {
FileUtils.write(file, (String) message.getContent());
} else if (message.isMimeType("multipart/*")) {
Multipart content = (Multipart) message.getContent();
for (int i = 0; i < content.getCount(); i++) {
Part part = content.getBodyPart(i);
if (!Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
logger.info("\tsaving body of {} to {}", message.getSubject(), file.getAbsolutePath());
FileUtils.write(file, (String) part.getContent());
}
}
}
}
protected void saveMessageAttachment(Message message, File file) throws MessagingException, IOException {
if (message.isMimeType("multipart/*")) {
Multipart content = (Multipart) message.getContent();
for (int i = 0; i < content.getCount(); i++) {
Part part = content.getBodyPart(i);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
logger.info("\tSaving " + part.getFileName() + " to " + file.getAbsolutePath());
String attachment = IOUtils.toString(part.getInputStream());
FileUtils.write(file, attachment);
}
}
}
}
}