本文介绍了PHPMailer发送Base64图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过PHPMailer通过电子邮件从MySQL数据库发送图像。

目前我从数据库中取出图像,base64_decode,然后用加号替换所有空格以给出:

然后我使用PHPMailersAddStringAttachment

$mail->AddStringAttachment($base64image, "Something Something.png", "base64", "image/png")

这样就可以了(还有其他设置,但它们都不相关)。然而,一旦我收到电子邮件,它说文件已损坏。有人知道在PHPMailer中发送Base64图像的正确例程吗?

编辑%1

我删除了对图像的所有修改,现在直接从数据库发送它。结果为:

ZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFmRUFBQU96Q0FZQUFBQ29QVDh6QUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQUpjRWhaY3dBQURzTUFBQTdEQWNkdnFHUUFBUCBsU1VSQlZIaGU3UDNuYzEzWmRmYUw2bSA0WC9peDY5VDlvS3B6VDVVIGRwMTd6em45IHJVa0tsT3laYlV0eTJwbiB2VnJtYllsdXlWMWp1eEFFZ3dJQkFrU09lZEFCQUlnU0lKRUlnSXptTmxKVGNXbXVpVTFGZXd6N3ZPTXNjWmVjeSBzRFFJZ1dpM3FyTm4xMURObVdHRnZvdmR2anJuV1h2c2ovOHZYOTBpbVRKa3laY3FVNmY3UiBQaTQ2aU1mL1VhTFpNcVVLVk9tVEpudUg3M3h4aHVxai95dmp3NUtwa3laTW1YS2xPbiAwUzkgOFF2VlIvNC9qeDJSVEpreVpjcVVLZFA5by8vNnIvOVNmZVIvZS95b1pNcVVLVk9tVEpudUgzbkpJSjRwVTZaTW1UTGRaL0tTUVR4VHBreVpNbVc2eiBRbGczaW1USmt5WmNwMG44bExCdkZNbVRKbHlwVHBQcE9YRE9LWk1tWEtsQ25UZlNZdkdjUXpaY3FVS1ZPbSAweGVNb2hueXBRcFU2Wk05NW04WkJEUGxDbFRwa3laN2pONVdTWEViOG1OYU1QODhodDU2OGFic2psMUc1ZHYgd3ZwVE8xZnZmNjQvWHN5ODg0ZEdUIFUzcjlTZmZMUWogVEcgM3B5V3Q1OTU3YlVWS1dQVFZQbkQyMjdHM1BwOVhYVHRndFNjIFVYOHU2dmJmOHM3NzczTSBudlBwVSBQbE9tVEpreS9WN0t5enBCM01xUHJpeW1iUE5CNmFyTUtIaC9JelAzQXZGdGI4cGlBT...

尝试打开时仍会显示错误。

解决方案

$base = base64_decode($row['image']);
$resource = base64_decode(str_replace(" ", "+", substr($base, strpos($base, ","))));
$mail->addStringAttachment($resource, "Filename.png", "base64", "image/png");

结果是我只进行了一次解码,而为了获得二进制数据,我需要进行2次解码。感谢发表评论的人。

如果您要附加的文件以前是数据URI,例如,直接从Java脚本发布为字符串,则可能不需要双重解码:

$base = $_POST['image'];
$resource = base64_decode(str_replace(" ", "+", substr($base, strpos($base, ","))));
$mail->addStringAttachment($resource, "Filename.png");

推荐答案

我现在碰巧遇到了这个问题。无论如何,解决方案是,如果您check the source code of PHPMailer,它已经明确说明,该函数的第一个参数是获取文件的二进制数据。

这意味着,要成功发送图像,如果您已经拥有文件的Base64_encode表示,您应该不做任何更改而直接执行它,然后传递它。它应该可以工作。

您不需要替换Long Base64编码字符串中的任何字符串。(当然,解码时不带

这篇关于PHPMailer发送Base64图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-23 04:28
查看更多