d11*_*wtq 8 ruby actionmailer mail-gem
使用Mail gem(即Rails + ActionMailer),是否有一种干净的方式来获取收件人的显示名称?
我可以通过以下方式获取地址:
mail.to.first
Run Code Online (Sandbox Code Playgroud)
我可以使用以下格式获取格式化的显示名称+地址:
mail.header_fields.select{ |f| f.name == "To" }.first.to_s
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能得到显示名称部分(即在<和之前>).我知道有人会建议一个正则表达式,但这不是我想要的,因为我必须解析任何编码,这是Mail宝石可能已经做的事情.我是PHP中一个流行的Mailer库的作者,并且我知道在8位字符发挥作用时,在标题中假设前面的陷阱<并且>是人类可读的陷阱.
我可以做这个:
mail.header_fields.select{ |f| f.name == "To" }.first.parse.individual_recipients.first.display_name.text_value
Run Code Online (Sandbox Code Playgroud)
但必须有更好的方法吗?:)
d11*_*wtq 21
弄清楚,对不起.对于那个遇到这个线程寻找解决方案的人来说:
mail[:to].display_names.first
Run Code Online (Sandbox Code Playgroud)
问题是这个 gem 的括号访问和点访问是不同的。
来自文档:
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']
Run Code Online (Sandbox Code Playgroud)
因此,要获取显示名称,您可以使用#display_name
mail[:to].addrs.first.display_name #=> Mikel Lindsaar
Run Code Online (Sandbox Code Playgroud)
用于#address获取电子邮件地址
mail[:from].addrs.first.address #=> mikel@test.lindsaar.net
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2296 次 |
| 最近记录: |