2009-07-18 11 views
3

Ich verwende das folgende Wörterbuch, um einen MIME-Header zu erstellen, um eine E-Mail zu senden, die eine Textdatei anfügt. Es erzeugt die E-Mail unter dem Code. Warum ist alles verstümmelt? Irgendwelche MIME-Experten da draußen?Mein schlechter MIME: Der Code ist Obj-C, aber die Frage ist nicht sprachspezifisch - sehr heikel

Auch die Antwort ist nicht so einfach wie Sie Base64 Codierung ist. Wenn ich es von "Inline" zu "Anhang" ändere, ist der E-Mail-Anhang beschädigt, wenn er an Google Mail gesendet wird, aber die Datei ist in Ordnung und kann geöffnet werden, wenn sie über Google Mail läuft, aber auf einem Mac von Mail geöffnet wird. Wenn die Textdatei sehr klein ist, funktioniert sie auch gut mit Google Mail.

Hier ist eine frühere Formulierung dieser unbeantworteten Frage. Ich habe den Code ein bisschen in diesem Beispiel geändert, um zu verhindern, was ich denken könnte falsche Fährten sein: GMail won't open .txt attachment created by iPhone App, Depending on Size - I think There's a Bug in my 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]; 

die E-Mail

--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-- 

Antwort

2

Wenn das ist, was Ihre Base64 Ausgabe aussieht, sein falsch; Es sollte in 76-stellige Zeilen für E-Mails verpackt werden. Es sieht auch aus wie etwas Leerzeichen hinzugefügt (wahrscheinlich aufgrund der nicht eingewickelten)

Setzen Sie auch Content-Transfer-Encoding? Ich sehe die Zeilen, die den Inhaltstyp und die Inhaltsdisposition festlegen, aber ohne die Inhaltsübertragungscodierung erhalten Sie den Standard (7bit) ..., der nur den codierten MIME anzeigt. Was ist passiert?

Ich schlage vor, Ihre rohe Nachrichtenausgabe (z. B. "Original anzeigen" in Google Mail) gegen RFC 2045 insbesondere §6 und §6.8 zu überprüfen.

Wenn dies Ihre Frage nicht löst, bearbeiten Sie bitte, um die rohe Nachricht einzuschließen.

+0

Yup, es wäre ein * viel * einfacher zu debuggen, wenn die unverarbeiteten Nachrichtendaten verfügbar wären. –

+0

Hallo, ich habe eine rohe Nachricht zu der Frage hinzugefügt. Irgendwelche Gedanken darüber, was passiert? Es sieht so aus, als wären die Daten falsch kodiert, aber ich bin mir nicht sicher, wie ich es richtig kodiere. –

+0

Auch wenn es hilft, scheint der Anhang in Thunderbird OK zu öffnen, aber es ist auch ein anderer Anhangstitel "1.3" angehängt, der leer zu sein scheint. –