如何加速Mail()PHP代码

如何加速Mail()PHP代码,php,performance,email,Php,Performance,Email,我的代码可以工作,但当客户在web表单中添加两张或更多图片并按send时,我的网站加载速度非常慢。加载大约需要1分钟,实际发送大约需要1-3分钟 我怎样才能加快这个过程 if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['namecontact']) && !empty($_POST['namecarinfo'])) { $contacts = array( //"autop

我的代码可以工作,但当客户在web表单中添加两张或更多图片并按send时,我的网站加载速度非常慢。加载大约需要1分钟,实际发送大约需要1-3分钟

我怎样才能加快这个过程

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['namecontact']) && !empty($_POST['namecarinfo'])) {

    $contacts = array(
        //"autoperka.info@gmail.com",
        //"automobiliukas24@gmail.com",
        //  "ruslanneviadomskij@gmail.com",
        "gabriele.giniot@gmail.com"
    );

    foreach($contacts as $contact) {


        $recipient_email = $contact; //recepient
        $from_email = $_POST['namecontact']; //from email using site domain.
        $subject = $from_email . " SupirkimasPlius.lt"; //email subject line

        $sender_name = $_POST["namecontact"];
        $sender_car = $_POST["namecarinfo"];
        $sender_message = 'Automobilio pasiūlymas:
          Marke/modelis:' . $_POST["namecarinfo"] . 'Kontaktai/miestas:' . $_POST["namecontact"] . 'Komentaras:' . $_POST["namecoment"];

        $attachments = $_FILES['namephoto'];

        $file_count = count($attachments['name']); //count total files attached
        $boundary = md5(time());






        if($file_count > 0) { //if attachment exists
            //header
            $headers = "MIME-Version: 1.0\r\n";
            $headers .= "From:" . $from_email . "\r\n";
            $headers .= "Reply-To: " . $sender_car . "" . "\r\n";
            $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n";

            //message text
            $body = "--$boundary\r\n";
            $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n";
            $body .= "Content-Transfer-Encoding: base64\r\n\r\n";
            $body .= chunk_split(base64_encode($sender_message));

            //attachments
            for($x = 0; $x < $file_count; $x++) {
                if(!empty($attachments['name'][$x])) {

                    /*if($attachments['error'][$x]>0) //exit script and output error if we encounter any
                    {
                    $mymsg = array(
                    1=>"Įkeltos nuotraukos/ų dydis per didelis",
                    2=>"Įkeltos nuotraukos/ų dydis per didelis",
                    3=>"Įkėlimo klaida, pabandykite dar kartą",
                    4=>"Nėra įkeltų nuotraukų",
                    6=>"Įkėlimo klaida" );
                    die($mymsg[$attachments['error'][$x]]);
                    }*/

                    //get file info
                    $file_name = $attachments['name'][$x];
                    $file_tmp_name = $attachments['tmp_name'][$x];
                    $file_size = $attachments['size'][$x];
                    $file_type = $attachments['type'][$x];


                    //read file
                    $handle = fopen($file_tmp_name, "r");
                    $content = fread($handle, $file_size);
                    fclose($handle);
                    $encoded_content = chunk_split(base64_encode($content)); //split into smaller chunks (RFC 2045)

                    $body .= "--$boundary\r\n";

                    $body .= "Content-Type: $file_type; name=\"$file_tmp_name\"\r\n";
                    $body .= "Content-Disposition: attachment; filename=\"$file_tmp_name\"\r\n";
                    $body .= "Content-Transfer-Encoding: base64\r\n";
                    $body .= "X-Attachment-Id: " . rand(1000, 99999) . "\r\n\r\n";
                    $body .= $encoded_content;
                }
            }

        } else { //send plain email otherwise
            $headers = "From:" . $from;
            $body = $sender_message;
        }




        $sentMail = mail($recipient_email, $subject, $body, $headers);
    } //foreach uzdaro


}


if($sentMail) //output success or failure messages
    {
    $myfile = fopen("success.php", "r") or die(fopen("index.php", "r"));
    echo fread($myfile, filesize("success.php"));
    fclose($myfile);
    //mail('gabriele.giniot@gmail.com',$subject,$message,$headers);
    //mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender


} else {
    $myfile = fopen("failed.php", "r") or die(fopen("index.php", "r"));
    echo fread($myfile, filesize("failed.php"));
    fclose($myfile);
}
if($\u SERVER['REQUEST\u METHOD']='POST'&&!empty($\u POST['namecontact'])&&!empty($\u POST['namecarinfo'])){
$contacts=数组(
//“autoperka。info@gmail.com",
//"automobiliukas24@gmail.com",
//  "ruslanneviadomskij@gmail.com",
“加布里埃尔。giniot@gmail.com"
);
foreach($contacts作为$contact){
$recipient\u email=$contact;//recepient
$from_email=$_POST['namecontact'];//来自使用站点域的电子邮件。
$subject=$from_email.“SupirkimasPlius.lt”;//电子邮件主题行
$sender\u name=$\u POST[“namecontact”];
$sender\u car=$\u POST[“namecarinfo”];
$sender_message='Automobilio pasiūlymas:
Marke/modelis:“.$”POST[“namecarinfo”]。“Kontaktai/miestas:“.$”POST[“namecontact”]。“Komentaras:”。$”POST[“namecoment”];
$attachments=$_文件['namephoto'];
$file_count=count($attachments['name']);//计算附加的文件总数
$boundary=md5(time());
如果($file_count>0){//如果附件存在
//标题
$headers=“MIME版本:1.0\r\n”;
$headers.=“发件人:”。$From\u电子邮件。“\r\n”;
$headers.=“回复:”.$sender\u car.“\r\n”;
$headers.=“内容类型:多部分/混合;边界=$boundary\r\n\r\n”;
//消息文本
$body=“--$boundary\r\n”;
$body.=“内容类型:文本/普通;字符集=ISO-8859-1\r\n”;
$body.=“内容传输编码:base64\r\n\r\n”;
$body.=chunk_split(base64_编码($sender_message));
//附件
对于($x=0;$x<$file\u count;$x++){
如果(!empty($attachments['name'][$x])){
/*if($attachments['error'][$x]>0)//如果遇到任何问题,请退出脚本并输出错误
{
$mymsg=数组(
1=>“每一个迪代利斯都有一个新的基尔托斯/迪迪迪斯”,
2=>“每一个迪代利斯都有一个新的世界”,
3=>“卡里达,帕班迪基特”,
4=>Nėraįkeltųnuotraukų,
6=>“克利莫·克莱达”);
骰子($mymsg[$attachments['error'][$x]]);
}*/
//获取文件信息
$file_name=$attachments['name'][$x];
$file_tmp_name=$attachments['tmp_name'][$x];
$file_size=$attachments['size'][$x];
$file_type=$attachments['type'][$x];
//读取文件
$handle=fopen($file\u tmp\u name,“r”);
$content=fread($handle,$file\u size);
fclose($handle);
$encoded_content=chunk_split(base64_encode($content));//分割成更小的块(RFC 2045)
$body.=“--$boundary\r\n”;
$body.=“内容类型:$file\u Type;名称=\”$file\u tmp\u name\“\r\n”;
$body.=“内容配置:附件;文件名=\”$file\U tmp\U name\“\r\n”;
$body.=“内容传输编码:base64\r\n”;
$body.=“X-Attachment-Id:”.rand(100099999)。“\r\n\r\n”;
$body.=$encoded\u内容;
}
}
}else{//否则发送普通电子邮件
$headers=“From:”.$From;
$body=$sender\u消息;
}
$sentMail=mail($recipient\u email,$subject,$body,$headers);
}//foreach uzdaro
}
if($sentMail)//输出成功或失败消息
{
$myfile=fopen(“success.php”,“r”)或die(fopen(“index.php”,“r”));
echo-fread($myfile,filesize(“success.php”);
fclose($myfile);
//邮寄给加布里埃尔。giniot@gmail.com“,$subject,$message,$headers);
//邮件($from、$subject2、$message2、$headers2);//向发件人发送邮件副本
}否则{
$myfile=fopen(“failed.php”,“r”)或die(fopen(“index.php”,“r”));
echo-fread($myfile,filesize(“failed.php”);
fclose($myfile);
}

问题可能是图像太大,上传速度太慢,或者系统/邮件服务器速度太慢。但是你可以试试。这将降低代码的复杂性,并可能提高性能。也来看看。然后,您的代码将如下所示

//first upload your attachments to a temp-directory (tmp/)
for ($i = 0; $i < count ($_FILES['namephoto']['tmp_name']); $i++)
    move_uploaded_file ($_FILES['namephoto']['tmp_name'][$i], 'tmp/'.$_FILES['namephoto']['name'][$i]);

//initialize phpmailer
$mail = new PHPMailer ();

//set smtp credentials
$mail->Host       = 'smtp1.example.com';     // Specify main and backup SMTP servers
$mail->SMTPAuth   = true;                    // Enable SMTP authentication
$mail->Username   = 'user@example.com';      // SMTP username
$mail->Password   = 'secret';                // SMTP password
$mail->SMTPSecure = 'tls';                   // Enable TLS encryption, `ssl` also accepted
$mail->Port       = 587;

//set from-address
$mail->setFrom ($_POST['namecontact']);

//add recipients
foreach ($contacts as $contact)
    $mail->addAddress ($contact);

//add attachments
for ($i = 0; $i < count ($_FILES['namephoto']['name']); $i++)
    $mail->addAttachment ('tmp/'.$_FILES['namephoto']['name'][$i]);

//set subject and body
$mail->Subject = $from_email.' SupirkimasPlius.lt';
$mail->Body    = 'Automobilio pasiūlymas: Marke/modelis: '.$_POST["namecarinfo"].' Kontaktai/miestas: '.$_POST["namecontact"].'Komentaras:'.$_POST["namecoment"];

//send your mail
$sentMail = $mail->send ();

//check if successfully sent
if ($sentMail) {...} else {...}
//首先将附件上载到临时目录(tmp/)
对于($i=0;$iHost='smtp1.example.com';//指定主SMTP服务器和备份SMTP服务器
$mail->SMTPAuth=true;//启用SMTP身份验证
$mail->Username=user@example.com';      // SMTP用户名
$mail->Password='secret';//SMTP密码
$mail->SMTPSecure='tls';//启用TLS加密,也接受'ssl'
$mail->Port=587;
//从地址设置
$mail->setFrom($_POST['namecontact']);
//添加收件人
foreach($contacts作为$contact)
$mail->addAddress($contact);
//添加附件
对于($i=0;$iaddAttachment('tmp/'.$_文件['namephoto']['name'][$i]);
//设置主题和主体
$mail->Subject=$from_email.'SupirkimasPlius.lt';
$mail->Body='Automobilio pasiūlymas:Marke/modelis:'.$(POST[“namecarinfo”].$(Kontaktai/miestas:'.$)POST[“namecompact”].$(POST[“namecompent”].$);
//发邮件
$sentMail=$mail->send();
//检查是否成功发送
如果($sentMail){…}其他{…}

邮件服务器在哪里,有多大