2011-08-27 12 views
6

Sử dụng đá quý Mail (ví dụ: Rails + ActionMailer), có cách nào sạch để hiển thị tên người nhận không?Mail gem. Trích xuất tên và địa chỉ hiển thị của người nhận dưới dạng các giá trị riêng biệt

Tôi có thể lấy địa chỉ với:

mail.to.first 

Và tôi có thể lấy tên hiển thị định dạng + địa chỉ với:

mail.header_fields.select{ |f| f.name == "To" }.first.to_s 

Nhưng làm thế nào tôi có thể nhận được chỉ là một phần tên hiển thị (ví dụ trước số <>). Tôi biết ai đó sẽ đề xuất một Regex, nhưng đó không phải là những gì tôi đang tìm kiếm, vì sau đó tôi sẽ phải phân tích ra bất kỳ mã hóa, đó là một cái gì đó đá quý Mail có thể đã làm. Tôi là tác giả của một thư viện Mailer phổ biến trong PHP và nhận thức được những cạm bẫy của việc giả định bit trước khi <> là con người có thể đọc được, trong các tiêu đề, khi các ký tự 8 bit xuất hiện.

tôi có thể làm điều này:

mail.header_fields.select{ |f| f.name == "To" }.first.parse.individual_recipients.first.display_name.text_value 

Nhưng có phải là một cách tốt hơn? :)

Trả lời

18

Đã tìm ra, xin lỗi. Đối với bất kỳ ai khác chạm chủ đề này tìm kiếm các giải pháp:

mail[:to].display_names.first 
+0

câu trả lời của bạn giúp tôi tìm thấy một cách để tạo địa chỉ email với tên hiển thị có chứa dấu ngoặc nhọn và trích – tig

+1

Ngoài ra: 'email [: để] .addrs.first .display_name' (có thể hữu ích nếu bạn muốn giữ mối quan hệ tên-địa chỉ). –

+1

Tôi muốn đề cập đến rằng thông điệp [: đến] không phải là ở tất cả những điều tương tự như message.to - đó là xấu hổ !!! Đã cho tôi 2 giờ đào trong mã nguồn để tìm hiểu. – Konstantin