1. 程式人生 > >ThinkPHP3.2使用PHPMailer傳送郵件

ThinkPHP3.2使用PHPMailer傳送郵件

首先下載PHPMailer,直接在百度搜下,然後下載就好了。
接著註冊一個新浪郵箱,用作發件人郵箱。qq和163郵箱都不穩定,有時郵件發不出去。

解壓下載的檔案(如果是壓縮包),得到PHPMailer資料夾,資料夾下有以下檔案:


緊接著把這個資料夾放到ThinkPhp中的Library中的Vendor下,具體路徑為:專案資料夾\ThinkPHP\Library\Vendor\,

如圖:


到這裡,PHPMailer就算加入到Thinkphp3.2中了。

使用方法:

開啟Application\Common\Common\function.php(如果沒有這個檔案,則新建一個):

加入以下程式碼:

function sendMail($to){

    //Vendor('PHPMailer.PHPMailerAutoload');  

    vendor('PHPMailer.class#PHPMailer');
    vendor('PHPMailer.class#SMTP');

    $mail = new PHPMailer(); //例項化
    $mail->IsSMTP(); // 啟用SMTP
    $mail->Host=C('MAIL_HOST'); //smtp伺服器的名稱(這裡以新浪郵箱為例)
    $mail->SMTPAuth = C('MAIL_SMTPAUTH'); //啟用smtp認證
    $mail->Username = C('MAIL_USERNAME'); //發件人郵箱名,從config.php中獲得
    $mail->Password = C('MAIL_PASSWORD') ; //發件人郵箱密碼
    $mail->From = C('MAIL_FROM'); //發件人地址(也就是你的郵箱地址)
    $mail->FromName = C('MAIL_FROMNAME'); //發件人姓名
    $mail->AddAddress($to,"尊敬的客戶");
    $mail->WordWrap = 50; //設定每行字元長度
    $mail->Port = 25;
    $mail->IsHTML(C('MAIL_ISHTML')); // 是否HTML格式郵件
    $mail->CharSet=C('MAIL_CHARSET'); //設定郵件編碼
    $mail->Subject ='helloworld'; //郵件主題
    $mail->Body = 'This email is sent by PHPMailer!'; //郵件內容
    $mail->AltBody = "這是一個純文字的身體在非營利的HTML電子郵件客戶端"; //郵件正文不支援HTML的備用顯示

    $result = $mail->Send();
 
    return $result;
}

儲存並退出。

接著開啟Application\Common\Conf\config.php,加入以下程式碼:

<?php
return array(

    'MAIL_HOST' =>'smtp.sina.com',//smtp伺服器的名稱,這裡用的是新浪郵箱,qq: smtp.qq.com , 163:smtp.163.com
    'MAIL_SMTPAUTH' =>TRUE, //啟用smtp認證
    'MAIL_USERNAME' =>'[email protected]',//發件人郵箱名,注意換成你註冊的新浪郵箱地址
    'MAIL_FROM' =>'
[email protected]
',//發件人郵箱地址,注意換成你註冊的新浪郵箱地址 'MAIL_FROMNAME'=>'liujan',//發件人姓名 'MAIL_PASSWORD' =>'*****',//密碼,請填上發件人郵箱密碼 'MAIL_CHARSET' =>'utf-8',//設定郵件編碼 'MAIL_ISHTML' =>TRUE, // 是否HTML格式郵件 ); ?>

儲存並退出。

接著開啟Home下的IndexController,

加入函式sendMail:

public function sendMail(){
 
	$email = '[email protected]';  //收件人郵箱地址
	sendMail($email);
}
儲存並退出。

在瀏覽器中輸入一下地址:

http://localhost/thinkphp/Home/Index/sendMail

如果你的收件人郵箱地址有效,並且發件人郵箱地址和密碼都正確的話,此時應該能正常傳送郵件。上你的收件郵箱看下吧。

如果要用phpmailer來發送註冊賬戶時的啟用郵箱,則可以在資料庫中給user表加上三個欄位,reg_time(註冊時間),status(0表示未啟用,1表示已啟用),verify_code(表示啟用碼)

然後使用者註冊時,以其輸入的使用者郵箱,密碼加上當前時間利用md5來生成一個啟用碼verify_code:

$data['verify_code'] = md5($data['user_email'].$data['user_pwd'].$data['reg_time']);

然後再向使用者輸入的傳送啟用連結。

接著把使用者輸入的資料,註冊時間,生成的啟用碼,寫入資料庫,注意status要為0

啟用連結的內容主要是剛才生成的啟用碼,和使用者點選啟用連結時的處理函式,

比如我的啟用連結樣例是:

然後把

我在Home模組下的UserController裡寫了一個函式active,主要用來判斷啟用連結中的啟用碼是否和資料庫中的一樣,如果一樣,則啟用賬戶,否則啟用失敗;並且該連結只在24小時內有效,該函式內容如下:

public function active(){
	if (IS_GET){
		$verify_code = I("verify_code");
		$user = D("User");
		$data = $user->where("verify_code='$verify_code'")->find();  //找出資料庫中verify_code和啟用連結中的verify_code相同的那條記錄
		if (!empty($data)){
			$user_id = $data['user_id'];
			if ($data['status'] == 0){
				$current_time = date("Y-m-d H:i:s", strtotime("-1 day"));  //得到24小時前的時間
				if ($data['reg_time'] < $current_time){  //判斷是否在24小時內
					echo  "您的啟用有效期已過,請重新註冊傳送啟用郵件";
					$user->where("user_id='$user_id'")->delete();
					return false;
				}
				else{
					$data['status'] = 1;  //啟用成功
					if ($user->where("user_id='$user_id'")->save($data)){
						return true;
					}
					else{
						echo "啟用失敗,請重新註冊";
						$user->where("user_id='$user_id'")->delete();
						return false;
					}
				}
			}
			else{
				 return true;
			}
		}
		else{
			echo "啟用失敗,請重新註冊";
			return false;
		}
	}
}


常見錯誤:

1. CLASS phpmailer not found:

解決方法:

進入Vendor中,開啟class.phpmailer.php檔案,將類名複製下,然後將class.phpmailer.php檔名中的phpmailer改成剛才複製的。同時在function.php檔案中的vendor中class#後面的類名phpmailer都
改成剛才複製的。

2. PHPMailer錯誤SMTP Error: Could not connect to SMTP host

解決辦法:

開啟Vendor下的class.smtp.php,找到$this->smtp_conn = @fsockopen($host,// the host of the server
然後改成$this->smtp_conn = stream_socket_client("tcp://".$host.":".$port, $errno,  $errstr,  $tval);
開啟class.phpmailer.php,找到函式 IsSMTP(),把$this->Mailer = 'smtp' 改成 $this->Mailer = 'SMTP',
同時把572-579行的case 'smtp'改成case 'SMTP'

3. 出現$mail->send()返回值一直為1(true)的情況

解決方法:

請把class.phpmailer.php中第572-579行中的
case 'smtp'改成case 'SMTP'
出現無法通過驗證時,請把發件人的Username和From都設為你的郵箱(最好用新浪郵箱,qq和163有時會出現這種錯誤)

相關推薦

phpmailer thinkphp3.2傳送郵件

tp3.2 使用phpmailer傳送簡訊郵箱 準備工作 1.thinkphp3.2 2.qq郵箱(開通過POP3/SMTP服務)在qq郵箱內,設定-》賬戶-》POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務 3.phpmailer(沒

ThinkPHP3.2使用PHPMailer傳送郵件

首先下載PHPMailer,直接在百度搜下,然後下載就好了。 接著註冊一個新浪郵箱,用作發件人郵箱。qq和163郵箱都不穩定,有時郵件發不出去。 解壓下載的檔案(如果是壓縮包),得到PHPMailer資料夾,資料夾下有以下檔案: 緊接著把這個資料夾放到ThinkPhp中

javax.mail 傳送郵件(工具類)

前言:注意自己郵箱賬號的授權碼 傳送不成功,要設定授權碼(勿掉坑裡) 1.座標 <dependency> <groupId>javax.mail</groupId> <artifactId&

無後臺網站傳送郵件方法(formspree)

<!doctype html> <html> <head> <meta charset="utf-8"> <title>無後臺網站傳送郵件方法(formspree)開通黃金會員才能使用AJAX提交,否則只能使用form提交</titl

Linux系統使用mailx命令傳送郵件

一、環境核實以及準備。     在centos7系統中預設有安裝mailx命令進行系統郵件的傳送。如果沒有相關的命令可以自行通過yum安裝     #yum install mailx -y    使用#ss  &nbs

telnet通過smtp傳送郵件

////////////////////////////////////CMD指令////////////////////////////////////////////// cmd telnet smtp.163.com 25   or &nb

註冊成功傳送郵件

前提:確認匯入了jar包:mail.jar           *注:網易郵箱給網易郵箱發的較快。 MailUtils.java package com.pb.utils; import java.util.Properties; i

iOS 呼叫系統傳送郵件

第一步 匯入messageUI.framework框架 第二步 匯入標頭檔案 #import <MessageUI/MessageUI.h> 第三步 @property (nonatomic,strong)  MFMailComposeViewCon

QQ 傳送郵件

  之前也釋出過一篇QQ發郵件的,後來那種方法在阿里雲伺服器中報錯了,查了好久才發現,是阿里雲的伺服器把 25 埠 給封殺了。現在重新做了個功能。 public static string UserName = ""; public static string UserPas

織夢會員註冊郵箱驗證傳送郵件配置教程

環境要求 主機465埠是開啟和放行的 php擴充套件openssl是開啟的 php擴充套件sockets是開啟的 1、QQ郵箱 或者 163郵箱 126郵箱 開啟SMTP服務,拿到授權碼,根據自己的來 QQ郵箱開啟SMTP服務 和 獲取授權碼 163郵箱開啟SM

python傳送郵件給多人

親測,163郵箱不能傳送,我用的qq的 import smtplib from email.mime.text import MIMEText sender = '[email protected]' passwd = '****' receiver = ["[email&#

codeigniter 傳送郵件

在 Codeigniter 的類庫參考中封裝好了 Email 類,使用時只需要載入呼叫即可. 我簡單封裝了一個傳送 email 的方法 custom_mail_smtp,程式碼如下 /** * smtp 傳送郵件 */ if (!function_exists("

通過javamailsenderimpl傳送郵件

參考文章:http://blog.csdn.net/qq_33556185/article/details/51028952 import javax.mail.internet.MimeMessage; import org.springframework.beans.factory.anno

阿里雲伺服器用SMTP的25號埠傳送郵件問題

這幾天自己閒著沒事就用阿里雲伺服器部署了一個專案,這個專案中包含了一個傳送郵件到我的郵箱的功能出錯了,這個功能在我的電腦上用本地伺服器沒有問題,但是部署到阿里雲的Centos伺服器上這個功能出了問題,阿里雲伺服器傳送郵件是報出超時的錯誤: 主要原因如下: 我的傳送郵件功能是用傳統

java利用commons-email.jar傳送郵件

這幾天寫了一個簡歷網站,因為簡歷下面有個聯絡我的功能,這個功能可以可以向郵箱傳送郵件,所以自己便開始學習部落格開始解決傳送郵件功能。 引入相關jar包 要用commos-email.jar實現傳送郵箱功能需要先匯入三個jar包: commos-email.jar

golang 使用 gomail 傳送郵件

下面以阿里雲郵箱為例, 如果使用的是qq郵箱的話需要把mailConn裡面的host改成'smpt.qq.com',user 填寫qq郵箱地址, pass需要填寫你在qq郵箱設定裡面獲取到的授權碼,qq郵箱需要先去郵箱設定裡面開通smtp支援,然後獲取授權碼。然後就可以用qq郵箱傳送了。 安裝gomail

【SSH網上商城專案實戰25】使用java email給使用者傳送郵件

      當用戶購買完商品後,我們應該向使用者傳送一封郵件,告訴他訂單已生成之類的資訊,郵箱地址是從使用者的基本資訊中獲取,好了,首先我們來看一下java中傳送郵件的方法。

iOS12系統應用開發傳送郵件

iOS12系統應用開發傳送郵件 訊息分享是應用社交化和營銷的重要途徑。除了開發者自己搭建專有的訊息分享渠道之外,還可以藉助系統自帶的各種途徑。iOS提供了3種快速分享訊息的方式,分別為傳送郵件、傳送簡訊以及資料分享等。本章將講解這三種方式。 傳送郵件 郵件是一種更為靈活的資料分享方式。它可以幫助使用者將

java傳送郵件例項

JavaMail傳送郵件到qq郵箱:前提是QQ郵箱裡帳號設定要開啟POP3/SMTP協議,步驟如下: ​​​​​​​1. 登陸你的QQ即可,找到QQ郵箱圖示。 2.進入郵箱後後點選設定。     3.找到賬戶。 4.往下拉將POP3/SMTP開啟。&nb

使用阿里雲郵箱傳送郵件

程式碼部分 /** * 傳送郵件 (阿里雲郵箱企業版) * * @param fromEmail * 傳送郵箱 * @param toEmail * 接收郵箱 * @pa