3

我正在使用以下字典创建 MIME 标头,以发送附有文本文件的电子邮件。它在代码下方生成电子邮件。为什么一切都是乱码?那里有 MIME 专家吗?

此外,答案并不像您对它进行 Base64 编码那么简单。如果我将其从“内联”更改为“附件”,则电子邮件附件在发送到网络 Gmail 时已损坏,但文件没问题,如果通过 GMail 可以正常打开,但在 Mac 上由 Mail 打开。此外,如果文本文件非常小,它也可以在 GMail 上正常工作。

这是这个未回答问题的先前表述。我在这个示例中稍微更改了代码,以避免我认为可能是红鲱鱼:GMail 不会打开 iPhone 应用程序创建的 .txt 附件,取决于大小 - 我认为我的 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--
4

1 回答 1

2

如果这就是您的 Base64 输出的样子,那就错了;对于电子邮件,它应该被包装成 76 个字符的行。此外,它看起来像是添加了空格(可能是因为它没有被包装)

另外,您是否设置了内容传输编码?我看到设置内容类型和内容处置的行,但没有内容传输编码,您将获得默认值(7 位)......它只会显示编码的 MIME。这就是正在发生的事情。

I suggest checking your raw message output (e.g., "show original" in gmail) against RFC 2045 §6 and §6.8 in particular.

If this doesn't solve your question, please edit to include the raw message.

于 2009-07-18T04:52:18.447 回答