Как отличить загруженные вложения от вложений электронной почты при разборе входящих писем с гемом Thoughtbot Griddler?

У меня есть приложение, которое анализирует входящую электронную почту с драгоценным камнем Thoughtbot Griddler. В настоящее время мы не поддерживаем сохранение вложений, поэтому мы отправляем пользователям "электронное письмо с предупреждением", информирующее их о том, что мы еще не поддерживаем сохранение вложений.

Старая версия моего приложения (написанная на C++) могла различать "загруженные" вложения и "встроенные"(?) Вложения, такие как подписи электронной почты с изображениями; Однако я не уверен, как это сделать с Griddler.

Кто-то предположил, что свойство Content-Disposition в @headers может предложить способ их различения; однако из приведенного ниже вывода и вложенные (?) вложения (в этом случае подписи электронной почты с изображениями) и регулярно прикрепленный файл (braces.rb) имеют Content-Disposition: form-data.

Я застрял! Ниже представлены 3 вложения, к которым можно получить доступ через @email.attachments от Griddler. Первые два вложения - это подписи электронной почты с изображениями, а последнее - просто текстовый файл (braces.rb). Заранее спасибо за любые советы или предложения!

<ActionDispatch::Http::UploadedFile:0x007fe1c4207cd8 @tempfile=#<Tempfile:/tmp/RackMultipart20150131-27166-163vzl6>, @original_filename="C9FEA3DC-2D79-495C-84DD-F710F0FE9473_15_.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"attachment1\"; filename=\"C9FEA3DC-2D79-495C-84DD-F710F0FE9473_15_.png\"\r\nContent-Type: image/png\r\n">
<ActionDispatch::Http::UploadedFile:0x007fe1c4200190 @tempfile=#<Tempfile:/tmp/RackMultipart20150131-27166-1y1km7h>, @original_filename="C9FEA3DC-2D79-495C-84DD-F710F0FE9473_13_.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"attachment2\"; filename=\"C9FEA3DC-2D79-495C-84DD-F710F0FE9473_13_.png\"\r\nContent-Type: image/png\r\n"> 
<ActionDispatch::Http::UploadedFile:0x007fe1c4207ad0 @tempfile=#<Tempfile:/tmp/RackMultipart20150131-27166-1urxy75>, @original_filename="braces.rb", @content_type="text/plain", @headers="Content-Disposition: form-data; name=\"attachment3\"; filename=\"braces.rb\"\r\nContent-Type: text/plain\r\n">] 

1 ответ

У меня была похожая проблема с адаптером mailgun, и мне пришлось изменить этот адаптер, чтобы добавить поддержку встроенных изображений. Mailgun удаляет идентификатор содержимого из заголовков и создает специальные имена для сопоставления хэшей с идентификаторами содержимого. Если вы используете сервис mailgun, вы можете попробовать мои модификации с https://github.com/pejuko/griddler-mailgun. Просто измените ваш gemfile так, чтобы он содержал:

gem 'griddler-mailgun', github: 'pejuko/griddler-mailgun'

И тогда вы можете использовать что-то вроде:

if attachment.headers =~ /name="([^"]+)"/
  content_id = @email.content_id_map.invert[$1]
  if content_id.present? && content_id =~ /<([^>]+)>/
    content_id = $1
  end
end
Другие вопросы по тегам