2012-01-12 15 views
11
immagini

sto embedding che sono stati Base64 codificati in formato HTML come segue:Base64 HTML immagini incorporate non mostrare quando spedito

[html appendFormat:@"<html><body><p><b><img src=\"data:image/png;base64,%@\"></b></p></body><html>", base64ImageString]; 

Ho quindi creare una nuova email come segue:

MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init]; 
mailVC.mailComposeDelegate = self; 
[mailVC setMessageBody:html isHTML:YES]; 
[self presentModalViewController:mailVC animated:YES]; 

La incorporato l'immagine viene visualizzata nella nuova e-mail prima di essere inviata, ma non viene visualizzata in nessun client di posta elettronica a cui viene consegnata la posta. Penserei che il fatto che l'immagine venga visualizzata correttamente nella bozza mostra che il processo di incorporamento ha esito positivo, ma non capisco perché non viene mostrato quando viene consegnato. Osservando l'HTML non elaborato nella posta consegnata, viene visualizzato: src = "cid: (null)" Qualsiasi aiuto sarebbe apprezzato per favore!

+0

questo codice di risposta indica che ha funzionato da Apple a Yahoo Mail. http://stackoverflow.com/questions/1527351/how-to-add-an-uiimage-in-mailcomposer-sheet-of-mfmailcomposeviewcontroller-in-ip –

+0

Ottengo gli stessi risultati. Questo è con 5.0.1, forse ha funzionato prima. – dwery

+0

@dwery Anche io sto eseguendo 5.0.1. Per inciso, incollare HTML in una e-mail è sfortunatamente rotto anche sotto 5.0.1 – RunLoop

risposta

14

Mi sono imbattuto in questo stesso problema e la soluzione è stata piuttosto contorta. È possibile incorporare un'immagine in un'email. Il problema è che per qualche strana ragione l'immagine codificata in base64 non deve contenere nuove righe (super dispari! Lo so). Immagino che stai usando NSData + Base64 di Matt Gallagher? Così ero io! Questa categoria crea una stringa base64 multilinea. Il codice nella categoria è

- (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; 
} 

Sostituendo il terzo parametro di NewBase64Encode false otterrete una singola stringa linea di base 64 e che ha lavorato per me. Ho finito per creare una nuova funzione (solo per non rompere nient'altro!) All'interno della categoria.

- (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; 
} 

uso di questa funzione per codificare NSData del UIImage ha funzionato bene. I client di posta elettronica che ho testato finora mostrano tutti l'immagine incorporata. Spero che funzioni per te!

Modifica: come indicato nei commenti, questa soluzione è solo parziale. L'immagine verrà allegata come URI di dati nell'e-mail. Tuttavia, non tutti i client di posta elettronica visualizzeranno l'immagine incorporata.

+0

Speravo molto con la tua risposta, tuttavia ho appena provato su Gmail e non funziona .. – jcrowson

+0

Sì! L'immagine è lì. Tuttavia, sembra che Gmail non supporti gli URI di dati. – fsaint

+0

Ho dovuto deselezionare questo come risposta perché le immagini incorporate in questo modo non sono visualizzate in Outlook, anche se sono mostrate in Mail su un Mac. – RunLoop

Problemi correlati