Extracting Header rows from .cfmail file
With a big node to Mr. Hartfield, below is a simplified cfscript function which will get you the header data from a .cfmail file. Most likely that you want to get out of the undelivr folder. Note, that you can also use your own mail params (starting with an X-) which will help you keep track of emails.
see below this code for an example of utilizing it.
public struct function parseEmail(required string filePath) { var emailStruct = {}; var properties = {}; if (findNoCase( 'Unix', cgi.SERVER_SOFTWARE)) { variables.OS = 'unix'; variables.seperator = chr(47); } else { variables.OS = 'windows'; variables.seperator = chr(92); } var mailFolder = server.coldfusion.rootdir && seperator && 'Mail' & amp; seperator; if (fileExists(arguments.filePath)) { properties = createObject( " java ", " java.lang.System ").getProperties(); properties.put(javacast( " string ", " mail.host "), javacast( " string ", " localhost ")); properties.put(javacast( " string ", " mail.transport.protocol "), javacast( " string ", " smtp ")); mailSession = createObject( " java ", " javax.mail.Session ").getDefaultInstance(properties, javacast( " null ", " ")); fileStream = createObject( " java ", " java.io.FileInputStream ").init(arguments.filePath); mimeMessage = createObject( " java ", " javax.mail.internet.MimeMessage ").init(mailSession, fileStream); headers = mimeMessage.getAllHeaderLines(); while (headers.hasMoreElements()) { curHeader = headers.nextElement(); emailStruct.headers[listFirst(curHeader, ':')] = listDeleteAt(curHeader, 1, ':'); } } return emailStruct; }
Now use it..
call it…
var undelivrFileArr = directoryList(mailFolder & seperator & 'Undelivr', false, 'name','*.cfmail') for (file in undelivrFileArr){ cfMailFileInfoStruct = parseEmail(file.Directory & file.fileName); curMailRecord = spoolerMessageGateway.getMessageSendAttemptsCount( messageUUID = cfMailFileInfoStruct.messageUUID, senderEmail = cfMailFileInfoStruct.from, recipientEmail= cfMailFileInfoStruct.to, messageSubject = cfMailFileInfoStruct.subject ); }
There you have it. a curMailRecord structure with naming conventions for the data you want to extract. (I used messageUUID as my example of an x-[custom param] example.
– Pete