本文介绍了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图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!