我的目标:
使用AddStringAttachment()
将自动生成的base64字符串作为.pdf
文件发送到另一个电子邮件地址。
编码环境:
我正在使用ajax调用在WordPress上工作,该调用将base64字符串传递给服务器。字符串的大小通常约为30kbs,可以保证不超过50kbs。我有MAX_EXECUTION_TIME
个120秒。
我一直在做什么:
我成功了:
.txt
文件我失败了:
AddStringAttachment()
发送base64字符串。服务器通常会向我返回504 Gateway Time-out错误,即使通过了$mail->send()
函数,我也只能收到比原始大小大10kbs的损坏的.pdf
文件。.pdf
发送一个已经存在的AddAttachment()
文件,服务器还会向我返回一个504 Gateway Time-out错误,并且还会收到类似Resource interpreted as Document but transferred with MIME type application/pdf的警告我的代码:
function sendPdf() {
$mail = new PHPMailer(true);
//Server settings
$mail->SMTPDebug = 2; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.hostinger.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'janice@popper.ga'; // SMTP username
$mail->Password = 'secret'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
//Recipient
$mail->SetFrom('janice@popper.ga');
$mail->AddAddress( 'xxxxxxxx@gmail.com' );
$pdf_base64 = $_POST[pdfString];
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject= ' New Application Form ';
$mail->Body= ' New Application Form From WordPress site ';
//Attachment
//$mail->AddStringAttachment($pdf_base64, $_POST[clientName].'_Application.pdf', 'base64', 'application/pdf');
//$mail->AddAttachment(dirname(__FILE__)."/Qian_Zhong_Application.pdf", 'Qian_Zhong_Application.pdf');
$error = '';
if(!$mail->send()){
$error = 'Mail error: '.$mail->ErrorInfo;
echo $error;
}else{
echo 'Message has been sent.';
}
exit; // This is required to end AJAX requests properly.
}
答案 0 :(得分:0)
您传递给addStringAttachment
的数据应该是原始二进制文件,而不是以任何方式编码,因为PHPMailer会为您处理这些数据。还将根据您提供的文件名设置编码和MIME类型,因此您无需手动设置它们。
使用调试器可以让您在脚本运行时对其进行观察,从而可以准确地查看其遇到的问题。任何错误500s都会导致错误记录在您的Web服务器日志中,并且通常会提供更多信息。
我还建议您不要像这样使用$_POST[clientName]
而不进行任何过滤或验证-您永远都不要相信这样的用户输入。