I'm writing a
java pop3 Client app to Send / Read emails sending invoices to customers. I'm including a custom header with the invoice number as value during the email send. The code snippet for the same is given below:
Message msg = new MimeMessage(session);
msg.setFrom( new InternetAddress(from));
InternetAddress [] address = {new InternetAddress(to)};
InternetAddress [] replyto = {new InternetAddress(from)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(subject);
//msg.setSendDate(new Date());
msg.setReplyTo(replyto );
msg.setText(messageText);
// Header is a
string //msg.setHeader("Custom",header);
msg.addHeader("Custom",header);
msg.saveChanges();
Transport.send(msg);
The email scanning code is given below:
// Create empty properties
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
// Get the store
Store store = session.getStore("pop3");
store.connect(host, username, password);
// Get folder
POP3Folder folder = (POP3Folder) store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message[] msgs = folder.getMessages();
// Use a suitable FetchProfile
FetchProfile fp = new FetchProfile();
fp.add(UIDFolder.FetchProfileItem.UID);
fp.add(FetchProfile.Item.ENVELOPE);
fp.add("Custom");
folder.fetch(msgs, fp);
Message msg;
for (int i = 0; i < msgs.length; i++)
{
String uid = folder.getUID(msgs[i]);
log.info("UID :" + uid);
// if the UID is not available
if (! uids.IsAvailable(uid)) {
// Then fetch the message and push it to the array list
Address[] addrs;
Date dt;
// Get subject
String sub = msgs[i].getSubject();
// Get from address
addrs = msgs[i].getFrom();
String from = addrs[0].toString();
// Get send date
dt = msgs[i].getSentDate();
// Get the Header
String [] header = msgs[i].getHeader("Custom");
if (header.length> 0 ) {
log.info("Reached Here 2");
log.info("Header value is " + header[0]);
log.info("Reached Here 3");
}
log.info("The values are: " + from + "&" + sub);
//msgs[i].getHeader(arg0)
//Get the content of the message
Part messagePart = msgs[i];
Object content = messagePart.getContent();
// -- or its first body part if it is a multipart message --
if (content instanceof Multipart)
{
messagePart = ((Multipart)content).getBodyPart(0);
log.info("This is a Multipart Message");
}
// -- Get the content type --
String contentType = messagePart.getContentType();
log.info("Retrieving the message content");
String msgContent = "";
// -- If the content is plain text, we can print it --
if (contentType.startsWith("text/plain"))
{
InputStream is = messagePart.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String thisLine = reader.readLine();
while (thisLine != null)
{
msgContent += thisLine;
thisLine = reader.readLine();
}
}
But the Header retrieved is null in the following statement.
// Get the Header String [] header = msgs[i].getHeader("Custom");
Did I miss anything? Thank you for your time.