1

iPhone アプリで .txt が添付された短いメールを作成して送信しました。

  1. 添付ファイルの長さが約 10 行であれば、GMail は問題なく開きます。

  2. 20 行以上になると、GMail が停止し、添付ファイルを開くことも、添付ファイルをダウンロードすることも、メールを転送することさえできなくなります。

  3. また、同じメールを同僚に送信し、同僚が Mac OS メール クライアントで開いた場合、すべて問題なく動作します。

たとえば、次はテキスト ファイルの内容です (この長さは GMail で問題なく開きます)。

ACCELEROMETER READINGS
-0.0724487,-0.941833,-0.235458,2009-07-11 15:18:46 -0700
-0.0724487,-0.941833,-0.271683,2009-07-11 15:18:47 -0700
-0.0724487,-0.923721,-0.253571,2009-07-11 15:18:48 -0700
-0.0543365,-0.923721,-0.326019,2009-07-11 15:18:49 -0700
-0.0724487,-0.959946,-0.181122,2009-07-11 15:18:50 -0700
-0.0543365,-0.923721,-0.253571,2009-07-11 15:18:51 -0700
-0.108673,-0.923721,-0.380356,2009-07-11 15:18:52 -0700
-0.0724487,-0.923721,-0.271683,2009-07-11 15:18:53 -0700

GPS READINGS

HEADING READINGS
211.421,2009-07-11 15:18:46 -0700
206.421,2009-07-11 15:18:49 -0700
184.421,2009-07-11 15:18:50 -0700
195.421,2009-07-11 15:18:51 -0700
198.421,2009-07-11 15:18:53 -0700

ファイルがこのサイズの 2 倍の場合、GMail はそれを処理できませんが、もう一度メールは処理できます。では、何が問題なのだろうか?以下のようにメールを作成しました。

SKPSMTPMessage *testMsg = [[SKPSMTPMessage alloc] init];
testMsg.fromEmail = @"founders@gmail.com";
testMsg.toEmail = @"andrewljohnson@trailbehind.com";
testMsg.relayHost = @"smtp3.webfaction.com";
testMsg.requiresAuth = YES;
testMsg.login = @"andrewljohnson";
testMsg.pass = @"********";
testMsg.subject = @"iPhone Instrument Readings";
testMsg.wantsSecure = YES; // smtp.gmail.com doesn't work without TLS!
testMsg.delegate = self;

NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey, @"Hey Kevin,\nHere are some GPS readings for you to filter.\n\nLove, \nTrailBehind",kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil];
NSData *fileData = [NSData dataWithContentsOfFile:fileName];    
NSDictionary *attached = [NSDictionary dictionaryWithObjectsAndKeys:@"text/directory;\r\n\tx-unix-mode=0644;\r\n\tname=\"readings.txt\"",kSKPSMTPPartContentTypeKey, @"attachment;\r\n\tfilename=\"readings.txt\"",kSKPSMTPPartContentDispositionKey,[fileData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil];

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

6 に答える 6

1

メッセージを送信するときに何が送信されているかを正確に確認するには、WireSharkを使用することをお勧めします。次に、通常のメールクライアントを使用して同じメッセージを(再びGMailに)送信し、違いが何であるか、および添付ファイルをダウンロードできるかどうかを確認します。

私の推測では、メッセージの送信方法については、GMailが不満を言っているが、友人のSMTPサーバーはそうではないという、完全に準拠していないものがあると思います。受信側のクライアントであるIMOよりも、サーバーに関係している可能性があります。

もう1つ試してみるのは、IMAPクライアントをGMailアカウントに接続することです。その場合、添付ファイルを取得できますか?

于 2009-07-11T22:34:35.353 に答える
1

使用していますが、改行を追加[fileData encodeBase64ForData]するという関数もあります。encodeBase64ForDataWrappedおそらく、代わりにそれを呼び出す必要があります.添付ファイルが十分に長い場合、長いbase64行が誰かを混乱させます.

于 2009-07-21T03:44:12.463 に答える
1

私は友達です - 私は pop.gmail.com を使って受信メールを取得し、smtp.gmail.com を Mail for Mac OS X 経由の送信メールに使用しています。

于 2009-07-11T22:50:51.450 に答える
0

データをサーバーにアップロードし、ユーザーにメールでファイルへのリンクを提供することを検討しましたか? それはあなたの現在のアプローチからかなり大きな変化になることを私は知っています.そしてそれにはサーバーが必要です.

大きな添付ファイルの問題を回避するための最良の方法かもしれません.添付ファイルのサイズの上限がメールホストによって異なることは知っていますが、私の学校では4MBのようです...

幸運を!

于 2009-07-12T01:10:10.367 に答える
0

基本的に、MIME 添付ファイルは疑わしいものです。MIME 仕様を取得し、それに対して再確認してください。私の記憶が正しければ、CRNL には特定の区切りの意味があるため、セミコロンの後に \r\n を付けるべきではありません。私はしばらく MIME 仕様を見ていないので、大丈夫かもしれません。それはまさに私が始めるところです。

添付ファイル内のディレクトリ内のファイルではなく、プレーンテキスト ファイルとして添付してみてください。また、ディレクトリ名に .txt サフィックスが付いているのも奇妙です。それは rx メール サーバーにとって紛らわしいのでしょうか。

どの添付ファイルを解析できるかに関して、すべてのメール サーバーが異なるレベルの忠実度を持っていることに注意してください。それらの制限を回避しなければならない場合があります。

于 2009-07-12T02:21:14.537 に答える
-1

問題は、電子メールの連絡先リストをやり取りするために定義されたタイプである MIME タイプ "text/directory" でマークされた添付ファイルがあることだと思います。( RFCを参照)

何が起こっているのかというと、一部の電子メール クライアントはテキスト/ディレクトリ MIME タイプの .txt 添付ファイルをプレーン テキスト ファイルとして扱っており、GPS 座標のリストが実際には電話番号とか。

「text/directory」を「text/plain」に変更してみてください。

于 2009-07-18T02:14:58.103 に答える