2012-04-24 110 views
7

我有這個代碼,它應該將HTML文件附加到電子郵件中,並在電子郵件正文中顯示HTML文件的內容。 HTML文件中引用了一個圖像(reading.png),該圖像每隔一行顯示一次。但是,它不會顯示在電子郵件的正文中。我需要做些什麼來展示它?如何讓這張圖片顯示在我的電子郵件正文中?

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

這是要顯示的HTML:

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

更新:我不認爲我很清楚......在其中顯示了傳出消息的HTML,有應該是整個HTML中出現的圖像。將圖片附加到郵件中沒有問題,但它不會出現在HTML中,這是我想要的地方。因此,清楚地將圖像附加到消息上是行不通的(我認爲它會)。

HTH ...

回答

8

我同意基地64答案。這是我的解決方案,使用常見的NSData base 64類別。

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

我想弄清楚的事情,我會用你的榜樣。

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

其中##########在基數64編碼後用reading.png的數據替換。

+1

所以我在這裏做什麼?爲什麼我需要所有的HTML?我想要做的就是讓圖像出現在附加的HTML中... – SpokaneDude 2012-04-24 19:46:31

+1

對不起,如果這是混亂。您只需在您的HTML中使用''。我的例子是一個完整的HTML電子郵件消息,描述了圖像上方的圖像。 – 2012-04-30 17:29:38

+0

您好傑弗瑞...感謝您檢查回...所以,讓我確保我明白這一點:我可以這樣做:「NSString encStr = [imageData base64EncodedString];」,然後替換###### #在代碼中使用「encStr」? (src =「data:image/png; base64,encStr」...) – SpokaneDude 2012-04-30 22:42:51

3

對於在電子郵件中的圖像加載,圖像標籤必須有一個完整的URL在裏面,和圖像應在服務器上所處位置應使地方可以裝:

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

+2

而行爲良好的電子郵件程序將拒絕加載。 – 2012-04-24 18:57:19

+1

是的。即使在今天,大多數促銷電子郵件都是以這種方式發送的(Newegg,Microsoft等) – 2012-04-24 19:31:09

+1

的確,爲了在電子郵件中顯示圖像,src屬性應該包含格式正確的url – 2012-05-03 21:21:19

5

也許你可以使用base64編碼的數據:

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

你必須輸入一個NSString stringWithFormat,並將.png插入到NSString中。我在Xcode 3中嘗試了你的代碼,做了我的instuctions,它工作。希望能幫助到你!

相關問題