兩種PHP郵件發送的方式
有不少程式設計師在用PHP發送郵件的時候會遇到幾個問題,那麼遇到問題就要有解決問題的思路,本文就是根據php實現郵件發送的思路,整理下來的一篇文章,在遇到不同問題時給予的不同解決方法,有興趣的夥伴可以參考一下。
一、使用PHP內建的mail()函數
<?php $to = "test@163.com"; //收件人 $subject = "Test"; //主题 $message = "This is a test mail!"; //正文 mail($to,$subject,$message);
結果就直接報錯,如下:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() inD:/www/Zend/email/email.php on line 10
分析原因:本機需要有SMTP伺服器,又改了下程式碼:
<?php $to = "test@163.com";//收件人 $subject = "Test";//邮件主题 $message = "This is a test mail!";//邮件正文 ini_set('SMTP','smtp.163.com');//发件SMTP服务器 ini_set('smtp_port',25);//发件SMTP服务器端口 ini_set('sendmail_from',"admin@163.com");//发件人邮箱 mail($to,$subject,$message);
結果還是錯誤:
Warning: mail() [function.mail]: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S2 1301220947 inD:/www/Zend/email/email.php on line 9
分析原因:需要驗證訊息,怎麼寫驗證訊息呢?在哪裡配置呢?帶著這些問題參考一些技術文章後得出結論,使用mail()函數發送郵件就必須要有一台無需SMTP驗證就可以發信的郵件伺服器。但現在的SMTP郵件伺服器基本上都是需要驗證的,所以要使用它寄郵件就只能自己在本地搭一個不需要驗證的SMTP伺服器。搭建方法:用windows自備的IIS就可以,或是從網路下載其他的SMTP伺服器軟體。
結論:使用mail()函數傳送郵件,就必須要有一台不需要驗證的SMTP伺服器。這樣的話配置工作會多一點,但是使用的時候就比較省事了,幾行程式碼就可以。
二、使用封裝SMTP協定的郵件類別
這種方法就比較常見了,尤其對於廣大自己沒有伺服器,從網路上購買虛擬主機的同學,第一種方法不現實,所以還是自己使用SMTP協定來傳送郵件吧。
不過要完成這項工作的話,就需要你對SMTP協議有一定的了解,喜歡事必躬親的同學可以自己動手寫一個,喜歡拿來主義的同學就可以從網上下載了,有很多。
不過我比較建議使用PEAR擴充功能中的Mail類,功能強大:可以支援純文字、HTML格式的郵件;各欄位都可設定編碼,正確設定不會出現中文亂碼狀況;可以支援附件等等。
在伺服器可以使用pear install Mail 指令快速安裝,沒有足夠伺服器權限的同學也可以直接下載類別的PHP原始碼包含進來就可以了。
附註:Mail類別依賴 Net/SMTP.php 和 Mail/mime.php ,要一塊下載,使用時一塊包含進來。
下面我舉例說明一下在Mail類別中傳送郵件的方法吧,網路上其他SMTP郵件類別使用方法一塊也類似,可以參考:
<?php // Pear Mail 扩展 require_once('Mail.php'); require_once('Mail/mime.php'); require_once('Net/SMTP.php'); $smtpinfo = array(); $smtpinfo["host"] = "smtp.163.com";//SMTP服务器 $smtpinfo["port"] = "25"; //SMTP服务器端口 $smtpinfo["username"] = "username@163.com"; //发件人邮箱 $smtpinfo["password"] = "password";//发件人邮箱密码 $smtpinfo["timeout"] = 10;//网络超时时间,秒 $smtpinfo["auth"] = true;//登录验证 //$smtpinfo["debug"] = true;//调试模式 // 收件人列表 $mailAddr = array('receiver@163.com'); // 发件人显示信息 $from = "Name <username@163.com>"; // 收件人显示信息 $to = implode(',',$mailAddr); // 邮件标题 $subject = "这是一封测试邮件"; // 邮件正文 $content = "<h3>随便写点什么</h3>"; // 邮件正文类型,格式和编码 $contentType = "text/html; charset=utf-8"; //换行符号 Linux: \n Windows: \r\n $crlf = "\n"; $mime = new Mail_mime($crlf); $mime->setHTMLBody($content); $param['text_charset'] = 'utf-8'; $param['html_charset'] = 'utf-8'; $param['head_charset'] = 'utf-8'; $body = $mime->get($param); $headers = array(); $headers["From"] = $from; $headers["To"] = $to; $headers["Subject"] = $subject; $headers["Content-Type"] = $contentType; $headers = $mime->headers($headers); $smtp =& Mail::factory("smtp", $smtpinfo); $mail = $smtp->send($mailAddr, $headers, $body); $smtp->disconnect(); if (PEAR::isError($mail)) { //发送失败 echo 'Email sending failed: ' . $mail->getMessage()."\n"; } else{ //发送成功 echo "success!\n"; }
如果從網路找的SMTP類別都是高度封裝的,所以使用起來比上面會更簡單,但使用方法都是比較相似的。
結論:這種方式發送郵件無需裝任何軟體,只需要包含進來一個PHP類,然後多寫幾行配置代碼,就可以了。而且網路上有很多範例的程式碼,很多時候只要複製過來然後修改個別的幾個參數就可以用了,所以會很方便,推薦使用此方法。
不管遇到哪種問題,方法千種萬種,最重要的是要有解決問題的思路,希望這篇文章能為大家帶來啟發。
相關推薦:
#以上是兩種PHP郵件發送的方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。
