代码之家  ›  专栏  ›  技术社区  ›  animuson Hemanshu

使用PHP在电子邮件中嵌入图像?

  •  1
  • animuson Hemanshu  · 技术社区  · 14 年前

    我知道如何将图片作为附件嵌入电子邮件,但这并不是我真正想做的。我想做的是在邮件中嵌入一个图像,并在邮件正文中使用它。有没有可能这样做,或者可能引用一个附加的文件在邮件中使用?

    我应该担心这个吗?只是通过链接到我的网络上的图像来加载它们是否更有益?我想这样可以减轻服务器的负担,这样就不必在每次打开的邮件中直接从我的站点下载,从而减少了带宽。

    注: 我不寻找任何电子邮件框架或库等,只是为了一个简单的方法来完成这项任务。

    3 回复  |  直到 14 年前
        1
  •  3
  •   Scott Saunders    14 年前

    $output .= '<p><img src="cid:' . $linkID . '" alt="graph" /></p>';
    

    在哪里? $linkID 与下面函数中使用的值相同。

    public function sendEmail($emailAddress)
    {
        $random_hash = md5(date('r', time()));
    
        $htmlString = $this->getHTML($random_hash);
    
        $message = "--mixed-$random_hash\n";
        $message .= 'Content-Type: multipart/alternative; boundary="alt-' . $random_hash . '"' . "\n\n";
        $message .= 'MIME-Version: 1.0' . "\n";
        $message .= '--alt-' . $random_hash . "\n";
        $message .= 'Content-Type: text/plain; charset="iso-8859-1"' . "\n";
        $message .= 'Content-Transfer-Encoding: 7bit' . "\n\n";
    
        // text message
        $message .= strip_tags($htmlString) . "\n\n";
    
        $message .= '--alt-' . $random_hash . "\n";
        $message .= 'Content-Type: text/html; charset="iso-8859-1"' . "\n";
        // $message .= 'MIME-Version: 1.0' . "\n";
        $message .= 'Content-Transfer-Encoding: 7bit' . "\n\n";
    
        // html message
        $message .= $htmlString . "\n\n";
    
        $message .= '--alt-' . $random_hash . '--' . "\n";
    
        // graph image
        if($this->selectedGraph != 0)
        {
            $graphString = $this->getGraph();
            $graphString = chunk_split(base64_encode($graphString));
    
            $linkID = 'graph-' . $random_hash . '-image';
    
            $message .= '--mixed-' . $random_hash . "\n";
            $message .= 'MIME-Version: 1.0' . "\n";
            $message .= 'Content-Transfer-Encoding: base64' . "\n";
            $message .= 'Content-ID: ' . $linkID . "\n";
            $message .= 'Content-Type: image/gif; name="graph.gif"' . "\n";
            $message .= 'Content-Disposition: attachment' . "\n\n";
    
            $message .= $graphString;
            $message .= '--mixed-' . $random_hash . '--' . "\n";
    
        }
        else
        {
            $message .= '--mixed-' . $random_hash . '--' . "\n";
        }
    
    
        $headers = 'From: ' . $this->from. "\r\nReply-To: " . $this->replyto;
        $headers .= "\r\nContent-Type: multipart/related; boundary=\"mixed-" . $random_hash . "\"\r\nMIME-Version: 1.0";
    
        $flags = '-f ' . BOUNCED_EMAIL_ADDRESS;
    
        return mail($emailAddress, $this->subject, $message, $headers, $flags);
    
    }
    

    是否值得做是另一个问题。如果附加图像,则使用带宽发送消息。也许你最好一次全部使用带宽,而不是分散使用?也许不是。

    我没有使用附加的图像,直到我必须发出一个电子邮件 不同的 向每个收件人发送图像。我不打算在服务器上存储和管理所有这些图像(并尝试对它们进行唯一命名)。

        2
  •  2
  •   Wrikken    14 年前
    Content-Type: multipart/related;
      type="text/html";
      boundary="Boundary1"
    
    
    --Boundary1
    Content-Type: multipart/alternative;
    boundary="Boundary2"
    
    --Boundary2
    Content-Type: text/html; charset = "utf-8"
    Content-Transfer-Encoding: 8bit
    
    <img src="cid:content_id_from_attachment">
    
    --Boundary2--
    
    --Boundary1
    Content-Type: image/jpeg; name="somefilename.jpg"
    Content-Transfer-Encoding: base64
    Content-ID: <content_id_from_attachment>
    Content-Disposition: inline; filename="somefilename.jpg"
    
    //binary data
    
    --Boundary1--
    

    边界、字符集、内容传输编码当然都可以选择。PHPMailer包可以自动为您执行以下操作: http://www.ustrem.org/en/article-send-mail-using-phpmailer-en/

    另请参见包含图片: http://mailformat.dan.info/body/html.html

        3
  •  -4
  •   hjortureh    14 年前

    <img src="http://www.youwebsite.com/yourimage.jpg" alt="This is a description" />