ОК, поэтому я предполагаю, что вам нужны оба шага:
Шаг 1: Отправьте содержимое файла с внешнего интерфейса на сервер. Используйте следующее в вашем JavaScript сразу после того, как вы получите содержимое файла в виде строки (скажем, переменная с именем "pdfcontent"):
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 или любой другой функции, создающей содержимое файла. Конечно, это всего лишь скелетный код - настоящая программа должна включать проверку ошибок, защиту от различных атак и т. Д. c, но это совсем другая история. Также возможно, что вам нужно будет отформатировать pdfcontent, чтобы его можно было использовать в качестве параметра URI, подобного этому.
Шаг 2: Теперь ваш сценарий "mail. php" (или как вы его называете) - тот, у кого есть команда «mail») получил содержимое файла в строке $ _POST ['data']. Или, возможно, у вас уже есть содержимое файла (PDF или что-то еще) в виде двоичной строки на стороне сервера (ваш вопрос по этому поводу не ясен). В любом случае, вам просто нужно прикрепить его к электронной почте и отправить. Бинарные вложения действительно являются проблемой, поэтому я предлагаю скачать и установить PHPMailer (https://github.com/PHPMailer/PHPMailer) - он довольно дружественный и простой в установке и использовании. После установки используйте в скрипте PHP вместо команды «mail» следующее:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
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 для этой цели - слишком опасно.