2017-01-23 16:41:11 3199次浏览 1条回答 1 悬赏 100 金钱

现在有个功能就是发邮件并且是包含附件的,我使用的是PHPMailer这个类库,现在是可以成功的 但是附件如果很大(我试过30M的,就卡在那,很久后才收到邮件) 就卡死了

相关场景是这样的:点击确定按钮,就发一封邮件(当然还有其他数据库操作),我的想法是把发邮件作为异步处理,让他在后台运行,可是这个时候发现更卡

相关代码如下:

/** 点击确定按钮 **/

$this->sendemailFj(); //调用fsockopen方法

show_msg("提交成功", $url = site_url() . "zhenghe/inspection/inspectionOrderList/auditreport");//操作成功后的
提示
function sendemailFj(){

 $fp = fsockopen("www.testcoo.cn", 80, $errno, $errstr, 30);

 if (!$fp) {

    echo "$errstr ($errno)<br />\n";

 } else {

    $out = "GET /zhenghe/test/yibu  / HTTP/1.1\r\n";

    $out .= "Host:www.testcoo.cn \r\n";

    $out .= "Connection: Close\r\n\r\n";

    

    fwrite($fp, $out);

    /*忽略执行结果

    while (!feof($fp)) {

     echo fgets($fp, 128);

   }*/

   fclose($fp);}

}



 function yibu(){

         require_once 'sendmail.php';

         sendMail('1096415969@qq.com', 'ssss', 'content');

    }





function sendEmail($tomail,$title,$content){

            require_once 'PHPMailer/PHPMailerAutoload.php';



            $mail = new PHPMailer;                            



            $mail->isSMTP();                             

            $mail->Host = 'xxx.ym.163.com'; 

            $mail->SMTPAuth = true; 

            $mail->Username = 'xxxx@xxxx.com'; 

            $mail->Password = 'xxxx';

            $mail->SMTPSecure = 'tls';

            $mail->Port = 25;  

            $mail->CharSet ="UTF-8";

            

            $mail->setFrom('xxx@xxxx.com', 'test');

            $mail->addAddress($tomail); 

            

            $path = dirname(__FILE__);

         $mail>addAttachment($path.'\static\zhan\uploads\reportpdf\test.zip','test.zip'); // 添加附件,并指定名称 

            $mail->isHTML(true);



            $mail->Subject = $title;

            $mail->Body    = $content;

            $mail->AltBody = $content;



            if(!$mail->send()) {

                return false;

            } else {

                return true;

            }

        }

相关代码如上,点击按钮,执行sendemailFj方法,sendemailFj方法有调用yibu方法,yibu方法调用发邮件方法,这个时候的现象是:页面加载20几分钟左右,然后跳出‘提交成功’的弹框,过个好几分钟后,邮件才收到,(个人发现前面20分钟虽然在加载,但是压根不是发邮件,弹框跳出后,才开始发邮件)

不知道有什么好的解决思路,文件小时没问题的

  • 回答于 2017-01-24 10:07 举报

    建议发送大附件的时候内容给一个 HTML 链接 ,这样发送的是文本,链接用 YII 自动生成的绝对地址 xx.xx.com/yii-app.zip
    这样的速度回很快!

    1 条回复
    回复于 2017-02-17 08:21 回复

    30M应该不算大吧

您需要登录后才可以回答。登录 | 立即注册
xyf90314
副总裁

xyf90314

注册时间:2015-03-04
最后登录:2023-03-13
在线时长:95小时23分
  • 粉丝21
  • 金钱5257
  • 威望40
  • 积分6607

热门问题