在PHPMailer中发送某些PDF时获取“已超过最大执行时间…”
我有一个表单可以上传一个PDF,并使用PHPMailer类通过电子邮件附件发送 我的表格要求上传标题和pdf: 若用户并没有填写我的字段,他将收到一条消息,说要填写所有字段,否则它将把我的文件上传到我的通讯文件夹 然后我使用sendEmail功能发送带有附件的电子邮件,但它不适用于大尺寸的PDF 我测试了259kb的宽度PDF,效果很好,但对于489kb的PDF,只有200kb不起作用,我总是会遇到相同的错误: class.smtp.php中超过了30秒的最大执行时间 我的PHP代码:在PHPMailer中发送某些PDF时获取“已超过最大执行时间…”,php,phpmailer,Php,Phpmailer,我有一个表单可以上传一个PDF,并使用PHPMailer类通过电子邮件附件发送 我的表格要求上传标题和pdf: 若用户并没有填写我的字段,他将收到一条消息,说要填写所有字段,否则它将把我的文件上传到我的通讯文件夹 然后我使用sendEmail功能发送带有附件的电子邮件,但它不适用于大尺寸的PDF 我测试了259kb的宽度PDF,效果很好,但对于489kb的PDF,只有200kb不起作用,我总是会遇到相同的错误: class.smtp.php中超过了30秒的最大执行时间 我的PHP代码: if(i
if(isset($_POST['send_form']))
{
$f['subject'] = $_POST['subject'];
if(in_array('',$f) || empty($_FILES['img']['tmp_name']) )
{
echo '<span>Please Fill all fields!</span>';
}
else
{
if(!empty($_FILES['img']['tmp_name']))
{
$folder = '../newsletter/';
$year = date('Y');
$month = date('m');
if(!file_exists($folder.$year)){
mkdir($folder.$year,0755);
}
if(!file_exists($folder.$year.'/'.$month)){
mkdir($folder.$year.'/'.$month,0755);
}
$pdf= $_FILES['pdf'];
$ext = substr($pdf['name'],-3);
$f['pdf'] = $f['subject'].".".$ext;
$attachment = $folder.$year.'/'.$month.'/'.$f['pdf'];
move_uploaded_file($pdf['tmp_name'], $folder.$year.'/'.$month.'/'.$f['pdf']);
}
}
}
我的功能发送电子邮件:
如果我将php.ini max_execution_time=30更改为max_execution_time=60,我不会收到错误,但不会收到任何电子邮件 PDF文件大吗?比图片还大?一个解决方案是简单地增加php.ini文件中的最大执行时间。我们说的是什么大小的PDF?即使您能够绕过php执行时间限制,在大多数服务上也可能达到电子邮件服务最大大小附件限制~15-20MB。在这种情况下考虑在发送之前压缩文件。谢谢你的答案Bonatoc和VLZVL。我认为问题其实在于pdf的大小,因为现在我尝试使用259kb的pdf,效果很好。但对于486kb的pdf,它不起作用。你知道我如何发送附件中至少2mb的pdf吗?这只是因为邮件->发送无法在最长执行时间内完成,因为文件大小,你要么需要更好的上传速度,要么需要增加最长执行时间。可能400Kb+pdf由于其他原因被卡住,例如,它被视为垃圾邮件。请尝试使用其他提供商的其他电子邮件地址。
sendMail($f['subject'],$msg,MAILUSER,'Name of sender','testEmail03@hotmail.com', 'emailReceptor03@hotmail.com');
function sendMail($subject,$message,$emissor,$emissorName,$receptor,$receptorName, $attachment, $reply = NULL, $replyName = NULL){
require_once('mail/class.phpmailer.php');
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->IsHTML(true);
$mail->SMTPSecure = "tls";
$mail->Host = MAILHOST;
$mail->Port = MAILPORT;
$mail->Username = MAILUSER;
$mail->Password = MAILPASS;
$mail->From = utf8_decode($emissor);
$mail->FromName = utf8_decode($emissorName);
$mail->Subject = utf8_decode($subject);
$mail->Body = utf8_decode($message);
$mail->AddAddress(utf8_decode($receptor),utf8_decode($receptorName));
$mail->AddAttachment($attachment);
if($reply != NULL){
$mail->AddReplyTo(utf8_decode($reply),utf8_decode($replyNome));
}
if($mail->Send()){
return true;
}
else{
return false;
}
}