由 phpmailer 中的 API 生成的 png 附件

png attachment generated by an API in phpmailer

我正在尝试通过 phpmailer 向我的用户发送 .png 图像。该图像在我使用 <img> 标签时显示,但我希望它显示为用户可以 open/save/print 的真实附件(如 this screenshot)。我读到我可以为此使用 $mail->addStringAttachment 。所以我尝试了这个,它确实在电子邮件中发送了一个附件,但是当我尝试打开它时,它说 Windows 图片查看器无法打开该文件。也保存到我的电脑,然后用画图打开不起作用,它告诉我那不是一个有效的文件或什么的。我认为这是因为它不是静态图像,而是 API 生成的图像,即:

$qr = 'http://api.qrserver.com/v1/create-qr-code/?data=' . $guid . '&size=250x250';

所以this图片应该作为附件发送。有谁知道我该怎么做?

失败的原因是您试图将 URL 作为图像数据附加。您需要先从 URL 中获取数据,然后将其附加到某个东西上。

一步一个脚印 - 确保您在尝试通过电子邮件发送之前取回有效图片 - 例如

file_put_contents('qr.png', file_get_contents($qr));

并确保您在其中保存了有效图像。当您知道它有效时,请尝试使用

发送电子邮件
$mail->addStringAttachment(file_get_contents($qr) 'qr.png');

虽然可能有更多的错误检查!

我通过执行以下操作使其作为附件正常工作:

$qr = file_get_contents("https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=Example");

$mail->addStringAttachment($qr, "qr.png");