Почтовый камень. Извлечь отображаемое имя и адрес получателя как отдельные значения
Используя гем Mail (то есть Rails + ActionMailer), есть ли чистый способ получить отображаемое имя получателя?
Я могу получить адрес с:
mail.to.first
И я могу получить отформатированное отображаемое имя + адрес с помощью:
mail.header_fields.select{ |f| f.name == "To" }.first.to_s
Но как я могу получить только часть отображаемого имени (т.е. до <
а также >
). Я знаю, что кто-то собирается предложить Regex, но это не то, что я ищу, так как тогда мне придется анализировать любую кодировку, что, вероятно, уже делает гем Gem Mail. Я являюсь автором популярной библиотеки Mailer на PHP и знаю о подводных камнях, связанных с предположением о том, что нужно делать раньше. <
а также >
читается человеком в заголовках, когда в игру вступают 8-битные символы.
Я могу сделать это:
mail.header_fields.select{ |f| f.name == "To" }.first.parse.individual_recipients.first.display_name.text_value
Но должен быть лучший способ?:)
2 ответа
Разобрался, извини. Для всех, кто ищет эту тему, ищет решение:
mail[:to].display_names.first
Проблема в том, что доступ к скобкам и точечный доступ для этого драгоценного камня различаются.
Из документа :
mail = Mail.new
mail.to = 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
mail.to #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
mail[:to] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ToField:0x180e1c4
mail['to'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ToField:0x180e1c4
mail['To'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::ToField:0x180e1c4
mail[:to].encoded #=> 'To: Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net\r\n'
mail[:to].decoded #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>, ada@test.lindsaar.net'
mail[:to].addresses #=> ['mikel@test.lindsaar.net', 'ada@test.lindsaar.net']
mail[:to].formatted #=> ['Mikel Lindsaar <mikel@test.lindsaar.net>', 'ada@test.lindsaar.net']
Итак, чтобы получить отображаемое имя, вы можете использовать
#display_name
mail[:to].addrs.first.display_name #=> Mikel Lindsaar
Использовать
#address
чтобы получить адрес электронной почты
mail[:from].addrs.first.address #=> mikel@test.lindsaar.net