2016-10-21 5 views
1

Скажет, у меня есть необработанное сообщение электронной почты в файл и я прочитал его какКольчуга камень рубина: как увидеть, если вложение рядного

m = Mail.read '/path/to/file' 

имеет вложение, один из которых является инлайн рис.

pic = m.attachments[0] 
=> #<Mail::Part:70130030888740, Multipart: false, Headers: <Content-Type: image/png; name="image001.png">, <Content-Transfer-Encoding: base64>, <Content-ID: <[email protected]>>> 

другие - это просто некоторые файлы.

Что мне нужно - это знать, является ли вложение встроенным или нет. Существует inline? метод, и для не встроенных приложений он работает как шарм

pdf = m.attachments[1] 
=> #<Mail::Part:70130031002140, Multipart: false, Headers: <Content-Type: application/pdf; name="blah blah blah blah 
pdf.inline? 
=> false 

Но давайте вернемся к нашему pic здесь:

pic.inline? 
=> nil 

Что это просто не правильно. Я также попытался

pdf['Content-Disposition'] 
=> #<Mail::Field 0x7f90d729b598 @charset="UTF-8" @name="Content-Disposition" @raw_value="Content-Disposition: attachment;\r\n\tfilename 

и

pic['Content-Disposition'] 
=> nil 

, который не является слишком хорошим.

Есть ли способ иметь истинное/ложное значение здесь?

ответ

1

В вашем случае на рисунке отсутствует заголовок Content-Disposition. Что делать, это немного отличается от стандартов (некоторые по умолчанию - attachment, некоторые - inline). Процитировать RFC 2183:

Content-Disposition - необязательное поле заголовка. В его отсутствие, MUA может использовать любой метод презентации, который он сочтет подходящим.

mail gem, кажется, по умолчанию attachment, так как это только проверяет, если Content-Disposition был явно установлен в inline.

Если вы хотите по умолчанию использовать inline, вы можете проверить, возвращает ли результат метода inline? что-нибудь еще, кроме false.

pic_is_inline = (pic.inline? != false) # pic.inline? returns nil 
# => true 

pdf_is_inline = (pdf.inline? != false) # pdf.inline? returns false 
# => false 

В конце концов, это до немного определена семантика, и вы должны быть достаточно осторожными, так как эти вещи, как правило, интерпретируется по-разному разными людьми. Когда вы принимаете почту из неизвестных источников, вы можете, например, проверьте, есть ли ссылка в явном Content-Disposition в почтовом ящике.

+0

спасибо! это действительно единственный вариант –

 Смежные вопросы

  • Нет связанных вопросов^_^