簡體   English   中英

Base64 HTML嵌入圖像在郵寄時不顯示

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM