2012-04-24 64 views
7

Tôi có mã này, nghĩa vụ phải đính kèm tệp HTML vào email và cũng hiển thị nội dung của tệp HTML trong phần nội dung của email. Có một hình ảnh (reading.png) được tham chiếu trong tệp HTML được hiển thị trên mỗi dòng khác. Tuy nhiên, nó KHÔNG được hiển thị trong phần thân của email. Tôi phải làm gì để làm cho nó hiển thị?Làm cách nào để hiển thị hình ảnh này trong phần nội dung email của tôi?

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

Đây là HTML mà là để được hiển thị:

<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: Tôi không nghĩ rằng tôi đã đủ rõ ràng ... Trong HTML được hiển thị trong tin nhắn gửi đi, có phải là một hình ảnh xuất hiện trên toàn bộ HTML. Tôi không có vấn đề gì khi đính kèm hình ảnh vào tin nhắn, nhưng nó KHÔNG xuất hiện trong HTML, nơi tôi muốn nó. Vì vậy, rõ ràng gắn hình ảnh vào tin nhắn không hoạt động ... (tôi nghĩ nó sẽ).

HTH ...

Trả lời

8

tôi đồng ý với câu trả lời cơ bản 64. Đây là giải pháp của tôi bằng cách sử dụng một loại NSData cơ sở 64 phổ biến.

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

Chỉ cần làm rõ điều này, tôi sẽ sử dụng ví dụ của bạn.

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

Trường hợp ########## được thay thế bằng dữ liệu của reading.png sau khi được mã hóa 64 cơ sở.

+1

Vì vậy, tôi đang làm gì ở đây? Tại sao tôi cần tất cả HTML? Tất cả những gì tôi muốn làm là đưa hình ảnh xuất hiện trong HTML đính kèm ... – SpokaneDude

+1

Xin lỗi nếu điều này gây nhầm lẫn. Bạn chỉ cần ' 'trong HTML của mình. Ví dụ của tôi là một thông báo email HTML hoàn chỉnh với mô tả hình ảnh phía trên hình ảnh. –

+0

Xin chào Jeffery ... cảm ơn vì đã kiểm tra lại ... vì vậy, hãy để tôi đảm bảo rằng tôi hiểu điều này: Tôi có thể làm một cái gì đó như thế này: "NSString encStr = [imageData base64EncodedString];", sau đó thay thế ###### # ở trên trong mã của bạn với "encStr"? (src = "data: image/png; base64, encStr" ...) – SpokaneDude

3

Đối với một tải hình ảnh trong một thư điện tử, các thẻ hình ảnh phải có một url đầy đủ trong nó, và hình ảnh nên được đặt trên một máy chủ ở đâu đó để nó có thể được nạp:

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

+2

Và các chương trình email hoạt động tốt sẽ từ chối tải chương trình đó. –

+1

Đúng. Và thậm chí ngày nay hầu hết các email quảng cáo đều được gửi theo cách đó (Newegg, Microsoft, v.v.) –

+1

Thật vậy để hiển thị hình ảnh trong email, thuộc tính src phải chứa url được định dạng tốt –

5

lẽ bạn có thể sử dụng dữ liệu được mã hóa trong base64:

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

Bạn phải nhập vào chuỗi NSStringWithFormat và chèn .png vào NSString. Tôi đã thử mã của bạn trong Xcode 3, đã instuctions của tôi, và nó đã làm việc. Hy vọng nó giúp!

Các vấn đề liên quan