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

4

4 回答 4

8

我同意base 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>

其中########## 被base 64 编码后的reading.png 数据替换。

于 2012-04-24T19:19:18.833 回答
5

也许你可以使用base64编码的数据:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" align=center alt="reading">
于 2012-04-24T18:54:37.060 回答
3

对于电子邮件中的图片加载,图片标签中必须有完整的 url,并且图片应该位于服务器上的某个位置,以便可以加载:

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

于 2012-04-24T18:52:07.230 回答
0

您必须输入 NSString stringWithFormat,然后将 .png 插入 NSString。我在 Xcode 3 中尝试了你的代码,按照我的指示做了,它奏效了。希望能帮助到你!

于 2012-05-03T20:51:40.620 回答