Rails 2.3 "inline_attachment" из-за некорректного размещения встроенных вложений - PullRequest
0 голосов
/ 16 июля 2011

Я нахожусь в точке, где вся электронная почта и ее части генерируются в правильном порядке и вложения ... за исключением одной мелочи.Параметр: part_container вставляет вложенные вложения над частью text / html вместо НИЖЕ.Если он выше, Thunderbird не будет ничего отображать, и в сообщении будет отображаться 2 внешних вложения.Если я вручную отредактирую электронное письмо и переместу встроенные части под текстовую / html-часть, он будет отлично отображаться.

part :content_type => 'multipart/alternative' do |copy|
    copy.part :content_type => 'text/plain' do |plain|
        plain.body = render(
            :file => "main.text.plain", 
            :body => {
                    :user => @user,
                    :text => docParse.to_plain_text
                    }
            )
    end
    copy.part :content_type => 'multipart/related' do |rel|
        rel.part :content_type => 'text/html' do |html|
            html.body = render(
                :file => "main.text.html",
                :body => {
                        :part_container => rel,
                        :user => @user,
                        :content => content,
                        :email_links => m.email_links,
                        :nav_image => m.nav_image
                        }
                )
        end
    end
end
m.attachments.each do |file|
    attachment :content_type => "application/octet-stream",
               :filename     => File.basename(file),
               :body         => File.read(file)
end

Чтобы быть понятным, гем inline_attachments прекрасно работает без какого-либо из этого кода - но это только когдаЯ отправляю электронное письмо без каких-либо внешних вложений (только встроенные изображения).Когда я хочу отправить электронное письмо в формате HTML со встроенными изображениями и внешними вложениями, я должен прибегнуть к этому.

РЕДАКТИРОВАТЬ: Для ясности, мой вопрос: как мне убедиться, что встроенные части вложениясоздаются после части text / html с использованием: part_container?

1 Ответ

1 голос
/ 22 июля 2011

Детали содержат массив деталей ...

rel.parts.unshift rel.parts.pop

По сути, электронное письмо состоит из «частей» ... эти части принадлежат массиву частей, и каждая часть может иметь свой собственный массив частей (вложенных частей). Видя, как аргумент: part_container из самоцвета inline_attachments создал детали в неправильном порядке (text / html part LAST вместо FIRST), я переупорядочил массив относительных частей, вытолкнув последний элемент part, который оказался текстом / HTML-часть (rel.parts.pop) и вставка его в качестве 1-го элемента в массив относительных частей (rel.parts.unshift)

т.е.,
рядные изображения часть
рядные изображения часть
рядные изображения часть
текст / html-часть

1012 * стали *

текст / html-часть
рядные изображения часть
рядные изображения часть
рядные изображения часть

И все отображается правильно.

Это последний скрипт со ссылкой на скрипт в моей задаче:

part :content_type => 'multipart/alternative' do |copy|
    copy.part :content_type => 'text/plain' do |plain|
        plain.body = render(
            :file => "main.text.plain", 
            :body => {
                    :user => @user,
                    :text => docParse.to_plain_text
                    }
            )
    end
    copy.part :content_type => 'multipart/related' do |rel|
        rel.part :content_type => 'text/html' do |html|
            html.body = render(
                :file => "main.text.html",
                :body => {
                        :part_container => rel,
                        :user => @user,
                        :content => content,
                        :email_links => m.email_links,
                        :nav_image => m.nav_image
                        }
                )
        end
        # Place the text/html part before all other inline images
        rel.parts.unshift rel.parts.pop
    end
end
m.attachments.each do |file|
    attachment :content_type => "application/octet-stream",
               :filename     => File.basename(file),
               :body         => File.read(file)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...