【问题标题】:How to get this image to display in the body of my email?如何让这张图片显示在我的电子邮件正文中?
【发布时间】:2023-03-22 01:20:02
【问题描述】:

我有这段代码,它应该将 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...

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    我同意 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数据替换。

    【讨论】:

    • 那我在这里做什么?为什么我需要所有的 HTML?我想要做的就是让图像出现在附加的 HTML 中......
    • 对不起,如果这令人困惑。您的 HTML 中只需要 &lt;img src='data:image/png;base64,**BASE64 ENCODED DATA**'&gt;。我的例子是一个完整的 HTML 电子邮件,在图片上方有图片的描述。
    • 嗨杰弗里...感谢您回来查看...所以,让我确保我理解这一点:我可以做这样的事情:“NSString encStr = [imageData base64EncodedString];”,然后替换上面的####### 代码中带有“encStr”? (src="data:image/png;base64,encStr"...)
    • 是的,使用类似[NSString stringWithFormat:@"... &lt;img src=\"data:image/png;base64,%@\" align=center&gt; ...", [imageData base64EncodedString]] 的东西。注意:base64EncodedString 不是 Apple 提供的方法。您必须找到一个将添加 base 64 编码的类别。我从Cocoa with Love 得到了我的。在文章的最底部是一个 zip 文件的链接。 zip 文件包含您需要的 NSData+Base64.h 和 NSData+Base64.m 文件。
    • 此方法不再生成可在 gmail 中查看的嵌入图像。而是显示原始数据流。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      &lt;img src="http://www.mydomain.com/reading.png" align=center&gt;

      【讨论】:

      • 表现良好的电子邮件程序将拒绝加载。
      • 确实为了在电子邮件中显示图像,src 属性应该包含格式正确的 url
      【解决方案4】:

      您必须输入 NSString stringWithFormat,然后将 .png 插入 NSString。我在 Xcode 3 中尝试了您的代码,按照我的指示进行了操作,并且成功了。希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-04
        • 2011-09-06
        • 2012-08-18
        • 1970-01-01
        • 2020-10-19
        • 2019-05-18
        • 2018-11-01
        • 1970-01-01
        相关资源
        最近更新 更多