我正在尝试找出在电子邮件正文中添加图像而不是在 ios 中作为附件添加图像的最佳方法。
1)Apple提供了一个功能“ addAttachment ”,文档说,要在内容中添加任何图像,我们应该使用这个功能,但我尝试了这个功能,并发送了一封邮件,我在浏览器上查看,收到的是一个附件。
2)其次,许多博客说要使用base64 编码,但这也行不通,图像被作为损坏的图像发送。
所以朋友们,请帮助我找到最好的解决方案来做到这一点。
问候兰吉特
我正在尝试找出在电子邮件正文中添加图像而不是在 ios 中作为附件添加图像的最佳方法。
1)Apple提供了一个功能“ addAttachment ”,文档说,要在内容中添加任何图像,我们应该使用这个功能,但我尝试了这个功能,并发送了一封邮件,我在浏览器上查看,收到的是一个附件。
2)其次,许多博客说要使用base64 编码,但这也行不通,图像被作为损坏的图像发送。
所以朋友们,请帮助我找到最好的解决方案来做到这一点。
问候兰吉特
将电子邮件格式设置为 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];
斯威夫特 5
import MessageUI
func composeMail() {
let mailComposeVC = MFMailComposeViewController()
mailComposeVC.addAttachmentData(UIImage(named: "emailImage")!.jpegData(compressionQuality: 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.present(mailComposeVC, animated: true, completion: nil)
}
我最近刚刚为 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
}
我发现(至少在我的情况下)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];
}
附加信息:
感谢@Richard 对这个问题的正确答案。
需要注意的几件事: - 使用 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)}