PHPMailer是一個用來發送電子郵件的函數包,遠比PHP提供的mail()方便易用。
郵件格式說明
一封普通的電子郵件,通常是由發件人、收件人、抄送人、郵件標題、郵件內容、附件等內容構成。以下是一封郵件的標准格式:
郵件標題(Subject):測試郵件 發件人(From):小紅(xiaohong@xx.xx) 收件人(To):小白(xiaobai@xx.xx) 抄送人(CC):大紅(dahong@xx.xx) 郵件附件(Attachment):附件 郵件正文(Body):這是一封測試郵件,請自動忽略。
除了上述內容之外,還有“秘密抄送(BCC)”一項,這一項所指定的收件人,在收到郵件的時候是能看到其它的所有收件人的,但是其它的收件人是看不到BCC這一項的收件人的,他們也不知道BCC所指定的收件人也收到了郵件,BCC指定的收件人相對於其它人是透明的。
PHPMailer下載
下載地址:
https://github.com/PHPMailer/PHPMailer
我下載的是ZIP壓縮包,因為測試環境是Win7+xampp。
解壓后進入目錄,直接拷貝class.phpmailer.php、class.smtp.php和PHPMailerAutoload.php三個文件到項目根目錄下。class.phpmailer.php是主文件,具體的功能都是在這里面實現的;class.smtp.php是使用smtp需要的文件,如果使用的是pop3,那就拷貝class.pop3.php文件;PHPMailerAutoload.php是一個自動加載的文件,方便快捷。
示例詳解
示例使用163的郵箱來做郵件發送方,同樣使用163的郵箱來接收郵件(多個不同的163郵箱)。
要使用163郵箱的客戶端發送功能,需要在web上登錄郵箱,在“設置”里設置“客戶端授權密碼”,然后啟用服務后才可以在客戶端使用。
<?php require 'PHPMailerAutoload.php';// 加載這1個文件和加載下面2個文件的作用是等同的 //require_once 'class.phpmailer.php'; //require_once 'class.smtp.php'; $mail = new PHPMailer(); $mail->isSMTP();// 使用SMTP服務 $mail->CharSet = "utf8";// 編碼格式為utf8,不設置編碼的話,中文會出現亂碼 $mail->Host = "smtp.163.com";// 發送方的SMTP服務器地址 $mail->SMTPAuth = true;// 是否使用身份驗證 $mail->Username = "xxxx@163.com";// 發送方的163郵箱用戶名 $mail->Password = "******";// 發送方的郵箱密碼,注意用163郵箱這里填寫的是“客戶端授權密碼”而不是郵箱的登錄密碼! $mail->SMTPSecure = "ssl";// 使用ssl協議方式 $mail->Port = 994;// 163郵箱的ssl協議方式端口號是465/994 $mail->setFrom("xxxx@163.com","Mailer");// 設置發件人信息,如郵件格式說明中的發件人,這里會顯示為Mailer(xxxx@163.com),Mailer是當做名字顯示 $mail->addAddress("yyyy@163.com",'Liang');// 設置收件人信息,如郵件格式說明中的收件人,這里會顯示為Liang(yyyy@163.com) $mail->addReplyTo("zzzz@163.com","Reply");// 設置回復人信息,指的是收件人收到郵件后,如果要回復,回復郵件將發送到的郵箱地址 $mail->addCC("aaaa@inspur.com");// 設置郵件抄送人,可以只寫地址,上述的設置也可以只寫地址 $mail->addBCC("bbbb@163.com");// 設置秘密抄送人 $mail->addAttachment("bug0.jpg");// 添加附件 $mail->Subject = "This is a test mailxx";// 郵件標題 $mail->Body = "This is the html body <b>very stronge非常強壯</b>";// 郵件正文 //$mail->AltBody = "This is the plain text純文本";// 這個是設置純文本方式顯示的正文內容,如果不支持Html方式,就會用到這個,基本無用 if(!$mail->send()){// 發送郵件 echo "Message could not be sent."; echo "Mailer Error: ".$mail->ErrorInfo;// 輸出錯誤信息 }else{ echo 'Message has been sent.'; }
在瀏覽器上跑一下該文件,看到’Message has been sent.’的信息就表示郵件發送成功了。只要設置都正確,郵件發送都會成功。如果測試郵件發送失敗,檢查一下網絡、apache服務器、郵箱用戶名和客戶端授權密碼是否都正常。
如果在設置收發郵件地址時,同步設置了收發人的名字,且名字是用中文進行設置的,那在某些客戶端接收到的收發件人的名字會顯示為亂碼。