web-dev-qa-db-ja.com

MFMailComposeViewControllerを使用してメール本文に画像を追加する方法

私は、iOSの添付ファイルとしてではなく、メールの本文内に画像を追加する最良の方法を見つけようとしています。

1)Appleは関数 "addAttachment"を提供しており、ドキュメントに、コンテンツに画像を追加するには、この関数を使用する必要がありますが、私はその関数を試しました、メールを送ってブラウザで確認すると、添付ファイルとして届きました。

2)次に、多くのブログはbase64 encoding、を使用すると言っていますが、これも機能しません。画像は壊れた画像として送信されます。

だから、友達、これを行うために利用できる最善の解決策を見つけるのを手伝ってください。

よろしくランジット

23
Ranjit

メール形式をHTMLに設定します。このコードは私のアプリでうまく機能しています。

MFMailComposeViewController *emailDialog = [[MFMailComposeViewController alloc] init];

NSString *htmlMsg = @"<html><body><p>This is your message</p></body></html>";

NSData *jpegData = UIImageJPEGRepresentation(emailImage, 1.0);

NSString *fileName = @"test";
fileName = [fileName stringByAppendingPathExtension:@"jpeg"];
[emailDialog addAttachmentData:jpegData mimeType:@"image/jpeg" fileName:fileName];

emailDialog setSubject:@"email subject"];
[emailDialog setMessageBody:htmlMsg isHTML:YES];


[self presentModalViewController:emailDialog animated:YES];
[emailDialog release];

Swift

import MessageUI

    func composeMail() {

        let mailComposeVC = MFMailComposeViewController()

        mailComposeVC.addAttachmentData(UIImageJPEGRepresentation(UIImage(named: "emailImage")!, CGFloat(1.0))!, mimeType: "image/jpeg", fileName:  "test.jpeg")

        mailComposeVC.setSubject("Email Subject")

        mailComposeVC.setMessageBody("<html><body><p>This is your message</p></body></html>", isHTML: true)

        self.presentViewController(mailComposeVC, animated: true, completion: nil)

    }
61
msk

私は最近、Swiftについてこれを経験しました。

Swiftでメールに写真を追加する関数:

func postEmail() {
    var mail:MFMailComposeViewController = MFMailComposeViewController()
    mail.mailComposeDelegate = self
    mail.setSubject("your subject here")

    var image = // your image here
    var imageString = returnEmailStringBase64EncodedImage(image)
    var emailBody = "<img src='data:image/png;base64,\(imageString)' width='\(image.size.width)' height='\(image.size.height)'>"

    mail.setMessageBody(emailBody, isHTML:true)

    self.presentViewController(mail, animated: true, completion:nil)
}

フォーマットされた画像を返す関数:

func returnEmailStringBase64EncodedImage(image:UIImage) -> String {
    let imgData:NSData = UIImagePNGRepresentation(image)!;
    let dataString = imgData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
    return dataString
}
10
Richard

(少なくとも私の場合は)PNGがメッセージで機能することを発見しましたcomposerしかし、メッセージがユーザーによって開かれた/受信された場合は機能しません。

Composer ロゴのPNG画像を率直に表示!

ビューア ここにはそれほど多くのロゴ画像はありません。

(画像があるはずの場所に薄い青色の輪郭が表示されることがあります。)

以下のHTMLボディ文字列と以下の変換を使用すると、うまくいくようです。


JPEGを使用したメッセージ本文のHTML文字列

NSString *body = [NSString stringWithFormat:
                  @"\
                  <html>\
                    <body>\
                        Check out the App!\
                        <br>\
                        Isn't this a terriffic logo?!.\
                        <br>\
                        <img src = \"data:image/jpeg;base64,%@\" width = 100 height= 100>\
                        <br>\
                        <a href = \"%@\" > CLICK ITTTTTTT! </a>\
                    </body>\
                  </html>",
                  imageString, @"http://www.LOLamazingappLOL.com"];

画像をJPEGデータを含む文字列に変換

+ (NSString *)dataStringFromImage:(UIImage *)image
{
    NSData *imgData = UIImageJPEGRepresentation(image, 1);
    return [imgData base64EncodedStringWithOptions:kNilOptions];
}

追加情報:

  • iOSターゲット= 8.0
  • iOSデバイス= 9.1
  • 私はHTMLにひどいです!

この質問に対する正しい回答を@Richardに感謝します。

3
Andrew

注意事項:-addAttachmentDataを使用-setMessageBodyを使用し、isHTML:trueを設定

メール本文に手動で追加する必要はありません。 APIがそれを処理します。

func postEmail() {
var mail:MFMailComposeViewController = MFMailComposeViewController()
mail.mailComposeDelegate = self
mail.setSubject("your subject here")
var image = // your image here
var imageData = UIImageJPEGRepresentation(image, 1)
mail.addAttachmentData(imageData, mimeType:"image/jpeg", fileName:"Your Filename"
var emailBody = "<html><body><p>This is your message</p></body></html>"
mail.setMessageBody(emailBody, isHTML:true)

self.presentViewController(mail, animated: true, completion:nil)}
1
Ansyar Hafid