Подтвердить что ты не робот

Как добавить изображение в тело электронной почты с помощью MFMailComposeViewController

Я пытаюсь найти лучший способ добавить изображение внутри тела письма, а не как приложение в ios.

1) Apple предоставила функцию " addAttachment", и в документе говорится, что для добавления любого изображения в контент мы должны использовать эту функцию, но я попробовал эту функцию и отправил почту, Я проверил в своем браузере, он был получен как вложение.

2) Во-вторых, многие блоги говорят, что используют кодировку base64,, но это также не работает, изображение отправляется как сломанное.

Итак, друзья, пожалуйста, помогите мне найти лучшее доступное решение для этого.

Отношения Ранджит

4b9b3361

Ответ 1

Установите формат электронной почты в формате 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];

Свифта

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)

    }

Ответ 2

Я недавно просмотрел это для 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
}

Ответ 3

Я обнаружил, что (по крайней мере, в моем случае) PNG будет работать в компоновщике сообщений, но НЕ, когда сообщение будет открыто/получено пользователем.

Композитор Dandily показ логотипа PNG-изображение!

Viewer Не так много изображений логотипа здесь.

(Иногда будет светло-синий контур, где должно быть изображение.)

Используя нижнюю строку HTML-кода и преобразование ниже, похожее на трюк.


Строка HTML тела сообщения с использованием JPEG

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 Target = 8.0
  • Устройство iOS = 9.1
  • Я ужасно с HTML!

Спасибо @Richard за ПРАВИЛЬНЫЙ ответ на этот вопрос.

Ответ 4

Несколько заметок:  - Использовать 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)}