class Mail::AttachmentsList
def []=(name, value)
def []=(name, value) encoded_name = Mail::Encodings.decode_encode name, :encode default_values = { :content_type => "#{set_mime_type(name)}; filename=\"#{encoded_name}\"", :content_transfer_encoding => "#{guess_encoding}", :content_disposition => "#{@content_disposition_type}; filename=\"#{encoded_name}\"" } if value.is_a?(Hash) if path = value.delete(:filename) value[:content] ||= File.open(path, 'rb') { |f| f.read } end default_values[:body] = value.delete(:content) if value[:content] default_values[:body] = value.delete(:data) if value[:data] encoding = value.delete(:transfer_encoding) || value.delete(:encoding) if encoding if Mail::Encodings.defined? encoding default_values[:content_transfer_encoding] = encoding else raise "Do not know how to handle Content Transfer Encoding #{encoding}, please choose either quoted-printable or base64" end end if value[:mime_type] default_values[:content_type] = value.delete(:mime_type) @mime_type = MiniMime.lookup_by_content_type(default_values[:content_type]) default_values[:content_transfer_encoding] ||= guess_encoding end hash = default_values.merge(value) else default_values[:body] = value hash = default_values end if hash[:body].respond_to? :force_encoding and hash[:body].respond_to? :valid_encoding? if not hash[:body].valid_encoding? and default_values[:content_transfer_encoding].casecmp('binary').zero? hash[:body] = hash[:body].dup if hash[:body].frozen? hash[:body].force_encoding("BINARY") end end attachment = Part.new(hash) attachment.add_content_id(hash[:content_id]) @parts_list << attachment end