Мой плохой MIME: Кодекс Obj-C, но вопрос не зависит от языка - очень сложно - PullRequest
3 голосов
/ 18 июля 2009

Я использую следующий словарь для создания заголовка MIME, чтобы отправить электронное письмо с текстовым файлом. Это производит электронную почту под кодом. Почему все искажено? Есть какие-нибудь эксперты MIME?

Кроме того, ответ не так прост, как вы его кодируете с помощью Base64. Если я поменяю его со «встроенного» на «вложение», вложение электронной почты будет повреждено при отправке в веб-почту Gmail, но файл в порядке и его можно нормально открыть, если он проходит через GMail, но открывается программой Mail на Mac. Кроме того, если текстовый файл очень маленький, он отлично работает и на GMail.

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

NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:
  @"text/plain", kSKPSMTPPartContentTypeKey,
  @"Hey Kevin,\nHere are some gps readings for you to filter.\nLove,\nTrailBehind", kSKPSMTPPartMessageKey,
  @"8bit", kSKPSMTPPartContentTransferEncodingKey, nil];

NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *gpsFilePath = [[@"/tracks/" stringByAppendingString:[track title]] stringByAppendingString:@"/accelerometerReadings.txt"];
gpsFilePath = [[paths objectAtIndex:0] stringByAppendingString: gpsFilePath];

NSData *fileData = [NSData dataWithContentsOfFile:gpsFilePath];
NSDictionary *attached = [NSDictionary dictionaryWithObjectsAndKeys:
  @"text/plain;", kSKPSMTPPartContentTypeKey,
  @"inline;\r\tfilename=\"accelerometerReadings.txt\"", kSKPSMTPPartContentDispositionKey,
  [fileData encodeBase64ForData], kSKPSMTPPartMessageKey,
  @"base64", kSKPSMTPPartContentTransferEncodingKey, nil];

testMsg.parts = [NSArray arrayWithObjects:plainPart, attached, nil];
[testMsg send];

электронная почта

--SKPSMTPMessage--Separator--Delimiter
Content-Type: text/plain
Content-Transfer-Encoding: 8bit

Hey Kevin,
Here are some gps readings for you to filter.
Love,
TrailBehind
--SKPSMTPMessage--Separator--Delimiter
Content-Disposition: attachment;    filename="track.gpx"
Content-Type: text/plain;
Content-Transfer-Encoding: base64

PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIiA/PjxncHggeG1sbnM9Imh0dHA6Ly93d3cudG9wb2dyYWZpeC5jb20vR1BYLzEvMSIgY3JlYXRvcj0iVHJhaWxCZWhpbmQiIHZlcnNpb249IjEuMSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnRvcG9ncmFmaXguY29tL0dQWC8xLzEgaHR0cDovL3d3dy50b3BvZ3JhZml4LmNvbS9HUFgvMS8xL2dweC54eHNkIj4KICA8dHJrPgogICAgPG5hbWU+TXkgVHJhY2sgLSAwNy0yMi0yMDA5IDA2OjQxUE08L25hbWU+CiAgICA8dHJrc2VnPgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTcxNjAiIGxvbj0iLTEyMC4xNjg4NTgiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTcwNzMiIGxvbj0iLTEyMC4xNjg4MTQiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTcwNzMiIGxvbj0iLTEyMC4xNjg4MTQiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTcwNDciIGxvbj0iLTEyMC4xNjg3NjYiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTcwMTYiIGxvbj0iLTEyMC4xNjg3MTQiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY5NjEiIGxvbj0iLTEyMC4xNjg2NDMiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY5NDAiIGxvbj0iLTEyMC4xN!
 jg2MTgiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY4OTIiIGxvbj0iLTEyMC4xNjg1NjUiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY4MjkiIGxvbj0iLTEyMC4xNjg0NzAiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY3NjUiIGxvbj0iLTEyMC4xNjgzODciPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY3MDgiIGxvbj0iLTEyMC4xNjgyNjAiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY2OTAiIGxvbj0iLTEyMC4xNjgyMDYiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY2NTkiIGxvbj0iLTEyMC4xNjgxNjEiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY2NDciIGxvbj0iLTEyMC4xNjgxNDkiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY1OTciIGxvbj0iLTEyMC4xNjgwNjciPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY1MzQiIGxvbj0iLTEyMC4xNjc5NDIiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY1MzQiIGxvbj0iLTEyMC4xNjc5NDIiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY1MDEiIGxvbj0iLTEyMC4xNjc4OTYiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY0MjciIGxvbj0iLTEyMC4xNjc4NDUiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTY0MDAiIGxvbj0iLTEyMC4xN!
 jc3ODUiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTYzNjMiIGxvbj0iLTE
yMC4xNjc3NDUiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTYzMDkiIGxvbj0iLTEyMC4xNjc3MTUiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTYyMzkiIGxvbj0iLTEyMC4xNjc2MjEiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTYyMzkiIGxvbj0iLTEyMC4xNjc2MjEiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTYyMTQiIGxvbj0iLTEyMC4xNjc1MDkiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTYyMDgiIGxvbj0iLTEyMC4xNjczNjgiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTYyMTUiIGxvbj0iLTEyMC4xNjcyOTciPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTYyMTUiIGxvbj0iLTEyMC4xNjcyOTciPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTYxOTQiIGxvbj0iLTEyMC4xNjcxODEiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTYwNzciIGxvbj0iLTEyMC4xNjcyNTMiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTYwMzIiIGxvbj0iLTEyMC4xNjcyMzQiPjwvdHJrcHQ+CgogICAgICA8dHJrcHQgbGF0PSIzOS4zMTU5ODMiIGxvbj0iLTEyMC4xNjcxOTEiPjwvdHJrcHQ+CgogICAgPC90cmtzZWc+CiAgPC90cms+CjwvZ3B4Pgo=
--SKPSMTPMessage--Separator--Delimiter

--SKPSMTPMessage--Separator--Delimiter--

1 Ответ

2 голосов
/ 18 июля 2009

Если это то, на что похож ваш вывод Base64, это неправильно; он должен быть заключен в 76-символьные строки для электронной почты. Кроме того, это выглядит как добавление пробелов (возможно, из-за того, что они не переносятся)

Кроме того, вы устанавливаете кодировку передачи контента? Я вижу строки, устанавливающие тип контента и расположение контента, но без кодировки передачи контента вы получите значение по умолчанию (7 бит) ... которое будет просто отображать закодированный MIME. Что и происходит.

Я предлагаю проверить ваши исходные сообщения (например, «показать оригинал» в gmail) по RFC 2045 §6 и §6.8, в частности.

Если это не решит ваш вопрос, отредактируйте, чтобы включить необработанное сообщение.

...