最近作郵件發送的時候嘗試了一下phpmailer,可是在用的過程當中仍是遇到一些問題,在這裏記一下。作的過程當中主要遇到這幾個問題。
1.在作常規測試的時候,發現郵件發送特別慢。這裏主要找到是這句形成的:php
$this->smtp_conn = @stream_socket_client( $host . ":" . $port, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $socket_context );
遇到這個問題,須要將$SMTPDebug設置成2。默認設置是0什麼也不處理;html
2.在郵件發送中須要添加抄送人。能夠這麼設置:數組
if(is_string($addCC)){ $mail->addCC("xxx@qq.com");// 設置郵件抄送人,能夠只寫地址,上述的設置也能夠只寫地址 }else if(is_array($addCC)){ foreach ($addCC as $k=>$v){ $mail->addCC($v); } }
3.添加附件socket
if($is_attachment){ $mail->AddAttachment($attachment_add); //能夠添加附件 }
4.新版有時候還會報函數
MAIL FROM command failed: 501 mail from address must be same as authorization user 這個錯誤;這裏主要是沒有設置來源:$mail->setFrom("xxx@qq.com", "測試");
5.有時須要添加抄送功能,能夠這麼設置。數組的時候是批量添加抄送,字符串是單個抄送。測試
if(is_string($addCC)){ $mail->addCC("wangqian@jiguo.com");// 設置郵件抄送人,能夠只寫地址,上述的設置也能夠只寫地址 }else if(is_array($addCC)){ foreach ($addCC as $k=>$v){ $mail->addCC($v); } }
最後附上一個簡單的實現函數this
/** * $username 用戶名 * $password 密碼 * $setFromusername 發送人姓名 * $send_mail 須要發送的郵件地址 * $addCC 須要抄送的郵件地址 * $title 郵件標題 * $content 郵件內容 * $is_attachment 是都須要附件 * $attachment_add 附件地址 */ function send($username, $password, $setFromusername,$send_mail, $addCC,$title,$content="",$is_attachment=0, $attachment_add=""){ $mail = new PHPMailer(); if(is_string($send_mail)){ $send_mail[] = $send_mail; } foreach ($send_mail as $k=>$v){ $mail->IsSMTP(); $mail->CharSet ='UTF-8'; //設置郵件的字符編碼,這很重要,否則中文亂碼 $mail->SMTPAuth = true; //開啓認證 $mail->Port = 465; $mail->Host = "smtp.exmail.qq.com"; $mail->Username = $username; $mail->Password = $password; $mail->SMTPSecure = 'ssl'; $mail->setFrom($username, $setFromusername); $to = $v; $mail->AddAddress($to); if(is_string($addCC)){ $mail->addCC($addCC);// 設置郵件抄送人,能夠只寫地址,上述的設置也能夠只寫地址 }else if(is_array($addCC)){ foreach ($addCC as $k=>$v){ $mail->addCC($v); } } $mail->Subject = $title; $mail->Body = $content ? $content : $title; $mail->AltBody = $content ? $content : $title;; //當郵件不支持html時備用顯示,能夠省略 $mail->WordWrap = 80; // 設置每行字符串的長度 if($is_attachment){ $mail->AddAttachment($attachment_add); //能夠添加附件 } $mail->IsHTML(true); $mail->Send(); } echo '郵件已發送'; }