When files are uploaded to our cloud file server, we wanted to send notification email per file with its own unique email address. I will discuss how to have so many unique email address without creating a user on mail server for each file and scale out the solution in some later blog. People can just hit reply button on the generated notification email and comment on the uploaded file. When reply email reaches back the server we want to extract the comment that user added after stripping out the quoted reply form the mail client and add the clean comment to file. Seems like an easy problem isnt it, but unfortunately there is no easy way to detect the quoted reply from an incoming email because different mail clients use different way to quote a reply. On top of it quoted reply of html emails are different than plain text quoted replies.
##### Please do not write below this line #####
Hi kalpesh,
The issue has been updated.
Updated by: Kris Katta
Comment added: this is a test comment
Kris Katta's Reply..
This is a test reply
To track the status of your request and set up a profile for yourself, follow the link below:
Now all that is left to extract the mail header so using some regex you can strip that. I have handled thunderbird and outlook and will soon add yahoo/hotmail. Below is some sample code.
- Angle Brackets "> xxx zzz"
- "---Original Message---"
- "On such-and-such day, so-and-so wrote:"
- html email reply in thunderbird uses blockquote tags.
- yahoo/hotmail uses some div tags
Hi kalpesh,
The issue has been updated.
Updated by: Kris Katta
Comment added: this is a test comment
Kris Katta's Reply..
This is a test reply
To track the status of your request and set up a profile for yourself, follow the link below:
Now all that is left to extract the mail header so using some regex you can strip that. I have handled thunderbird and outlook and will soon add yahoo/hotmail. Below is some sample code.
/** * @author kpatel */ public class QuotedReplyExtractor { public static final String
REPLY_MARKER = "--- Please reply ABOVE THIS LINE to comment on this file ---"; private static final List
patterns = new ArrayList (); static { patterns .add(Pattern.compile(".*on.*?wrote:", Pattern.CASE_INSENSITIVE)); patterns.add(Pattern.compile("-+original\\s+message-+\\s*", Pattern.CASE_INSENSITIVE)); } public String stripQuotedReply(String comment) { int startIndex = comment.indexOf(REPLY_MARKER); if (startIndex > 0) { comment = comment.substring(0, startIndex); } for (Pattern pattern : patterns) { Matcher matcher = pattern.matcher(comment); if (matcher.find()) { startIndex = matcher.start(); comment = comment.substring(0, startIndex); } } return comment; } }
Very good! =)
ReplyDelete