PHP laravel使用自定義郵件類實現(xiàn)發(fā)送郵件
當(dāng)?shù)卿涏]箱為騰訊企業(yè)郵箱的時候。
Phpmailer發(fā)送郵件就不好用了,具體哪里不好用,我沒真沒找到。
但是,郵件得發(fā)啊,怎么辦呢?
我這里搞了一個自定義的發(fā)送郵件類,騰訊企業(yè)郵箱也可用。
但是,郵件發(fā)送失敗,不會返回報錯信息,這個可能是有點坑。
源碼如下:
<?php ? namespace?App\Extend; use?Exception; /** ?*?一個簡單的PHP?SMTP?發(fā)送郵件類 ?*/ ? class?SmtpMail { ????/** ?????*?@var?string?郵件傳輸代理用戶名 ?????*?@access?private ?????*/ ????private?$_userName; ? ????/** ?????*?@var?string?郵件傳輸代理密碼 ?????*?@access?private ?????*/ ????private?$_password; ? ????/** ?????*?@var?string?郵件傳輸代理服務(wù)器地址 ?????*?@access?private ?????*/ ????private?$_sendServer; ? ????/** ?????*?@var?int?郵件傳輸代理服務(wù)器端口 ?????*?@access?private ?????*/ ????private?$_port; ? ????/** ?????*?@var?string?發(fā)件人 ?????*?@access?protected ?????*/ ????protected?$_from; ? ????/** ?????*?@var?string?收件人 ?????*?@access?protected ?????*/ ????protected?$_to; ? ????/** ?????*?@var?string?抄送 ?????*?@access?protected ?????*/ ????protected?$_cc; ? ????/** ?????*?@var?string?秘密抄送 ?????*?@access?protected ?????*/ ????protected?$_bcc; ? ????/** ?????*?@var?string?主題 ?????*?@access?protected ?????*/ ????protected?$_subject; ? ????/** ?????*?@var?string?郵件正文 ?????*?@access?protected ?????*/ ????protected?$_body; ? ????/** ?????*?@var?string?附件 ?????*?@access?protected ?????*/ ????protected?$_attachment; ? ????/** ?????*?@var?reource?socket資源 ?????*?@access?protected ?????*/ ????protected?$_socket; ? ????/** ?????*?@var?reource?是否是安全連接 ?????*?@access?protected ?????*/ ????protected?$_isSecurity; ? ????/** ?????*?@var?string?錯誤信息 ?????*?@access?protected ?????*/ ????protected?$_errorMessage; ? ????protected?$_debug?=?false; ????/*輸出調(diào)試信息*/ ????private?function?debug($msg) ????{ ????????if?($this->_debug)?{ ????????????echo?$msg,?'<br>',?"\n"; ????????} ????} ????public?function?setDebug($val?=?true) ????{ ????????$this->_debug?=?$val; ????} ? ????/** ?????*?設(shè)置郵件傳輸代理,如果是可以匿名發(fā)送有郵件的服務(wù)器,只需傳遞代理服務(wù)器地址就行 ?????*?@access?public ?????*?@param?string?$server?代理服務(wù)器的ip或者域名 ?????*?@param?string?$username?認證賬號 ?????*?@param?string?$password?認證密碼 ?????*?@param?int?$port?代理服務(wù)器的端口,smtp默認25號端口 ?????*?@param?boolean?$isSecurity?到服務(wù)器的連接是否為安全連接,默認false ?????*?@return?boolean ?????*/ ????public?function?setServer($server,?$username?=?"",?$password?=?"",?$port?=?25,?$isSecurity?=?false) ????{ ????????$this->_sendServer?=?$server; ????????$this->_port?=?$port; ????????$this->_isSecurity?=?$isSecurity; ????????$this->_userName?=?empty($username)???""?:?base64_encode($username); ????????$this->_password?=?empty($password)???""?:?base64_encode($password); ????????return?true; ????} ? ????/** ?????*?設(shè)置發(fā)件人 ?????*?@access?public ?????*?@param?string?$from?發(fā)件人地址 ?????*?@return?boolean ?????*/ ????public?function?setFrom($from) ????{ ????????$this->_from?=?$from; ????????return?true; ????} ? ????/** ?????*?設(shè)置收件人,多個收件人,調(diào)用多次. ?????*?@access?public ?????*?@param?string?$to?收件人地址 ?????*?@return?boolean ?????*/ ????public?function?setReceiver($to) ????{ ????????if?(isset($this->_to))?{ ????????????if?(is_string($this->_to))?{ ????????????????$this->_to?=?array($this->_to); ????????????????$this->_to[]?=?$to; ????????????????return?true; ????????????}?elseif?(is_array($this->_to))?{ ????????????????$this->_to[]?=?$to; ????????????????return?true; ????????????}?else?{ ????????????????return?false; ????????????} ????????}?else?{ ????????????$this->_to?=?$to; ????????????return?true; ????????} ????} ? ????/** ?????*?設(shè)置抄送,多個抄送,調(diào)用多次. ?????*?@access?public ?????*?@param?string?$cc?抄送地址 ?????*?@return?boolean ?????*/ ????public?function?setCc($cc) ????{ ????????if?(isset($this->_cc))?{ ????????????if?(is_string($this->_cc))?{ ????????????????$this->_cc?=?array($this->_cc); ????????????????$this->_cc[]?=?$cc; ????????????????return?true; ????????????}?elseif?(is_array($this->_cc))?{ ????????????????$this->_cc[]?=?$cc; ????????????????return?true; ????????????}?else?{ ????????????????return?false; ????????????} ????????}?else?{ ????????????$this->_cc?=?$cc; ????????????return?true; ????????} ????} ? ????/** ?????*?設(shè)置秘密抄送,多個秘密抄送,調(diào)用多次 ?????*?@access?public ?????*?@param?string?$bcc?秘密抄送地址 ?????*?@return?boolean ?????*/ ????public?function?setBcc($bcc) ????{ ????????if?(isset($this->_bcc))?{ ????????????if?(is_string($this->_bcc))?{ ????????????????$this->_bcc?=?array($this->_bcc); ????????????????$this->_bcc[]?=?$bcc; ????????????????return?true; ????????????}?elseif?(is_array($this->_bcc))?{ ????????????????$this->_bcc[]?=?$bcc; ????????????????return?true; ????????????}?else?{ ????????????????return?false; ????????????} ????????}?else?{ ????????????$this->_bcc?=?$bcc; ????????????return?true; ????????} ????} ? ????/** ?????*?設(shè)置郵件附件,多個附件,調(diào)用多次 ?????*?@access?public ?????*?@param?string?$file?文件地址 ?????*?@return?boolean ?????*/ ????public?function?addAttachment($file) ????{ ????????if?(!file_exists($file))?{ ????????????$this->_errorMessage?=?"file?"?.?$file?.?"?does?not?exist."; ????????????return?false; ????????} ????????if?(isset($this->_attachment))?{ ????????????if?(is_string($this->_attachment))?{ ????????????????$this->_attachment?=?array($this->_attachment); ????????????????$this->_attachment[]?=?$file; ????????????????return?true; ????????????}?elseif?(is_array($this->_attachment))?{ ????????????????$this->_attachment[]?=?$file; ????????????????return?true; ????????????}?else?{ ????????????????return?false; ????????????} ????????}?else?{ ????????????$this->_attachment?=?$file; ????????????return?true; ????????} ????} ? ????/** ?????*?設(shè)置郵件信息 ?????*?@access?public ?????*?@param?string?$body?郵件主題 ?????*?@param?string?$subject?郵件主體內(nèi)容,可以是純文本,也可是是HTML文本 ?????*?@return?boolean ?????*/ ????public?function?setMail($subject,?$body) ????{ ????????$this->_subject?=?$subject; ????????$this->_body?=?base64_encode($body); ????????return?true; ????} ? ????/** ?????*?發(fā)送郵件 ?????*?@access?public ?????*?@return?boolean ?????*/ ????public?function?send() ????{ ????????$command?=?$this->getCommand(); ? ????????$this->_isSecurity???$this->socketSecurity()?:?$this->socket(); ? ????????foreach?($command?as?$value)?{ ????????????$result?=?$this->_isSecurity???$this->sendCommandSecurity($value[0],?$value[1])?:?$this->sendCommand($value[0],?$value[1]); ????????????if?($result)?{ ????????????????continue; ????????????}?else?{ ????????????????return?false; ????????????} ????????} ? ????????//其實這里也沒必要關(guān)閉,smtp命令:QUIT發(fā)出之后,服務(wù)器就關(guān)閉了連接,本地的socket資源會自動釋放 ????????$this->_isSecurity???$this->closeSecutity()?:?$this->close(); ????????return?true; ????} ? ????/** ?????*?返回錯誤信息 ?????*?@return?string ?????*/ ????public?function?error() ????{ ????????if?(!isset($this->_errorMessage))?{ ????????????$this->_errorMessage?=?""; ????????} ????????return?$this->_errorMessage; ????} ? ????/** ?????*?返回mail命令 ?????*?@access?protected ?????*?@return?array ?????*/ ????protected?function?getCommand() ????{ ????????$separator?=?"----=_Part_"?.?md5($this->_from?.?time())?.?uniqid();?//分隔符 ? ????????$command?=?array( ????????????array("HELO?sendmail\r\n",?250) ????????); ????????if?(!empty($this->_userName))?{ ????????????$command[]?=?array("AUTH?LOGIN\r\n",?334); ????????????$command[]?=?array($this->_userName?.?"\r\n",?334); ????????????$command[]?=?array($this->_password?.?"\r\n",?235); ????????} ? ????????//設(shè)置發(fā)件人 ????????$command[]?=?array("MAIL?FROM:?<"?.?$this->_from?.?">\r\n",?250); ????????$header?=?"FROM:?<"?.?$this->_from?.?">\r\n"; ? ????????//設(shè)置收件人 ????????if?(is_array($this->_to))?{ ????????????$count?=?count($this->_to); ????????????for?($i?=?0;?$i?<?$count;?$i++)?{ ????????????????$command[]?=?array("RCPT?TO:?<"?.?$this->_to[$i]?.?">\r\n",?250); ????????????????if?($i?==?0)?{ ????????????????????$header?.=?"TO:?<"?.?$this->_to[$i]?.?">"; ????????????????}?elseif?($i?+?1?==?$count)?{ ????????????????????$header?.=?",<"?.?$this->_to[$i]?.?">\r\n"; ????????????????}?else?{ ????????????????????$header?.=?",<"?.?$this->_to[$i]?.?">"; ????????????????} ????????????} ????????}?else?{ ????????????$command[]?=?array("RCPT?TO:?<"?.?$this->_to?.?">\r\n",?250); ????????????$header?.=?"TO:?<"?.?$this->_to?.?">\r\n"; ????????} ? ????????//設(shè)置抄送 ????????if?(isset($this->_cc))?{ ????????????if?(is_array($this->_cc))?{ ????????????????$count?=?count($this->_cc); ????????????????for?($i?=?0;?$i?<?$count;?$i++)?{ ????????????????????$command[]?=?array("RCPT?TO:?<"?.?$this->_cc[$i]?.?">\r\n",?250); ????????????????????if?($i?==?0)?{ ????????????????????????$header?.=?"CC:?<"?.?$this->_cc[$i]?.?">"; ????????????????????}?elseif?($i?+?1?==?$count)?{ ????????????????????????$header?.=?",<"?.?$this->_cc[$i]?.?">\r\n"; ????????????????????}?else?{ ????????????????????????$header?.=?",<"?.?$this->_cc[$i]?.?">"; ????????????????????} ????????????????} ????????????}?else?{ ????????????????$command[]?=?array("RCPT?TO:?<"?.?$this->_cc?.?">\r\n",?250); ????????????????$header?.=?"CC:?<"?.?$this->_cc?.?">\r\n"; ????????????} ????????} ? ????????//設(shè)置秘密抄送 ????????if?(isset($this->_bcc))?{ ????????????if?(is_array($this->_bcc))?{ ????????????????$count?=?count($this->_bcc); ????????????????for?($i?=?0;?$i?<?$count;?$i++)?{ ????????????????????$command[]?=?array("RCPT?TO:?<"?.?$this->_bcc[$i]?.?">\r\n",?250); ????????????????????if?($i?==?0)?{ ????????????????????????$header?.=?"BCC:?<"?.?$this->_bcc[$i]?.?">"; ????????????????????}?elseif?($i?+?1?==?$count)?{ ????????????????????????$header?.=?",<"?.?$this->_bcc[$i]?.?">\r\n"; ????????????????????}?else?{ ????????????????????????$header?.=?",<"?.?$this->_bcc[$i]?.?">"; ????????????????????} ????????????????} ????????????}?else?{ ????????????????$command[]?=?array("RCPT?TO:?<"?.?$this->_bcc?.?">\r\n",?250); ????????????????$header?.=?"BCC:?<"?.?$this->_bcc?.?">\r\n"; ????????????} ????????} ? ????????//主題 ????????$header?.=?"Subject:?"?.?$this->_subject?.?"\r\n"; ????????if?(isset($this->_attachment))?{ ????????????//含有附件的郵件頭需要聲明成這個 ????????????$header?.=?"Content-Type:?multipart/mixed;\r\n"; ????????}?elseif?(false)?{ ????????????//郵件體含有圖片資源的需要聲明成這個 ????????????$header?.=?"Content-Type:?multipart/related;\r\n"; ????????}?else?{ ????????????//html或者純文本的郵件聲明成這個 ????????????$header?.=?"Content-Type:?multipart/alternative;\r\n"; ????????} ? ????????//郵件頭分隔符 ????????$header?.=?"\t"?.?'boundary="'?.?$separator?.?'"'; ????????$header?.=?"\r\nMIME-Version:?1.0\r\n"; ????????$header?.=?"\r\n--"?.?$separator?.?"\r\n"; ????????$header?.=?"Content-Type:text/html;?charset=utf-8\r\n"; ????????$header?.=?"Content-Transfer-Encoding:?base64\r\n\r\n"; ????????$header?.=?$this->_body?.?"\r\n"; ????????$header?.=?"--"?.?$separator?.?"\r\n"; ? ????????//加入附件 ????????if?(isset($this->_attachment)?&&?!empty($this->_attachment))?{ ????????????if?(is_array($this->_attachment))?{ ????????????????$count?=?count($this->_attachment); ????????????????for?($i?=?0;?$i?<?$count;?$i++)?{ ????????????????????$header?.=?"\r\n--"?.?$separator?.?"\r\n"; ????????????????????$header?.=?"Content-Type:?"?.?$this->getMIMEType($this->_attachment[$i])?.?';?name="'?.?basename($this->_attachment[$i])?.?'"'?.?"\r\n"; ????????????????????$header?.=?"Content-Transfer-Encoding:?base64\r\n"; ????????????????????$header?.=?'Content-Disposition:?attachment;?filename="'?.?basename($this->_attachment[$i])?.?'"'?.?"\r\n"; ????????????????????$header?.=?"\r\n"; ????????????????????$header?.=?$this->readFile($this->_attachment[$i]); ????????????????????$header?.=?"\r\n--"?.?$separator?.?"\r\n"; ????????????????} ????????????}?else?{ ????????????????$header?.=?"\r\n--"?.?$separator?.?"\r\n"; ????????????????$header?.=?"Content-Type:?"?.?$this->getMIMEType($this->_attachment)?.?';?name="'?.?basename($this->_attachment)?.?'"'?.?"\r\n"; ????????????????$header?.=?"Content-Transfer-Encoding:?base64\r\n"; ????????????????$header?.=?'Content-Disposition:?attachment;?filename="'?.?basename($this->_attachment)?.?'"'?.?"\r\n"; ????????????????$header?.=?"\r\n"; ????????????????$header?.=?$this->readFile($this->_attachment); ????????????????$header?.=?"\r\n--"?.?$separator?.?"\r\n"; ????????????} ????????} ? ????????//結(jié)束郵件數(shù)據(jù)發(fā)送 ????????$header?.=?"\r\n.\r\n"; ? ????????$command[]?=?array("DATA\r\n",?354); ????????$command[]?=?array($header,?250); ????????$command[]?=?array("QUIT\r\n",?221); ? ????????return?$command; ????} ? ????/** ?????*?發(fā)送命令 ?????*?@access?protected ?????*?@param?string?$command?發(fā)送到服務(wù)器的smtp命令 ?????*?@param?int?$code?期望服務(wù)器返回的響應(yīng)嗎 ?????*?@return?boolean ?????*/ ????protected?function?sendCommand($command,?$code) ????{ ????????//debug('Send?command:'?.?$command?.?',expected?code:'?.?$code?); ????????//發(fā)送命令給服務(wù)器 ????????try?{ ????????????if?(socket_write($this->_socket,?$command,?strlen($command)))?{ ? ????????????????//當(dāng)郵件內(nèi)容分多次發(fā)送時,沒有$code,服務(wù)器沒有返回 ????????????????if?(empty($code))?{ ????????????????????return?true; ????????????????} ? ????????????????//讀取服務(wù)器返回 ????????????????$data?=?trim(socket_read($this->_socket,?1024)); ????????????????//debug(?'response:'?.?$data); ? ????????????????if?($data)?{ ????????????????????$pattern?=?"/^"?.?$code?.?"/"; ????????????????????if?(preg_match($pattern,?$data))?{ ????????????????????????return?true; ????????????????????}?else?{ ????????????????????????$this->_errorMessage?=?"Error:"?.?$data?.?"|**|?command:"; ????????????????????????return?false; ????????????????????} ????????????????}?else?{ ????????????????????$this->_errorMessage?=?"Error:"?.?socket_strerror(socket_last_error()); ????????????????????return?false; ????????????????} ????????????}?else?{ ????????????????$this->_errorMessage?=?"Error:"?.?socket_strerror(socket_last_error()); ????????????????return?false; ????????????} ????????}?catch?(Exception?$e)?{ ????????????$this->_errorMessage?=?"Error:"?.?$e->getMessage(); ????????} ????} ? ????/** ?????*?發(fā)送命令 ?????*?@access?protected ?????*?@param?string?$command?發(fā)送到服務(wù)器的smtp命令 ?????*?@param?int?$code?期望服務(wù)器返回的響應(yīng)嗎 ?????*?@return?boolean ?????*/ ????protected?function?sendCommandSecurity($command,?$code) ????{ ????????//debug('Send?command:'?.?$command?.?',expected?code:'?.?$code?); ????????try?{ ????????????if?(fwrite($this->_socket,?$command))?{ ????????????????//當(dāng)郵件內(nèi)容分多次發(fā)送時,沒有$code,服務(wù)器沒有返回 ????????????????if?(empty($code))?{ ????????????????????return?true; ????????????????} ????????????????//讀取服務(wù)器返回 ????????????????$data?=?trim(fread($this->_socket,?1024)); ????????????????//debug(?'response:'?.?$data?); ? ????????????????if?($data)?{ ????????????????????$pattern?=?"/^"?.?$code?.?"/"; ????????????????????if?(preg_match($pattern,?$data))?{ ????????????????????????return?true; ????????????????????}?else?{ ????????????????????????$this->_errorMessage?=?"Error:"?.?$data?.?"|**|?command:"; ????????????????????????return?false; ????????????????????} ????????????????}?else?{ ????????????????????return?false; ????????????????} ????????????}?else?{ ????????????????$this->_errorMessage?=?"Error:?"?.?$command?.?"?send?failed"; ????????????????return?false; ????????????} ????????}?catch?(Exception?$e)?{ ????????????$this->_errorMessage?=?"Error:"?.?$e->getMessage(); ????????} ????} ? ????/** ?????*?讀取附件文件內(nèi)容,返回base64編碼后的文件內(nèi)容 ?????*?@access?protected ?????*?@param?string?$file?文件 ?????*?@return?mixed ?????*/ ????protected?function?readFile($file) ????{ ????????if?(file_exists($file))?{ ????????????$file_obj?=?file_get_contents($file); ????????????return?base64_encode($file_obj); ????????}?else?{ ????????????$this->_errorMessage?=?"file?"?.?$file?.?"?dose?not?exist"; ????????????return?false; ????????} ????} ? ????/** ?????*?獲取附件MIME類型 ?????*?@access?protected ?????*?@param?string?$file?文件 ?????*?@return?mixed ?????*/ ????protected?function?getMIMEType($file) ????{ ????????if?(file_exists($file))?{ ????????????$mime?=?mime_content_type($file); ????????????if?(!preg_match("/gif|jpg|png|jpeg/",?$mime))?{ ????????????????$mime?=?"application/octet-stream"; ????????????} ????????????return?$mime; ????????}?else?{ ????????????return?false; ????????} ????} ? ????/** ?????*?建立到服務(wù)器的網(wǎng)絡(luò)連接 ?????*?@access?private ?????*?@return?boolean ?????*/ ????private?function?socket() ????{ ????????//創(chuàng)建socket資源 ????????$this->_socket?=?socket_create(AF_INET,?SOCK_STREAM,?getprotobyname('tcp')); ? ????????if?(!$this->_socket)?{ ????????????$this->_errorMessage?=?socket_strerror(socket_last_error()); ????????????return?false; ????????} ? ????????socket_set_block($this->_socket);?//設(shè)置阻塞模式 ? ????????//連接服務(wù)器 ????????if?(!socket_connect($this->_socket,?$this->_sendServer,?$this->_port))?{ ????????????$this->_errorMessage?=?socket_strerror(socket_last_error()); ????????????return?false; ????????} ????????$str?=?socket_read($this->_socket,?1024); ????????if?(!strpos($str,?"220"))?{ ????????????$this->_errorMessage?=?$str; ????????????return?false; ????????} ? ????????return?true; ????} ? ????/** ?????*?建立到服務(wù)器的SSL網(wǎng)絡(luò)連接 ?????*?@access?private ?????*?@return?boolean ?????*/ ????private?function?socketSecurity() ????{ ????????$remoteAddr?=?"tcp://"?.?$this->_sendServer?.?":"?.?$this->_port; ????????$this->_socket?=?stream_socket_client($remoteAddr,?$errno,?$errstr,?30); ????????if?(!$this->_socket)?{ ????????????$this->_errorMessage?=?$errstr; ????????????return?false; ????????} ? ????????//設(shè)置加密連接,默認是ssl,如果需要tls連接,可以查看php手冊stream_socket_enable_crypto函數(shù)的解釋 ????????stream_socket_enable_crypto($this->_socket,?true,?STREAM_CRYPTO_METHOD_SSLv23_CLIENT); ? ????????stream_set_blocking($this->_socket,?1);?//設(shè)置阻塞模式 ????????$str?=?fread($this->_socket,?1024); ????????if?(!strpos($str,?"220"))?{ ????????????$this->_errorMessage?=?$str; ????????????return?false; ????????} ? ????????return?true; ????} ? ????/** ?????*?關(guān)閉socket ?????*?@access?private ?????*?@return?boolean ?????*/ ????private?function?close() ????{ ????????if?(isset($this->_socket)?&&?is_object($this->_socket))?{ ????????????$this->_socket->close(); ????????????return?true; ????????} ????????$this->_errorMessage?=?"No?resource?can?to?be?close"; ????????return?false; ????} ? ????/** ?????*?關(guān)閉安全socket ?????*?@access?private ?????*?@return?boolean ?????*/ ????private?function?closeSecutity() ????{ ????????if?(isset($this->_socket)?&&?is_object($this->_socket))?{ ????????????stream_socket_shutdown($this->_socket,?STREAM_SHUT_WR); ????????????return?true; ????????} ????????$this->_errorMessage?=?"No?resource?can?to?be?close"; ????????return?false; ????} }
關(guān)于laravel5.8框架如何引入第三方類庫,請參考下文補充內(nèi)容 laravel8大同小異。
調(diào)用方法:
/** ?????*?@name:?發(fā)送郵件方法 ?????*?@author:?camellia ?????*?@date:?2021-01-19? ?????*?@param:??$email??string??發(fā)送給誰 ?????*?@param:??$mail_title?string??郵件標(biāo)題 ?????*?@param:??$mail_body??string??郵件內(nèi)容 ?????*?@return:?$result?bool????true/false ?????*/ ????public?function?send_mail($email,?$mail_title,?$mail_body) ????{ ????????$mail?=?new?SmtpMail(); ????????$mail->setServer(EMAIL_SERVER,?SEND_EMAIL,?EMAIL_SECERT,?465,?true);?//參數(shù)1(qq郵箱使用smtp.qq.com,qq企業(yè)郵箱使用smtp.exmail.qq.com),參數(shù)2(郵箱登陸賬號),參數(shù)3(郵箱登陸密碼,也有可能是獨立密碼,就是開啟pop3/smtp時的授權(quán)碼),參數(shù)4(默認25,騰云服務(wù)器屏蔽25端口,所以用的465),參數(shù)5(是否開啟ssl,用465就得開啟)//$mail->setServer("XXXXX",?"joffe@XXXXX",?"XXXXX",?465,?true); ????????$mail->setFrom(SEND_EMAIL,"時間里的博客");?//發(fā)送者郵箱 ????????$mail->setReceiver($email);?//接收者郵箱 ????????$mail->addAttachment("");?//Attachment?附件,不用可注釋 ????????$mail->setMail($mail_title,?$mail_body);?//標(biāo)題和內(nèi)容 ????????$result?=?$mail->send();?//可以var_dump一下,發(fā)送成功會返回true,失敗false ????????return?$result;//*/ ????}
代碼親測可用。
補充
laravel5.8引入第三方類庫的方法詳解
有需求需要使用PHPMailer發(fā)送郵件。
那么首先需要引入PHPMailer這個第三方的類庫。我是這樣做的:
1:在app目錄下新建Extend目錄。如下圖所示:
將PHPMailer放入Extend目錄下。如下圖所示
2:修改項目根目錄下的composer.json文件
"autoload": { "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories", "app/Extend/PHPMailer/src" ] },
添加你第三方類庫的位置到autoload中
3:執(zhí)行composer命令,在網(wǎng)站根目錄下:
composer dump-autoload
4:調(diào)用:
(1):使用命名空間
use PHPMailer\src\PHPMailer;
(2):調(diào)用
//實例化PHPMailer核心類 $mail = new PHPMailer();
如果報錯,就在實例化前邊加一個轉(zhuǎn)義符\
至此,laravel引入第三方類庫成功。
以上就是PHP laravel使用自定義郵件類實現(xiàn)發(fā)送郵件的詳細內(nèi)容,更多關(guān)于PHP laravel發(fā)送郵件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
php導(dǎo)入大量數(shù)據(jù)到mysql性能優(yōu)化技巧
這篇文章主要介紹了php導(dǎo)入大量數(shù)據(jù)到mysql性能優(yōu)化技巧,通過針對SQL語句的優(yōu)化實現(xiàn)了mysql性能的提高,非常具有實用價值,需要的朋友可以參考下2014-12-12PHP中VC6、VC9、TS、NTS版本的區(qū)別與用法詳解
ISAPI執(zhí)行方式是以DLL動態(tài)庫的形式使用,可以在被用戶請求后執(zhí)行,在處理完一個用戶請求后不會馬上消失,所以需要進行線程安全檢查2013-10-10phpStudy在運行PHP文件時出現(xiàn)中文亂碼的有效解決方法
在使用phpStudy進行PHP開發(fā)時,經(jīng)常會遇到中文顯示亂碼的問題,這不僅影響開發(fā)效率,還可能導(dǎo)致網(wǎng)站顯示異常,本文將詳細介紹解決phpStudy中文亂碼的有效方法,需要的朋友可以參考下2024-10-10