2012-04-24 13 views
7

Mam ten kod, który ma dołączyć plik HTML do wiadomości e-mail, a także wyświetlić zawartość pliku HTML w treści wiadomości e-mail. W pliku HTML pojawia się obrazek (reading.png), który jest wyświetlany w co drugiej linii. Jednak NIE jest on wyświetlany w treści wiadomości e-mail. Co muszę zrobić, aby go wyświetlić?Jak wyświetlić ten obraz w treści wiadomości e-mail?

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]; 

To jest HTML, który ma być wyświetlany:

<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: Nie sądzę, że jestem wystarczająco jasne ... W HTML, który jest wyświetlany w komunikacie wychodzącym, nie powinien być obrazem wyświetlanym w całym kodzie HTML. Nie mam problemu z dołączeniem obrazu do wiadomości, ale NIE pojawia się on w kodzie HTML, który jest tam, gdzie chcę. Więc wyraźne dołączanie obrazu do wiadomości nie działa ... (myślałem, że tak).

HTH ...

Odpowiedz

8

Zgadzam się z bazą 64 odpowiedzi. Oto moje rozwiązanie wykorzystujące wspólną kategorię podstawową 64 NSData.

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

prostu do wyjaśnienia sprawy, będę korzystać z przykładem.

<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> 

Gdzie ########## jest zamieniany na dane read.png po tym, jak został zakodowany w bazie 64.

+1

Co więc tutaj robię? Dlaczego potrzebuję całego HTML? Chcę tylko, aby obraz pojawił się w załączonym kodzie HTML ... – SpokaneDude

+1

Przepraszam, jeśli to było mylące. Potrzebujesz tylko '' w swoim HTML. Mój przykład to kompletna wiadomość e-mail w formacie HTML z opisem obrazu nad obrazem. –

+0

Cześć Jeffery ... dziękuję za odprawę ... więc, pozwól mi upewnić się, że rozumiem: Mogę zrobić coś takiego: "NSString encStr = [imageData base64EncodedString];", następnie zastąpić ###### # powyżej w twoim kodzie za pomocą "encStr"? (src = "data: image/png; base64, encStr" ...) – SpokaneDude

3

Dla obciążenia obrazu w wiadomości e-mail, tag obraz musi mieć pełny adres URL w nim, a obraz powinien być umieszczony na serwerze gdzieś tak, że może on zostać załadowany:

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

+2

Dobrze działające programy e-mailowe nie będą tego ładować. –

+1

Prawda. Nawet dzisiaj większość promocyjnych wiadomości e-mail jest wysyłana w ten sposób (Newegg, Microsoft itp.). –

+1

Rzeczywiście, aby wyświetlić obraz w wiadomości e-mail, właściwość src powinna zawierać dobrze uformowany adres URL. –

5

może wykorzystywać dane zakodowane w base64:

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

Musisz wprowadzić łańcuch stringWithFormat NSString i wstawić .png do NSString. Próbowałem twojego kodu w Xcode 3, zrobiłem moje instuctions i działało. Mam nadzieję, że to pomoże!

Powiązane problemy