将html2pdf.pdf或html2canvas图片发送至电子邮件



我有两个PHP页面。第一个是用户输入数据的表单,当提交第二个页面时,它会创建一个div,生成一个";发票";。此页面具有将发票保存为PDF或IMG的选项。该页面也会自动发送和发送带有确认的电子邮件。

我想在这封电子邮件中发送PDF或图像作为附件。

html2canvas.js.png:

function picDiv() { 
html2canvas($('#printableArea')[0], {
width: 1200
}).then(function(canvas) {
var a = document.createElement('a');
a.href = canvas.toDataURL("image/png");
a.download = 'nalog.png';
a.click();
});
};

和html2pdf.js生成pdf:

function pdfDiv() { 
var element = document.getElementById('printableArea');
var opt = { 
filename:     'nalog.pdf'
};
html2pdf().set(opt).from(element).save();
};

我读过使用文件输入类型、html2canvas和jsPDF将图像发送到服务器:将生成的pdf作为电子邮件附件发送。还有像这样的外部文章:将HTML5画布作为图像发送到服务器和html2pdf-github帖子。这最后一篇html2pdfgithub文章指出,以下代码可以发送到电子邮件或服务器,但我不知道如何通过电子邮件发送。它成功地将pdf转换为字符串。

html2pdf().from(element).toPdf().output('datauristring').then(function (pdfAsString) {
//send via email.
});

我的php电子邮件发送是:

$user = "some email";
$usersubject = "Initium - Vaš online radni nalog";
$userheaders = "From: some email";
$usermessage = "
//some content with php variables and text.
";    
mail($user,$usersubject,$usermessage,$userheaders);

如果有人能解释如何通过我现有的代码发送PDF或图像,我会很高兴。请记住,这都在同一个页面上,需要在同一页面加载上完成。

我尝试了很多事情和方法来做到这一点,但都迷失了方向,因为这对我来说是一个新的领域。任何帮助都将不胜感激。

编辑:

完整的工作解决方案如下:https://stackoverflow.com/a/61418366/7158959

好吧,所以我猜你需要两个步骤:

步骤1:将文件内容从前端发送到服务器。在获得字符串形式的文件内容(例如,名为"pdfcontent"的变量(后,在JavaScript中使用以下内容:

var x = new XMLHttpRequest();
var url = "<your domain>/mail.php";
x.open("POST", url, true);
x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
x.send("data="+pdfcontent);

无需将其放入任何HTML元素或其他内容中,只需在"pdfDiv"或创建文件内容的任何函数之后立即执行即可。当然,这只是一个框架代码——一个真正的程序必须包括错误检查、防止各种攻击等,但那是完全不同的情况。您还可能需要格式化"pdfcontent",以便将其用作这样的URI参数。

第2步:现在,您的"mail.php"脚本(或者您称之为"mail"命令的脚本(已经接收到$_POST['data']字符串中的文件内容。或者,您可能已经在服务器端将文件内容(PDF或其他(作为二进制字符串(您的问题不清楚(。无论哪种方式,你只需要将其附加到电子邮件中并发送出去。二进制附件确实很痛苦,所以我建议下载并安装PHPMailer(https://github.com/PHPMailer/PHPMailer)-它非常友好,易于安装和使用。安装后,在PHP脚本中使用以下命令,而不是"mail"命令:

use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
require_once "PHPMailer/src/Exception.php";  // directory may be different on your server
require_once "PHPMailer/src/PHPMailer.php";  // directory may be different on your server
$mail = new PHPMailer;
$mail->addAddress(...);   // specify "To" address
$mail->setFrom(...);   // specify "From" address
$mail->Subject = ...;   // specify subject line
$mail->Body    = ...;   // specify email content
$mail->addStringAttachment(<binary string with file content>, "nalog.pdf");
$mail->send();

如果你想确保你的电子邮件到达目的地,并且不会被困在垃圾邮件文件夹或其他什么东西中,那么发送电子邮件的意义远不止于此,但这完全是另一回事。此外,如果您通过$_POST接收到这些数据,那么您必须正确验证它,否则它只是一颗滴答作响的定时炸弹。你还必须确保你的脚本不能直接使用,否则任何人都可以代表你发送任何垃圾邮件,你就会遇到麻烦。尽管我不知道在这种设置下如何保护自己免受这样的攻击。您可能需要重新思考您的整个体系结构,只在服务器上生成文件内容,而根本不使用AJAX来实现这一目的——这太危险了。

如果客户端已经有一个字符串,那么最简单的方法就是使用AJAX将其发送到服务器。您可以直接创建XMLHttpRequest对象(查找它,它非常简单(,或者JQuery(您显然正在使用它(有一种更简单的方法,不确定,多年没有使用过它。无论如何,使用AJAX,您只需将文件内容作为字符串发送到具有"mail"命令的PHP脚本,就应该如此。如果您需要详细的代码示例,请告诉我。

我在这里找到了一种方法:https://base64.guru/developers/php/examples

我现在可以直接使用"html2pdf.bundle.min.js"one_answers"jquery.min..js"将电子邮件附件发送到PHP"PHPMailer"。

我所需要做的就是脱光";数据:application/pdf;filename=生成.pdf;base64;在发送到PHP之前从字符串中取出。

相关内容

最新更新