[英]Base64 HTML embedded images not showing when mailed
我正在嵌入已經在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)”任何幫助將不勝感激!
我偶然發現了同樣的問題,解決方案相當復雜。 可以在電子郵件中嵌入圖像。 問題是,由於一些奇怪的原因,base64編碼的圖像不能包含新行(超奇怪!我知道)。 我猜你正在使用Matt Gallagher的NSData + Base64? 我也是! 此類別創建多行base64字符串。 該類別中的代碼是
- (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;
}
通過將NewBase64Encode的第三個參數替換為false,您將獲得單行base64字符串,這對我有用。 我最終在類別中創建了一個新功能(只是為了不打破其他任何東西!)。
- (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附加到電子郵件中。 但是,並非所有電子郵件客戶端都會顯示嵌入的圖像。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.