【问题标题】:How to insert an image in php mail?如何在php邮件中插入图像?
【发布时间】:2013-06-18 08:04:21
【问题描述】:

如何在 php 邮件表单中插入图片?

我有这个代码:

$headers  = 'MIME-Version: 1.0' . "\n";
        $headers .='Content-Type: text/html; charset="UTF-8"'."\n";
        $headers .='From: text@example.fr';       
        $image = "http://lcda.fr/site/abonnement/img/logo.png";
        //ecriture du message 

        $message .= '<img src=".$image.">';
        $message .= '<p><br/>Votre commande a bien été  enregistrée sous le numéro/ <span style="color:blue">Your command has been successfully recorded under the number :</span> <b>(ref - '.$_SESSION['refvb'].')</b></p>';      
        $message .= '<table width="500">';
        $message .= '<tr><th colspan="2" align="left">Informations abonnement/<span style="color:blue"> Subscription informations</span> :</th></tr>';
        $message .= '<tr><td width="250">Abonnement/<span style="color:blue"> Subscription</span> : </td><td>'.$infoabo['abo'].'</td></tr>';
        $message .= '<tr><td>Durée/<span style="color:blue"> Duration</span> : </td><td>'.$infoabo['duree'].' an(s) </td></tr>';
        $message .= '<tr><td>Quantité/<span style="color:blue"> Quantity</span> : </td><td>'.$infoabo['quantite'].'</td></tr>';
        $message .= '<tr><td>Localisation/<span style="color:blue"> Localisation</span> : </td><td>'.$infoabo['zone'].'</td></tr>';
        $message .= '<tr><td>Prix/<span style="color:blue"> Price</span> : </td><td>'.$infoabo['prix'].' €</td></tr>';  
        $message .= '<tr><td>Commencer l\'abonnement au prochain numéro/<span style="color:blue"> Start the subscription in the next issue</span> : </td><td>'.$startabo.'</td></tr>';  
        $message .= '</table>'; 

        }
        $message .= '<br><p><b>Mode de paiement/<span style="color:blue"> Payment</span> : '.$mode;        
        $message .= '</p>';
        $message .= '';                

        //envoie du mail   
        ini_set("sendmail_from",'test@example.fr');

但是图片没有加载?有没有其他方法可以做到这一点? (重点是放图片的地方放logo公司)

【问题讨论】:

    标签: html image php


    【解决方案1】:

    您的图片需要托管在公共 URL 上,然后在电子邮件中使用

    例如

    $image = 'http://cdn.mydomain.tld/image.png';    
    

    更新:

    正如 swapnesh 所发布的(感谢他),你的字符串连接是错误的(尽管他的更正是错误的)所以你的 $image 路径不会在你的字符串中。

    你需要

    // correct
    $string = '<img src="'.$image.'">'; //=> <img src="image.png">
    
    // wrong
    $string = '<img src=".$image.">'; //=> <img src="$image">
    

    注意字符串中额外的' 单引号。您没有打破字符串来添加变量,并且由于主字符串用单引号括起来,PHP 不会解析它以进行插值。

    【讨论】:

    • 正是这个。此外,您应该为您的图像添加一个“alt”属性,因为大多数(全部?)电子邮件提供商默认不会加载它。
    • 我有一个完整的路径。我有这个链接:lcda.fr/site/abonnement/img/logo.png
    • 是的,但在您的代码示例中,$image 不包含 URL 只是图像名称
    • 是的,对不起.. 当我记得它可能无法正常工作因为没有完整链接时,我正在写消息,我尝试使用完整链接但我忘了在这里更改它.. 是否也不能使用完整链接..
    • 可能是愚蠢的问题,但您的电子邮件客户端没有阻止图像,是吗?如果您查看电子邮件的来源,HTML 是否正确?
    【解决方案2】:

    您必须在 $image 变量中提供完整的 url 路径。

    喜欢这个 $image="http://yourdomain.com/images/image_name.ext"

    【讨论】:

      【解决方案3】:

      在电子邮件中设置Absolute 图像路径。

      如果 $message 以前不存在,也要删除 . -

      $message = '<img src="$image">';
      

      是的,更正它--

      $message = "<img src='".$image."'>";
      

      【讨论】:

      • 您只需要在包含嵌入图像的多部分电子邮件中使用不同的内容类型作为单独的部分。 OP 发布的内容是 text/html。虽然删除了反对票,因为您已经正确指出(我错过了)$image 的字符串连接是错误的,但在如何修复它方面并不完全正确\
      • 如果我这样做,那不会搞砸其余的邮件吗?
      • @fullybaked 大声笑我正在检查这个stackoverflow.com/questions/14069231/… 所以混淆了....在投票后我再次查看代码并发现. 错误:)
      • @swapnesh 虽然您当前的编辑可以工作,但它不会生成有效的 html,因为它不会将图像 URL 包装在 "
      【解决方案4】:

      确保您的图像路径是绝对的,并且可供尝试查看的用户使用,例如:

      http://www.google.com/image.png

      【讨论】:

      【解决方案5】:

      尝试使用图像的完整路径。所以:

       www.example.com/site/images/link.png
      

      【讨论】:

      【解决方案6】:

      很高兴你解决了它。只是为其他人提供一些启示: 一直是报价的问题。

      这是你的尝试之一:

      $message .= '<img src="$image">';
      

      在 php 中,双引号和单引号的行为不同。当打开 single 引号时,所有内容都将按原样处理。所以不会解析变量$image。因此,在您的邮件源代码中,您将看到:&lt;img src="$image"&gt; 这当然是行不通的。

      如果您希望将变量识别为变量并进行解析,则必须关闭变量前的单引号。这是一种可能:

      $message .= '<img src="'.$image.'">';
      

      这里php不会做解析,只是把everything写在单引号里,包括双引号(这是聪明的部分),然后我们留下引号,php再次解析,所以识别一个变量并添加其内容。然后(当我们再次输入单引号时)php 写下里面的所有内容,同样包括双引号。所以你会得到你想要的:

      <img src="http://lcda.fr/site/abonnement/img/logo.png">
      

      (请注意与您的第一个版本的区别:

      $message .= '<img src=".$image.">';
      

      您也不要在变量之前关闭单引号。所以在这种情况下,在你的邮件源代码中你会看到:&lt;img src=".$image."&gt;)

      这一切都有些棘手,因为当使用 double 引号时,变量 被 php 解析在引号内。但是,如果您想给出双引号作为字符串的一部分(最迟),它可能会非常混乱 - 单引号(更严格)可能更容易理解.

      希望这会有所帮助 你好! o

      【讨论】:

        【解决方案7】:

        您的 $image 必须有绝对网址; 试试下面的编辑代码;

            $headers  = 'MIME-Version: 1.0' . "\n";
            $headers .='Content-Type: text/html; charset="UTF-8"'."\n";
            $headers .='From: text@example.fr';       
            $image = "http://framework.zend.com/images/head-bottom-picture.png";
            //ecriture du message 
        
            $message .= '<img src="$image">';
            $message .= '<p><br/>Votre commande a bien été  enregistrée sous le numéro/ <span style="color:blue">Your command has been successfully recorded under the number :</span> <b>(ref - '.$_SESSION['refvb'].')</b></p>';      
            $message .= '<table width="500">';
            $message .= '<tr><th colspan="2" align="left">Informations abonnement/<span style="color:blue"> Subscription informations</span> :</th></tr>';
            $message .= '<tr><td width="250">Abonnement/<span style="color:blue"> Subscription</span> : </td><td>'.$infoabo['abo'].'</td></tr>';
            $message .= '<tr><td>Durée/<span style="color:blue"> Duration</span> : </td><td>'.$infoabo['duree'].' an(s) </td></tr>';
            $message .= '<tr><td>Quantité/<span style="color:blue"> Quantity</span> : </td><td>'.$infoabo['quantite'].'</td></tr>';
            $message .= '<tr><td>Localisation/<span style="color:blue"> Localisation</span> : </td><td>'.$infoabo['zone'].'</td></tr>';
            $message .= '<tr><td>Prix/<span style="color:blue"> Price</span> : </td><td>'.$infoabo['prix'].' €</td></tr>';  
            $message .= '<tr><td>Commencer l\'abonnement au prochain numéro/<span style="color:blue"> Start the subscription in the next issue</span> : </td><td>'.$startabo.'</td></tr>';  
            $message .= '</table>'; 
        
            }
            $message .= '<br><p><b>Mode de paiement/<span style="color:blue"> Payment</span> : '.$mode;        
            $message .= '</p>';
            $message .= '';                
        
            //envoie du mail   
            ini_set("sendmail_from",'test@example.fr');
        

        【讨论】:

          【解决方案8】:

          解决了这个问题。

          使您的图像可变:

          $image = 'http://lcda.fr/site/abonnement/img/logo.png';
          

          【讨论】:

            【解决方案9】:

            显然,如果我将链接直接放在“img”标签中,它会起作用.. 谢谢

            【讨论】:

              【解决方案10】:

              根据其他答案,我做了以下操作:

              $comments .= "<center><img src='http://mywebsite.com/thepic468white.jpg' alt='logo' width='468' height='60'></center>";
              $comments .= $mail; /*message posted from textarea box on associated htmlpage.*/
              $sent = mail($tosubscriber,$subject,$comments,$headers);
              

              【讨论】:

                猜你喜欢
                • 2012-01-17
                • 2011-07-20
                • 2014-01-09
                • 1970-01-01
                • 2018-09-01
                • 2013-10-07
                • 2013-02-28
                • 2011-03-15
                • 1970-01-01
                相关资源
                最近更新 更多