2012-01-12 23 views
11

を郵送するとき表示されない:Base64でHTML埋め込み画像私は次のようにHTMLにbase64エンコードされた画像を埋め込むい

[html appendFormat:@"<html><body><p><b><img src=\"data:image/png;base64,%@\"></b></p></body><html>", base64ImageString]; 

次のように私は、新しい電子メールを作成します。

MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init]; 
mailVC.mailComposeDelegate = self; 
[mailVC setMessageBody:html isHTML:YES]; 
[self presentModalViewController:mailVC animated:YES]; 

組み込みイメージは送信前に新しい電子メールに表示されますが、メールが配信される電子メールクライアントには表示されません。私は、画像がドラフトに正しく表示されているという事実は、埋め込みプロセスが成功したことを示していると思うだろうが、配信されたときになぜそれが表示されないのか分からない。配信されたメールのHTMLを見てみましょう:src = "cid:(null)"

+0

これはAppleがyahooメールにリンゴを働かせたというコードに言及しています。 http://stackoverflow.com/questions/1527351/how-to-add-an-uiimage-in-mailcomposer-sheet-of-mfmailcomposeviewcontroller-in-ip –

+0

私は同じ結果を得ています。それは5.0.1で、おそらくそれは前に働いた。 – dwery

+0

@dwery 5.0.1も実行しています。さて、電子メールにHTMLを貼り付けることは残念ながら5.0.1でも壊れています。 – RunLoop

答えて

14

私はこの同じ問題に遭遇し、解決策はむしろ畳み込まれていました。イメージを電子メールに埋め込むことは可能です。問題は、いくつかの奇妙な理由で、base64でエンコードされた画像に新しい行が含まれてはならないことです(超奇数!私は知っています)。 Matt GallagherのNSData + Base64を使用していると思いますか?私もそうでした!このカテゴリは、複数行のbase64文字列を作成します。カテゴリ内のコードを使用すると、単一ラインbase64文字列を取得し、それは私のために働いfalseにNewBase64Encodeの三番目のパラメータを置き換えることによって

- (NSString *)base64EncodedString 
{ 
    size_t outputLength; 
    char *outputBuffer = 
     NewBase64Encode([self bytes], [self length], true, &outputLength); 

    NSString *result = 
     [[NSString alloc] 
      initWithBytes:outputBuffer 
      length:outputLength 
      encoding:NSASCIIStringEncoding]; 
    free(outputBuffer); 
    return result; 
} 

です。私はカテゴリ内で新しい機能(他の何かを壊さないように!)を作成しました。

- (NSString *)base64EncodedStringSingleLine 
{ 
    size_t outputLength; 
    char *outputBuffer = 
    NewBase64Encode([self bytes], [self length], false, &outputLength); 

    NSString *result = 
    [[NSString alloc] 
    initWithBytes:outputBuffer 
    length:outputLength 
    encoding:NSASCIIStringEncoding]; 
    free(outputBuffer); 
    return result; 
} 

この関数を使用してUIImageのNSDataをエンコードすると正常に機能しました。これまでにテストした電子メールクライアントはすべて、埋め込まれたイメージを表示します。それがあなたのために働くことを望みます!

編集:コメントに指摘されているとおり、この解決策は一部に過ぎません。画像は電子メールのデータURIとして添付されます。ただし、すべての電子メールクライアントが埋め込みイメージを表示するわけではありません。

+0

私は非常にうまくいけばあなたの返信で、私はちょうどGmailでテストしたし、動作しません.. – jcrowson

+0

うん!イメージはそこにあります。しかし、GmailはデータURIをサポートしていないようです。 – fsaint

+0

このように埋め込まれた画像はOutlookの場合は表示されないため、Macのメールには表示されますが、このマークを解除しなければなりませんでした。 – RunLoop

関連する問題