Приложение, сгенерированное FPDF для электронной почты, состоит из странных символов - PullRequest
0 голосов
/ 08 февраля 2012

Я использую FPDF в течение последних двух лет для создания PDF-файла. После того, как этот файл был сгенерирован, он отправляется мне по электронной почте. Я недавно установил точно такой же сценарий на новый сервер. По той или иной причине создание PDF работает, так как я не получаю сообщение об ошибке. Сообщение, которое я получаю по электронной почте, представляет собой простой текст и выглядит так:

- 4aca5942d8bd7e7d523d8b2d71c6b1ea-- или же --d7582bf6769dd1fa2ee8f05cb04cf445 -

каждое сообщение отличается.

Раздетый код:

require('class.phpmailer.php');
require('fpdf.php');
define('FPDF_FONTPATH','font/');

//Create new PDF
$pdf=new PDF();
$pdf->AliasNbPages(); 
$pdf->company = $business;

$pdf->SetFont('Arial','',12);
$pdf->SetAutoPageBreak(false);
$pdf->AddPage('P');

// email stuff
$tijd = time();
$datum = date('j-m-Y', $tijd);
$bestandsnaam = $usernameinlog."-".$datum;
$from = "magazijnbeheer@".$website;
$subject = "Voorraad mutatie door ".$usernameinlog; 
$message = "<p>Zie bijlage voor een mutatieoverzicht.</p>";

// a random hash will be necessary to send mixed content
$separator = md5(time());

// carriage return type (we use a PHP end of line constant)
$eol = PHP_EOL;

// attachment name
$filename = $bestandsnaam.".pdf";

// encode data (puts attachment in proper format)
$pdfdoc = $pdf->Output("", "S");
$attachment = chunk_split(base64_encode($pdfdoc));

// main header (multipart mandatory)
$headers  = "From: ".$from.$eol;
$headers .= "MIME-Version: 1.0".$eol; 
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol; 
$headers .= "Content-Transfer-Encoding: 7bit".$eol;
$headers .= "This is a MIME encoded message.".$eol.$eol;


// The actual message
$headers .= "--".$separator.$eol;
$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
$headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$headers .= $message.$eol.$eol;

// Bijlage
$headers .= "--".$separator.$eol;
$headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol; 
$headers .= "Content-Transfer-Encoding: base64".$eol;
$headers .= "Content-Disposition: attachment".$eol.$eol;
$headers .= $attachment.$eol.$eol;
$headers .= "--".$separator."--";


mail($emailemployee, $subject, "", $headers);

Кто-нибудь знает, что идет не так, я пропускаю параметр в php.ini? еще раз: этот же код работал на другом сервере, поэтому я думаю, что некоторые настройки неверны, или я забыл установить что-то.

:-) Спасибо,

Alex

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012
mail($emailemployee, $subject, "", $headers);

вы в основном отправляете пустое сообщение со всем содержимым, каким-то образом вставленным в $ заголовков ....

Попробуйте поместить все ниже $headers .= "Content-Transfer-Encoding: 7bit".$eol; в переменную $ body вместо $ headers, а затем отправьте с

mail($emailemployee, $subject, $body, $headers);

(также замените $eol = PHP_EOL на $eol = "\r\n", как предложено SimonMayer)

0 голосов
/ 09 февраля 2012

$eol = PHP_EOL; может вызвать проблемы, если ваш сервер не работает под управлением Windows.

Каждая строка в электронном письме ДОЛЖНА заканчиваться CRLF, независимо от ОС, поэтому вы должны жестко кодировать $eol = "\r\n";

Иногда серверы и клиенты справляются либо с CR, либо с LF, но это нестандартно, и им действительно не нужно.

.


Если выпосле этого по-прежнему возникают проблемы, пожалуйста, не могли бы вы добавить источник сообщения к вопросу (для краткости, возможно, обрезать бит base64 до 2 строк)?

...