Почта MIME не показывает некоторые вложения в формате pdf и .doc

Здравствуйте, это мой первый пост на этом сайте.

Теперь я столкнулся со странной проблемой с MIME. Я работаю над написанием почтовых файлов emlx. (задача c, какао) теперь у меня нет проблем с показом изображений в почте. проблема в том, что половина моих вложений .doc и pdf не отображаются в сообщении.

Пример оформления.

MessageLength in Bytes(i.e 8556)

From: some@email
To: some@email2
Subject: mailsubject
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="somerandomgeneratedstring"

--somerandomgeneratedstring
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Body Text(not html body)

--somerandomgeneratedstring
Content-Type: application/msword; name="somefile.doc"
Content-Disposition: attachment; filename="somefile.doc"
Content-Transfer-Encoding: base64

[base64 encoded data]

--somerandomgeneratedstring--

PlistStructure

Текстовое тело всегда отображается правильно. Проблема в том, что некоторые вложения текстовых файлов, такие как .doc и pdf, не отображаются, я запускаю один и тот же код для нескольких текстовых файлов, и некоторые работают, а некоторые нет, я понятия не имею, почему. все картинки работают. Чего я не понимаю, так это того, что если я использую те же данные, которые не будут работать для MIME, и записываю их в виде файла на свой рабочий стол, файл отображается правильно.

Есть что-то, что я упускаю? Есть ли что-то, о чем я должен позаботиться при кодировании таких файлов в base64? если да, то почему некоторые файлы работают, а другие нет? (источник в двоичном формате, я кодирую с использованием nsdata base64encoding в Xcode) Я несколько раз просматривал документацию mime и, похоже, не могу найти решение. Кто-нибудь может дать мне несколько советов или предложений?

РЕДАКТИРОВАТЬ: боже мой, я забыл об этом. Проблема заключалась в том, что у меня была проблема с первой строкой, длиной в байтах, после того, как я исправил, что это сработало. Извините за потраченное время :(


person user3694446    schedule 31.05.2014    source источник


Ответы (1)


Вам нужно избавиться от пустой строки между заголовками верхнего уровня MIME-Version и Content-Type. Заголовки и тело MIME разделены пустой строкой, поэтому ваш Content-Type фактически игнорируется как заголовок и вместо этого обрабатывается как содержимое тела.

From: some@email
To: some@email2
Subject: mailsubject
MIME-Version: 1.0
                    <-- get rid of this blank line
Content-Type: multipart/mixed; boundary="somerandomgeneratedstring"

Обновление: поскольку эта проблема больше не является фактором, единственным оставшимся фактором, который вы еще не показали, являются фактические данные base64. Вероятно, он каким-то образом искажен, что препятствует правильному декодированию. Все остальное, что вы показали, соответствует действительности.

person Remy Lebeau    schedule 31.05.2014
comment
Извините, я просто неправильно написал здесь, в моем коде нет пустой строки. ошибка не в том, что я форматирую. он покажет некоторые файлы .doc, но не покажет другие, единственная разница заключается в кодированных данных и имени файла base64. - person user3694446; 31.05.2014
comment
я заменил все тело на (это случайное тело), ​​и теперь файлы отображаются, у меня есть ошибка в теле. Я опубликую решение, как только узнаю, что это такое. - person user3694446; 31.05.2014