I'm trying to send an email with an attachement that is a zip file. However I don't actually have a file. I create a String that is extremely large, which I want to attach to a MimeMessage as a zip file. The problem is that MimeBodyPart takes an InputStream, but I have an OutputStream at this point.
Here is what I've tried so far (note imports are at the end):
/**
* Create the MimeMessage that will be sent as an email
*/
private static MimeMessage createMime(String attachmentString,
String attachmentName, String from, String subject,
List toEmailAddresses) {
MimeMessage msg = new MimeMessage();
MimeBodyPart part = null;
try {
FileOutputStream outStream = new FileOutputStream
("out.zip");
ZipOutputStream zipOut = new ZipOutputStream(outStream);
zipOut.setMethod(ZipOutputStream.DEFLATED);
ZipEntry zipEntry = new ZipEntry(attachmentName);
zipOut.putNextEntry(zipEntry);
zipOut.write(attachmentString.getBytes("US-ASCII"));
zipOut.flush();
part = new MimeBodyPart();
part.putByteStream(zipOut);
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ie) {
ie.printStackTrace();
}
part.addHeader(Constants.contentType, "application/x-zip-compressed");
part.setEncoding(MimePart.BASE64);
part.setDisposition(MimePart.ATTACHMENT);
part.setFileName("ZipFile.txt");
msg.setContent(part, "");
msg.addHeader(Header.SUBJECT, subject);
if (toEmailAddresses != null && !toEmailAddresses.isEmpty()) {
int emailSize = toEmailAddresses.size();
InternetAddress[] to = new InternetAddress[emailSize];
for (int i = 0; i < emailSize; i++) {
String email = (String)toEmailAddresses.get(i);
if (email != null) {
to[i] = new InternetAddress(email);
}
}
msg.addRecipients(MimeMessage.TO, to);
}
msg.addHeader(Header.FROM, from);
return msg;
}
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import com.ibm.network.mail.smtp.protocol.CoreProtocolBean;
import com.ibm.network.mail.smtp.event.MessageEvent;
import com.ibm.network.mail.smtp.event.StatusEvent;
import com.ibm.network.mail.smtp.event.StatusListener;
import com.ibm.network.mail.base.Constants;
import com.ibm.network.mail.base.InternetAddress;
import com.ibm.network.mail.base.Header;
import com.ibm.network.mail.base.MimeMessage;
import com.ibm.network.mail.base.MimeBodyPart;
import com.ibm.network.mail.base.MimePart;