2012-04-24 14 views
7

Ho questo codice, che dovrebbe allegare un file HTML all'e-mail e anche visualizzare il contenuto del file HTML nel corpo dell'email. C'è un'immagine (reading.png) a cui si fa riferimento nel file HTML che viene visualizzata ogni altra riga. Tuttavia, NON viene visualizzato nel corpo dell'email. Cosa devo fare per farlo visualizzare?Come visualizzare questa immagine nel corpo della mia email?

if ([MFMailComposeViewController canSendMail]) { 

    MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init]; 
    mailer.mailComposeDelegate = self; // set delegate to notify us what's happen'in 

    [mailer setSubject:[NSString stringWithFormat: @"Site Readings for: %@", gSiteID.globalSiteID]]; 

    // add the image for the HTML 
    UIImage *toolImage = [UIImage imageNamed:@"reading.png"]; 
    NSData *imageData = UIImagePNGRepresentation(toolImage); 
    [mailer addAttachmentData:imageData mimeType:@"image/png" fileName:@"reading.png"]; 

    // attach file 
    NSString *file = [[NSBundle mainBundle] pathForResource:@"Surveyor" ofType:@"txt"]; 
    NSData *surveyorTxt= [NSData dataWithContentsOfFile: file]; 
    [mailer addAttachmentData: surveyorTxt mimeType:@"text/html" fileName: @"Surveyor.txt"]; 

    // display the file in the body of the email 
    NSString *reportBody; 
    reportBody = [[NSString alloc] initWithData:databuffer encoding:NSASCIIStringEncoding]; 
    [mailer setMessageBody: reportBody isHTML:true]; // indicate the body is html 

    [self presentModalViewController: mailer animated:TRUE]; 

Questo è il codice HTML che deve essere visualizzato:

<html> 
<head> 
<link rel='stylesheet' type='text/css' href='default.css'/> 
</head> 
<body> 
STA:&nbsp;TBM "J" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Elev:&nbsp;19.76<br>Desc:&nbsp;USGS Test Site 
<div> 
<table border class="boldtable"> 
<tr BGCOLOR="ADDAFE"> 
<th>STA&nbsp;</th> 
<th>BS&nbsp;</th> 
<th>HI&nbsp;</th> 
<th>FS&nbsp;</th> 
<th>ELEV&nbsp;</th> 
<th>Desc</th> 
</tr> 
<p><tr> 
<td> TBM "J"</td> 
<td></td><td></td><td></td> 
<td>19.76</td> 
<td>USGS Test Site</td> 
<p><tr 
><td><img src="reading.png" align=center></td><td>3.14</td><td valign="middle">22.90</td> 

UPDATE: Io non penso di essere stato abbastanza chiaro ... In HTML che viene visualizzato nel messaggio in uscita, non ci dovrebbe essere un'immagine che appare in tutto il codice HTML. Non ho alcun problema nel collegare l'immagine al messaggio, ma NON appare nel codice HTML, che è dove lo voglio. Quindi, l'allegata immagine al messaggio non funziona ... (pensavo che lo sarebbe).

HTH ...

risposta

8

sono d'accordo con la risposta di base 64. Ecco la mia soluzione utilizzando una categoria base 64 NSData comune.

static NSString *EmailBody(NSString *description, UIImage *image) 
{ 
    NSString *format = @"<html>" 
    @"<body>" 
    @"<p>%@</p>" 
    @"<p><b><img src='data:image/png;base64,%@'></b></p>" 
    @"</body>" 
    @"</html>"; 
    NSData *imageData = UIImagePNGRepresentation(image);  
    return [NSString stringWithFormat:format, description, [imageData base64EncodedString]]; 
} 

Giusto per chiarire le cose, userò il tuo esempio.

<html> 
<head> 
<link rel='stylesheet' type='text/css' href='default.css'/> 
</head> 
<body> 
STA:&nbsp;TBM "J" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Elev:&nbsp;19.76<br>Desc:&nbsp;USGS Test Site 
<div> 
<table border class="boldtable"> 
<tr BGCOLOR="ADDAFE"> 
<th>STA&nbsp;</th> 
<th>BS&nbsp;</th> 
<th>HI&nbsp;</th> 
<th>FS&nbsp;</th> 
<th>ELEV&nbsp;</th> 
<th>Desc</th> 
</tr> 
<p><tr> 
<td> TBM "J"</td> 
<td></td><td></td><td></td> 
<td>19.76</td> 
<td>USGS Test Site</td> 
<p><tr 
><td><img src="data:image/png;base64,##########" align=center></td><td>3.14</td><td valign="middle">22.90</td> 

Dove ########## è sostituito con i dati di reading.png dopo che è stato codificato base 64.

+1

Quindi cosa sto facendo qui? Perché ho bisogno di tutto l'HTML? Tutto quello che voglio fare è far apparire l'immagine nell'HTML allegato ... – SpokaneDude

+1

Scusa se questo è stato fonte di confusione. Hai solo bisogno di '' nel tuo codice HTML. Il mio esempio era un messaggio email HTML completo con una descrizione dell'immagine sopra l'immagine. –

+0

Ciao Jeffery ... grazie per avermi controllato ... quindi, assicurati di capirlo: posso fare qualcosa del genere: "NSString encStr = [imageData base64EncodedString];", quindi sostituire il ###### # sopra nel tuo codice con "encStr"? (src = "data: image/png; base64, encStr" ...) – SpokaneDude

3

Per un carico di immagini in una e-mail, il tag immagine deve avere un URL completo in esso, e l'immagine deve essere presente su un server da qualche parte in modo che possa essere caricato:

<img src="http://www.mydomain.com/reading.png" align=center>

+2

E i programmi di posta elettronica ben educati si rifiuteranno di caricarlo. –

+1

Vero. E anche oggi la maggior parte delle e-mail promozionali vengono inviate in questo modo (Newegg, Microsoft, ecc.) –

+1

Infatti per visualizzare l'immagine in e-mail, la proprietà src dovrebbe contenere l'url ben formato –

5

Forse è possibile utilizzare i dati codificati in base64:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA 
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO 
9TXL0Y4OHwAAAABJRU5ErkJggg==" align=center alt="reading"> 
0

È necessario immettere una stringa NSStringWithFormat e inserire il file .png nell'NSString. Ho provato il tuo codice in Xcode 3, ho fatto le mie istruzioni e ha funzionato. Spero che sia d'aiuto!

Problemi correlati