本文目錄一覽:
php如何做郵箱激活驗證?
PHPMailer實現PHP發郵件功能,同時保存驗證碼到伺服器的cache, 驗證用戶收到的驗證碼和cache全等
發送郵件具體教程戳:網頁鏈接,附帶PHPMailer代碼包免費下載
請問一下,PHP配置SMTP怎麼弄?
PHPMailer的獲取:
PHPMailer項目地址:PHPMailer 使用git命令克隆到本地,或直接在該項目頁面的右下方點擊「 Download ZIP 」即可獲取到完整的PHPMailer代碼包,再到本地解壓即可。
步驟一:使我們的QQ郵箱能夠發送郵件
這裡怎麼說能夠發送郵件呢?其實我們的郵箱都是可以發送郵件的,但是要實現在我們的網站中發送郵件,那就要設置一下我們的QQ郵箱了,因為此時我們的網站現在是作為一個第三方客戶端存在的。
步驟一:使我們的QQ郵箱能夠發送郵件
這裡怎麼說能夠發送郵件呢?其實我們的郵箱都是可以發送郵件的,但是要實現在我們的網站中發送郵件,那就要設置一下我們的QQ郵箱了,因為此時我們的網站現在是作為一個第三方客戶端存在的
由於待會我們用到的是SMTP伺服器來發送,在這裡建議把前面的兩項開啟了!當你點擊開啟的時候,它會提示:
當你完成以上步驟之後,就會得到一個授權碼,你可以先複製出來,待會我們會用到(開啟兩項的話會得到兩個授權碼,用最後的那個授權碼!或者點擊下面的生成授權碼來獲取一個新的授權碼,一定要最新的!)。
步驟二:使我們的PHP能夠使用QQ郵箱發送郵件
PHPMailer需PHP的socket擴展支持,而PHPMailer鏈接qq域名郵箱時需要ssl加密方式,固php還得openssl的支持,可以查看phpinfo,如下兩項均存在則可以使用,其中openssl版本號之類不用管;許多虛擬主機中的php是不支持openssl擴展的,那你可能就悲劇了。
步驟三:將PHPMailer做一定的處理
由於我們下載下來的PHPMailer文件夾裡邊的文件有很多我們是用不上的,所以我們也沒必要浪費這些內存。我們可以對這個文件夾瘦身,在這裡我只保存了以下的幾個文件:class.phpmailer.php、class.phpmaileroauth.php、class.pop3.php、class.smtp.php、PHPMailerAutoload.php。
/*發送郵件方法
*@param $to:接收者 $title:標題 $content:郵件內容
*@return bool true:發送成功 false:發送失敗
*/function sendMail($to,$title,$content){ //引入PHPMailer的核心文件 使用require_once包含避免出現PHPMailer類重複定義的警告
require_once(“phpmailer/class.phpmailer.php”);
require_once(“phpmailer/class.smtp.php”); //實例化PHPMailer核心類
$mail = new PHPMailer(); //是否啟用smtp的debug進行調試 開發環境建議開啟 生產環境注釋掉即可 默認關閉debug調試模式
$mail-SMTPDebug = 1; //使用smtp鑒權方式發送郵件
$mail-isSMTP(); //smtp需要鑒權 這個必須是true
$mail-SMTPAuth=true; //鏈接qq域名郵箱的伺服器地址
$mail-Host = ‘smtp.qq.com’; //設置使用ssl加密方式登錄鑒權
$mail-SMTPSecure = ‘ssl’; //設置ssl連接smtp伺服器的遠程伺服器埠號,以前的默認是25,但是現在新的好像已經不可用了 可選465或587
$mail-Port = 465; //設置smtp的helo消息頭 這個可有可無 內容任意
// $mail-Helo = ‘Hello smtp.qq.com Server’;
//設置發件人的主機域 可有可無 默認為localhost 內容任意,建議使用你的域名
$mail-Hostname = ”; //設置發送的郵件的編碼 可選GB2312 我喜歡utf-8 據說utf8在某些客戶端收信下會亂碼
$mail-CharSet = ‘UTF-8’; //設置發件人姓名(昵稱) 任意內容,顯示在收件人郵件的發件人郵箱地址前的發件人姓名
$mail-FromName = ‘LSGO實驗室’; //smtp登錄的賬號 這裡填入字元串格式的qq號即可
$mail-Username =’12345678@qq.com’; //smtp登錄的密碼 使用生成的授權碼(就剛才叫你保存的最新的授權碼)
$mail-Password = ‘sqyofzbqlfkntbncl’; //設置發件人郵箱地址 這裡填入上述提到的「發件人郵箱」
$mail-From = ‘12345678@qq.com’; //郵件正文是否為html編碼 注意此處是一個方法 不再是屬性 true或false
$mail-isHTML(true);
//設置收件人郵箱地址 該方法有兩個參數 第一個參數為收件人郵箱地址 第二參數為給該地址設置的昵稱 不同的郵箱系統會自動進行處理變動 這裡第二個參數的意義不大
$mail-addAddress($to,’lsgo在線通知’); //添加多個收件人 則多次調用方法即可
// $mail-addAddress(‘xxx@163.com’,’lsgo在線通知’);
//添加該郵件的主題
$mail-Subject = $title; //添加郵件正文 上方將isHTML設置成了true,則可以是完整的html字元串 如:使用file_get_contents函數讀取本地的html文件
$mail-Body = $content; //為該郵件添加附件 該方法也有兩個參數 第一個參數為附件存放的目錄(相對目錄、或絕對目錄均可) 第二參數為在郵件附件中該附件的名稱
// $mail-addAttachment(‘./d.jpg’,’mm.jpg’);
//同樣該方法可以多次調用 上傳多個附件
// $mail-addAttachment(‘./Jlib-1.1.0.js’,’Jlib.js’);
$status = $mail-send(); //簡單的判斷與提示信息
if($status) { return true;
}else{ return false;
}
}
?phprequire_once(“./functions.php”);$flag = sendMail(‘456789@qq.com’,’lsgo在線通知’,’恭喜你成功加入LSGO實驗室,開啟你的學習之旅吧!’);if($flag){ echo “發送郵件成功!”;
}else{ echo “發送郵件失敗!”;
}?
php怎麼實現發送郵件
PHP發送郵件是「非常的簡單」 因為他提供了mail()函數直接發送,但配置相當麻煩 (1)通過mail()函數發送郵件 mail() 配置PHP.ini 郵件信息 需要類似sendmail這樣的組件支持 (2)通過socket通訊,使用SMTP傳輸 socket連接-SMTP通訊-獲取通訊消息-發送 mail函數的使用 mail() 函數允許您從腳本中直接發送電子郵件。 如果郵件的投遞被成功地接收,則返回 true,否則返回 mail(to,subject,message,headers,parameters) socket方式發送原理 給你一個別人寫好的類 用法在下面 本人經測試很多網站都不提供免費的smtp服務(126、sina、netease 這幾個試過了),騰訊郵箱支持此功能。 用法: ? require_once (’email.class.php’); //########################################## $smtpserver = “smtp.163.com”;//SMTP伺服器 $smtpserverport =25;//SMTP伺服器埠 $smtpusermail = “”;//SMTP伺服器的用戶郵箱 $smtpemailto = “”;//發送給誰 $smtpuser = “”;//SMTP伺服器的用戶帳號 $smtppass = “”;//SMTP伺服器的用戶密碼 $mailsubject = “PHP100測試郵件系統”;//郵件主題 $mailbody = “h1 這是一個測試程序 PHP100.com /h1”;//郵件內容 $mailtype = “HTML”;//郵件格式(HTML/TXT),TXT為文本郵件 ########################################## $smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//這裡面的一個true是表示使用身份驗證,否則不使用身份驗證. $smtp-debug = FALSE;//是否顯示發送的調試信息 $smtp-sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype); ? 郵件發送類 ? class smtp { /* Public Variables */ var $smtp_port; var $time_out; var $host_name; var $log_file; var $relay_host; var $debug; var $auth; var $user; var $pass; /* Private Variables */ var $sock; /* Constractor */ function smtp($relay_host = “”, $smtp_port = 25,$auth = false,$user,$pass) { $this-debug = FALSE; $this-smtp_port = $smtp_port; $this-relay_host = $relay_host; $this-time_out = 30; //is used in fsockopen() # $this-auth = $auth;//auth $this-user = $user; $this-pass = $pass; # $this-host_name = “localhost”; //is used in HELO command $this-log_file =””; $this-sock = FALSE; } /* Main Function */ function sendmail($to, $from, $subject = “”, $body = “”, $mailtype, $cc = “”, $bcc = “”, $additional_headers = “”) { $mail_from = $this-get_address($this-strip_comment($from)); $body = ereg_replace(“(^|(\r\n))(\\.)”, “\\1.\\3”, $body); $header .= “MIME-Version:1.0\r\n”; if($mailtype==”HTML”){ $header .= “Content-Type:text/html\r\n”; } $header .= “To: “.$to.”\r\n”; if ($cc != “”) { $header .= “Cc: “.$cc.”\r\n”; } $header .= “From: $from”.$from.”\r\n”; $header .= “Subject: “.$subject.”\r\n”; $header .= $additional_headers; $header .= “Date: “.date(“r”).”\r\n”; $header .= “X-Mailer:By Redhat (PHP/”.phpversion().”)\r\n”; list($msec, $sec) = explode(” “, microtime()); $header .= “Message-ID: “.date(“YmdHis”, $sec).”.”.($msec*1000000).”.”.$mail_from.”\r\n”; $TO = explode(“,”, $this-strip_comment($to)); if ($cc != “”) { $TO = array_merge($TO, explode(“,”, $this-strip_comment($cc))); } if ($bcc != “”) { $TO = array_merge($TO, explode(“,”, $this-strip_comment($bcc))); } $sent = TRUE; foreach ($TO as $rcpt_to) { $rcpt_to = $this-get_address($rcpt_to); if (!$this-smtp_sockopen($rcpt_to)) { $this-log_write(“Error: Cannot send email to “.$rcpt_to.”\n”); $sent = FALSE; continue; } if ($this-smtp_send($this-host_name, $mail_from, $rcpt_to, $header, $body)) { $this-log_write(“E-mail has been sent to “.$rcpt_to.”\n”); } else { $this-log_write(“Error: Cannot send email to “.$rcpt_to.”\n”); $sent = FALSE; } fclose($this-sock); $this-log_write(“Disconnected from remote host\n”); } echo “br”; echo $header; return $sent; } /* Private Functions */ function smtp_send($helo, $from, $to, $header, $body = “”) { if (!$this-smtp_putcmd(“HELO”, $helo)) { return $this-smtp_error(“sending HELO command”); } #auth if($this-auth){ if (!$this-smtp_putcmd(“AUTH LOGIN”, base64_encode($this-user))) { return $this-smtp_error(“sending HELO command”); } if (!$this-smtp_putcmd(“”, base64_encode($this-pass))) { return $this-smtp_error(“sending HELO command”); } } # if (!$this-smtp_putcmd(“MAIL”, “FROM:”.$from.””)) { return $this-smtp_error(“sending MAIL FROM command”); } if (!$this-smtp_putcmd(“RCPT”, “TO:”.$to.””)) { return $this-smtp_error(“sending RCPT TO command”); } if (!$this-smtp_putcmd(“DATA”)) { return $this-smtp_error(“sending DATA command”); } if (!$this-smtp_message($header, $body)) { return $this-smtp_error(“sending message”); } if (!$this-smtp_eom()) { return $this-smtp_error(“sending CRLF.CRLF [EOM]”); } if (!$this-smtp_putcmd(“QUIT”)) { return $this-smtp_error(“sending QUIT command”); } return TRUE; } function smtp_sockopen($address) { if ($this-relay_host == “”) { return $this-smtp_sockopen_mx($address); } else { return $this-smtp_sockopen_relay(); } } function smtp_sockopen_relay() { $this-log_write(“Trying to “.$this-relay_host.”:”.$this-smtp_port.”\n”); $this-sock = @fsockopen($this-relay_host, $this-smtp_port, $errno, $errstr, $this-time_out); if (!($this-sock $this-smtp_ok())) { $this-log_write(“Error: Cannot connenct to relay host “.$this-relay_host.”\n”); $this-log_write(“Error: “.$errstr.” (“.$errno.”)\n”); return FALSE; } $this-log_write(“Connected to relay host “.$this-relay_host.”\n”); return TRUE;; } function smtp_sockopen_mx($address) { $domain = ereg_replace(“^.+@([^@]+)$”, “\\1”, $address); if (!@getmxrr($domain, $MXHOSTS)) { $this-log_write(“Error: Cannot resolve MX \””.$domain.”\”\n”); return FALSE; } foreach ($MXHOSTS as $host) { $this-log_write(“Trying to “.$host.”:”.$this-smtp_port.”\n”); $this-sock = @fsockopen($host, $this-smtp_port, $errno, $errstr, $this-time_out); if (!($this-sock $this-smtp_ok())) { $this-log_write(“Warning: Cannot connect to mx host “.$host.”\n”); $this-log_write(“Error: “.$errstr.” (“.$errno.”)\n”); continue; } $this-log_write(“Connected to mx host “.$host.”\n”); return TRUE; } $this-log_write(“Error: Cannot connect to any mx hosts (“.implode(“, “, $MXHOSTS).”)\n”); return FALSE; } function smtp_message($header, $body) { fputs($this-sock, $header.”\r\n”.$body); $this-smtp_debug(” “.str_replace(“\r\n”, “\n”.” “, $header.”\n “.$body.”\n “)); return TRUE; } function smtp_eom() { fputs($this-sock, “\r\n.\r\n”); $this-smtp_debug(“. [EOM]\n”); return $this-smtp_ok(); } function smtp_ok() { $response = str_replace(“\r\n”, “”, fgets($this-sock, 512)); $this-smtp_debug($response.”\n”); if (!ereg(“^[23]”, $response)) { fputs($this-sock, “QUIT\r\n”); fgets($this-sock, 512); $this-log_write(“Error: Remote host returned \””.$response.”\”\n”); return FALSE; } return TRUE; } function smtp_putcmd($cmd, $arg = “”) { if ($arg != “”) { if($cmd==””) $cmd = $arg; else $cmd = $cmd.” “.$arg; } fputs($this-sock, $cmd.”\r\n”); $this-smtp_debug(” “.$cmd.”\n”); return $this-smtp_ok(); } function smtp_error($string) { $this-log_write(“Error: Error occurred while “.$string.”.\n”); return FALSE; } function log_write($message) { $this-smtp_debug($message); if ($this-log_file == “”) { return TRUE; } $message = date(“M d H:i:s “).get_current_user().”[“.getmypid().”]: “.$message; if (!@file_exists($this-log_file) || !($fp = @fopen($this-log_file, “a”))) { $this-smtp_debug(“Warning: Cannot open log file \””.$this-log_file.”\”\n”); return FALSE; } flock($fp, LOCK_EX); fputs($fp, $message); fclose($fp); return TRUE; } function strip_comment($address) { $comment = “\\([^()]*\\)”; while (ereg($comment, $address)) { $address = ereg_replace($comment, “”, $address); } return $address; } function get_address($address) { $address = ereg_replace(“([ \t\r\n])+”, “”, $address); $address = ereg_replace(“^.*(.+).*$”, “\\1″, $address); return $address; } function smtp_debug($message) { if ($this-debug) { echo $message.”br”; } } function get_attach_type($image_tag) { // $filedata = array(); $img_file_con=fopen($image_tag,”r”); unset($image_data); while ($tem_buffer=AddSlashes(fread($img_file_con,filesize($image_tag)))) $image_data.=$tem_buffer; fclose($img_file_con); $filedata[‘context’] = $image_data; $filedata[‘filename’]= basename($image_tag); $extension=substr($image_tag,strrpos($image_tag,”.”),strlen($image_tag)-strrpos($image_tag,”.”)); switch($extension){ case “.gif”: $filedata[‘type’] = “image/gif”; break; case “.gz”: $filedata[‘type’] = “application/x-gzip”; break; case “.htm”: $filedata[‘type’] = “text/html”; break; case “.html”: $filedata[‘type’] = “text/html”; break; case “.jpg”: $filedata[‘type’] = “image/jpeg”; break; case “.tar”: $filedata[‘type’] = “application/x-tar”; break; case “.txt”: $filedata[‘type’] = “text/plain”; break; case “.zip”: $filedata[‘type’] = “application/zip”; break; default: $filedata[‘type’] = “application/octet-stream”; break; } return $filedata; } } ?
php如何發送郵件
你好,用這個郵件類,需要在調用時,填寫一個smtp伺服器和你的用戶名密碼。
?php
set_time_limit(600);
/*
* 郵件發送類
*/
class smail {
//您的SMTP 伺服器供應商,可以是域名或IP地址
var $smtp = “”;
//SMTP需要要身份驗證設值為 1 不需要身份驗證值為 0,現在大多數的SMTP服務商都要驗證,如不清楚請與你的smtp 服務商聯繫。
var $check = 1;
//您的email帳號名稱
var $username = “”;
//您的email密碼
var $password = “”;
//此email 必需是發信伺服器上的email
var $s_from = “”;
/*
* 功能:發信初始化設置
* $from 你的發信伺服器上的郵箱
* $password 你的郵箱密碼
* $smtp 您的SMTP 伺服器供應商,可以是域名或IP地址
* $check SMTP需要要身份驗證設值為 1 不需要身份驗證值為 0,現在大多數的SMTP服務商都要驗證
*/
function smail ( $from, $password, $smtp, $check = 1 ) {
if( preg_match(“/^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]+[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{2,3}/”, $from ) ) {
$this-username = substr( $from, 0, strpos( $from , “@” ) );
$this-password = $password;
$this-smtp = $smtp ? $smtp : $this-smtp;
$this-check = $check;
$this-s_from = $from;
}
}
/*
* 功能:發送郵件
* $to 目標郵箱
* $from 來源郵箱
* $subject 郵件標題
* $message 郵件內容
*/
function send ( $to, $from, $subject, $message ) {
//連接伺服器
$fp = fsockopen ( $this-smtp, 25, $errno, $errstr, 60);
if (!$fp ) return “聯接伺服器失敗”.__LINE__;
set_socket_blocking($fp, true );
$lastmessage=fgets($fp,512);
if ( substr($lastmessage,0,3) != 220 ) return “錯誤信息1:$lastmessage”.__LINE__;
//HELO
$yourname = “YOURNAME”;
if($this-check == “1”) $lastact=”EHLO “.$yourname.”\r\n”;
else $lastact=”HELO “.$yourname.”\r\n”;
fputs($fp, $lastact);
$lastmessage == fgets($fp,512);
if (substr($lastmessage,0,3) != 220 ) return “錯誤信息2:$lastmessage”.__LINE__;
while (true) {
$lastmessage = fgets($fp,512);
if ( (substr($lastmessage,3,1) != “-“) or (empty($lastmessage)) )
break;
}
//身份驗證
if ($this-check==”1″) {
//驗證開始
$lastact=”AUTH LOGIN”.”\r\n”;
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 334) return “錯誤信息3:$lastmessage”.__LINE__;
//用戶姓名
$lastact=base64_encode($this-username).”\r\n”;
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 334) return “錯誤信息4:$lastmessage”.__LINE__;
//用戶密碼
$lastact=base64_encode($this-password).”\r\n”;
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != “235”) return “錯誤信息5:$lastmessage”.__LINE__;
}
//FROM:
$lastact=”MAIL FROM: “. $this-s_from . “\r\n”;
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 250) return “錯誤信息6:$lastmessage”.__LINE__;
//TO:
$lastact=”RCPT TO: “. $to .” \r\n”;
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 250) return “錯誤信息7:$lastmessage”.__LINE__;
//DATA
$lastact=”DATA\r\n”;
fputs($fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 354) return “錯誤信息8:$lastmessage”.__LINE__;
//處理Subject頭
$head=”Subject: $subject\r\n”;
$message = $head.”\r\n”.$message;
//處理From頭
$head=”From: $from\r\n”;
$message = $head.$message;
//處理To頭
$head=”To: $to\r\n”;
$message = $head.$message;
//加上結束串
$message .= “\r\n.\r\n”;
//發送信息
fputs($fp, $message);
$lastact=”QUIT\r\n”;
fputs($fp,$lastace);
fclose($fp);
return 0;
}
}
// 發送示例
// 只需要把這部分改成你的信息就行
$sm = new smail( “用戶名”, “密碼”, “發件smtp伺服器” );
$end = $sm-send( “收件人”, “發件人(可以偽造哦)”, “標題”, “內容” );
if( $end ) echo $end;
else echo “發送成功!$x”;
?
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/151198.html