-
Notifications
You must be signed in to change notification settings - Fork 32
Open
Description
Hi,
In the following example notice how 'custom2' header is deleted while deleting 'custom1':
>> m=Mail.new :custom1 => 'test1', :custom2 => 'test2'
=> \#<Mail::Message:-621216768, Multipart: false, Headers: <custom1: test1>, <custom2: test2>>
>> m[:custom2]
=> #<Mail::Field:0xb5f1ecc0 @field=#<Mail::OptionalField:0xb5f1e504 @length=nil, @name="custom2", @tree=nil, @element=nil, @errors=[], @value="test2", @charset="UTF8">>
>> m[:custom1] = nil
=> nil
>> m[:custom2]
=> nil
The problem is caused by Mail::Field#<=> method. This method treats all custom fields as equal.
Quick monkey patch:
class Mail::Field
def <=>( other )
self_order = FIELD_ORDER.rindex(self.name.to_s.downcase) || 100
other_order = FIELD_ORDER.rindex(other.name.to_s.downcase) || 100
if self_order == 100 && self_order == other_order
self.name.to_s.downcase <=> other.name.to_s.downcase
else
self_order <=> other_order
end
end
end
Metadata
Metadata
Assignees
Labels
No labels