Created
March 9, 2012 07:54
-
-
Save mechiland/2005577 to your computer and use it in GitHub Desktop.
Extract email reply
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# http://stackoverflow.com/questions/824205/while-processing-an-email-reply-how-can-i-ignore-any-email-client-specifics-th | |
def find_reply(email) | |
message_id = email.message_id('') | |
x_mailer = email.header_string('x-mailer') | |
# For optimization, this list could be sorted from most popular to least popular email client/service | |
rules = [ | |
[ 'Gmail', lambda { message_id =~ /.+gmail\.com>\z/}, /^.*#{FROM_NAME}\s+<#{FROM_ADDRESS}>\s*wrote:.*$/ ], | |
[ 'Yahoo! Mail', lambda { message_id =~ /.+yahoo\.com>\z/}, /^_+\nFrom: #{FROM_NAME} <#{FROM_ADDRESS}>$/ ], | |
[ 'Microsoft Live Mail/Hotmail', lambda { email.header_string('return-path') =~ /<.+@(hotmail|live).com>/}, /^Date:.+\nSubject:.+\nFrom: #{FROM_ADDRESS}$/ ], | |
[ 'Outlook Express', lambda { x_mailer =~ /Microsoft Outlook Express/ }, /^----- Original Message -----$/ ], | |
[ 'Outlook', lambda { x_mailer =~ /Microsoft Office Outlook/ }, /^\s*_+\s*\nFrom: #{FROM_NAME}.*$/ ], | |
# TODO: other email clients/services | |
# Generic fallback | |
[ nil, lambda { true }, /^.*#{FROM_ADDRESS}.*$/ ] | |
] | |
# Default to using the whole body as the reply (maybe the user deleted the original message when they replied?) | |
notes = email.body | |
source = nil | |
# Try to detect which email service/client sent this message | |
rules.find do |r| | |
if r[1].call | |
# Try to extract the reply. If we find it, save it and cancel the search. | |
reply_match = email.body.match(r[2]) | |
if reply_match | |
notes = email.body[0, reply_match.begin(0)] | |
source = r[0] | |
next true | |
end | |
end | |
end | |
[notes.strip, source] | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment