aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer/lib/action_mailer/vendor/tmail-1.1.0/tmail/attachments.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionmailer/lib/action_mailer/vendor/tmail-1.1.0/tmail/attachments.rb')
-rw-r--r--actionmailer/lib/action_mailer/vendor/tmail-1.1.0/tmail/attachments.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/actionmailer/lib/action_mailer/vendor/tmail-1.1.0/tmail/attachments.rb b/actionmailer/lib/action_mailer/vendor/tmail-1.1.0/tmail/attachments.rb
new file mode 100644
index 0000000000..a8b8017cf9
--- /dev/null
+++ b/actionmailer/lib/action_mailer/vendor/tmail-1.1.0/tmail/attachments.rb
@@ -0,0 +1,47 @@
+=begin rdoc
+
+= Attachment handling class
+
+=end
+
+require 'stringio'
+
+module TMail
+ class Attachment < StringIO
+ attr_accessor :original_filename, :content_type
+ end
+
+ class Mail
+ def has_attachments?
+ multipart? && parts.any? { |part| attachment?(part) }
+ end
+
+ def attachment?(part)
+ (part['content-disposition'] && part['content-disposition'].disposition == "attachment") ||
+ part.header['content-type'].main_type != "text"
+ end
+
+ def attachments
+ if multipart?
+ parts.collect { |part|
+ if part.multipart?
+ part.attachments
+ elsif attachment?(part)
+ content = part.body # unquoted automatically by TMail#body
+ file_name = (part['content-location'] &&
+ part['content-location'].body) ||
+ part.sub_header("content-type", "name") ||
+ part.sub_header("content-disposition", "filename")
+
+ next if file_name.blank? || content.blank?
+
+ attachment = Attachment.new(content)
+ attachment.original_filename = file_name.strip
+ attachment.content_type = part.content_type
+ attachment
+ end
+ }.flatten.compact
+ end
+ end
+ end
+end