def []=(name, value)
default_values = { :content_type => "#{set_mime_type(name)}; filename=\"#{name}\"",
:content_transfer_encoding => "#{guess_encoding}",
:content_disposition => "#{@content_disposition_type}; filename=\"#{name}\"" }
if value.is_a?(Hash)
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 = MIME::Types[default_values[:content_type]].first
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].downcase == "binary"
hash[:body].force_encoding("BINARY")
end
end
attachment = Part.new(hash)
attachment.add_content_id(hash[:content_id])
@parts_list << attachment
end