7

MFMailComposeViewController 経由での csv 添付ファイルの送信に問題があります。問題なく送信される場合もありますが、他のユーザーにとっては、添付ファイルとしてではなく、電子メール内のインライン テキスト (改行の代わりに <br/> を使用) として送信されます。これは非常に奇妙です。私が間違っていることを知っている人はいますか?ここに私のコードのスニペットがあります:

MFMailComposeViewController *mailComposeViewController = [[MFMailComposeViewController alloc] init];
mailComposeViewController.mailComposeDelegate = self;

NSString *csv = @"foo,bar,blah,hello";
NSData *csvData = [csv dataUsingEncoding:NSUTF8StringEncoding];
[mailComposeViewController addAttachmentData:csvData mimeType:@"text/csv" fileName:@"testing.csv"];

[mailComposeViewController setSubject:@"testing sending csv attachment"];
[mailComposeViewController setMessageBody:@"csv file should be attached" isHTML:NO];
[self presentModalViewController:mailComposeViewController animated:YES];
4

6 に答える 6

10
-(IBAction)btnPressed:(id)sender {
    NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *docDir = [arrayPaths objectAtIndex:0];
    NSString *Path = [docDir stringByAppendingString:@"/CSVFile.csv"];
    NSData *csvData = [NSData dataWithContentsOfFile:Path]; 

    MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
    controller.mailComposeDelegate = self;

    [controller setSubject:@"For csv file..."];
    [controller setMessageBody:@"...csv file is hear.." isHTML:NO];
    [controller addAttachmentData:csvData mimeType:@"text/csv" fileName:@"CSVFile.csv"];
    [self presentModalViewController:controller animated:YES];
    [controller release];
}
于 2011-02-22T11:14:28.710 に答える
2

こんにちは、CSV ファイルを作成するためのサンプル コードを入れてメールに添付しますが、MessageUI.Framework を追加し、その関連ヘッダー「MessageUI/MessageUI.h」「MessageUI/MFMailComposeViewController.h」をインポートし、「MFMailComposeViewControllerDelegate」を委譲する必要があることを確認してください。 .この wl が他の人に役立つことを願っています

- (void)viewDidLoad {

arrCsv=[[NSArray alloc]initWithObjects:@"Hello",@"Hi",@"traun",@"fine",nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains

(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *fileName = [NSString stringWithFormat:@"%@/try.csv", documentsDirectory];

[[arrCsv componentsJoinedByString:@","] writeToFile:fileName atomically:YES encoding:NSUTF8StringEncoding error:NULL];

 }



-(ibAction)btnMail   {

 NSArray *arrayPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *docDir = [arrayPaths objectAtIndex:0];
NSString *Path = [docDir stringByAppendingString:@"/CSVFile.csv"];
NSData *csvData = [NSData dataWithContentsOfFile:Path]; 
MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:@"For csv file..."];
[controller setMessageBody:@"...csv file is hear.." isHTML:NO];
[controller addAttachmentData:csvData mimeType:@"text/csv" fileName:@"CSVFile.csv"];
[self presentModalViewController:controller animated:YES];
[controller release];

}


- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 
{   message.hidden = NO;
switch (result)
{
    case MFMailComposeResultCancelled:
        message.text = @"Result: canceled";
        break;
    case MFMailComposeResultSaved:
        message.text = @"Result: saved";
        break;
    case MFMailComposeResultSent:
        message.text = @"Result: sent";
        break;
    case MFMailComposeResultFailed:
        message.text = @"Result: failed";
        break;
    default:
        message.text = @"Result: not sent";
        break;
}
[self dismissModalViewControllerAnimated:YES];
}
于 2011-05-17T05:28:27.147 に答える
1

MIME タイプを「application/octet-stream」に設定すると、インライン添付ファイルを削除するトリックが実行されるはずです (私はまだファイルの拡張子に pdf という名前を付けています)。

于 2013-10-03T16:39:33.373 に答える
0

2番目のパラメータは、添付ファイルがインラインで表示されないようにするためのものでsetMessageBody:isHTML:ある必要があると思います。YES

于 2009-12-21T19:16:02.500 に答える
0

isHTML param を YES に設定しても、メッセージ本文がプレーン/テキストとして表現できる場合は、メッセージ本文をプレーン/テキストとして送信できます。また、プレーン/テキスト メッセージの添付ファイルは、一部の電子メール クライアント (Outlook) で常に正しく認識されるとは限りません。

私の場合、メッセージ本文にリンクを追加すると役立ちました。HTML タグを使用してテキストを太字にフォーマットすることもできます。トリッキー!

iPod 1G 3.1.3 でテスト済み。

于 2010-03-01T22:59:13.863 に答える
0

ここでは当てはまらないかもしれませんが、次の点に注意してください。

[NSString dataUsingEncoding:] 

指定されたエンコーディングへの変換が不可能な場合、有効だが空の NSData オブジェクトを返します。フルバージョンを使用することをお勧めします:

[NSString dataUsingEncoding: s allowLossyConversion: YES]

または、返されたデータの長さを確認してください。長さ 0 のデータ添付ファイルは、メール プロセスのどこかでトリミングされているようです。

于 2011-05-07T15:54:43.647 に答える