關於PHP郵件發送


      初學PHP一段時間,發現PHP比J2EE框架簡單很多,同JAVA相比,它是一門極弱的語言,類似於Javascript.PHP不僅在語法上較JAVA來的簡單的多,同時其本身還提供了很多開源的框架,J2EE雖然本身也有經典級(JSF+EJB+JPA)和輕量級(STRUCTS+SPRING+HIBERNATE)兩種類型框架,為開發者提供了很多便利,但其也帶來了很多劣勢,比如經典級框架同輕量級框架同時都存在着配置環境復雜,很多初學的人往往會被環境配置弄得頭暈而放棄了對框架的興趣,還有框架由於是被別人已經寫好了的,所以其靈活性肯定不如自己寫來的靈活。比如Structs提供的上傳表單同Action數據banding,其只適用於表單中只有一個submit的情況,如果有多個submit還是得通過javascript來控制,所以一般有經驗的開發者不經常使用Structs本身的標簽以及action banding。

      今天研究了一下php發送郵件,在W3C中對於PHP的講解中關於email的部分內容較少,其是通過自身的email()函數來實現郵件發送,這種方式雖然只需要通過簡單的語句便可以實現,如下:

$to = "heartchaincxj@163.com";
$subject = "Test";
$message = "This is a test mail!";
ini_set('SMTP','smtp.163.com');
ini_set('smtp_port',25);
ini_set('sendmail_from',"sinllychenfjnp@163.com"
mail($to,$subject,$message);

 當然也可以將

ini_set('SMTP','smtp.163.com');
ini_set('smtp_port',25);
ini_set('sendmail_from',sinllychenfjnp@163.com);

通過配置php.ini.但這樣運行之后會出現如下錯誤:SMTP server response:553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S21301220947.錯誤的原因是說SMTP服務器需要驗證信息,百度了一下發現很多人出現了類似的問題,究其原因是因為mail()函數使用需要一台無需SMTP驗證就可以發信的郵件服務器。這種方式對服務器本身做了一些限制,不太適合開發。

      對於PHP發送郵件實現,普遍使用的是通過第三方的框架PHPMailer來實現。PHPMailer是一個開源的PHP發送郵件的框架,由一個外國人編寫。在PHP郵件發送上非常好用,無需SMTP服務器也無需在PHP.ini文件里面配置信息。PHPMailer可以到http://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list下載。解壓之后,我們將class.phpmailer.php,class.pop3.php,class.smtp.php.放到當前工程路徑下面,這里我通過封裝一個方法來實現發送郵件的功能。代碼如下:

function sendmail($to,$subject = "",$body = ""){
    //$to 表示收件人地址 $subject 表示郵件標題 $body表示郵件正文
    date_default_timezone_set("Asia/Shanghai");//設定時區東八區
    require_once('class.phpmailer.php');
    include("class.smtp.php"); 
    $mail             = new PHPMailer(); //new一個PHPMailer對象出來
    $body             = eregi_replace("[\]",'',$body); //對郵件內容進行必要的過濾
    $mail->CharSet ="UTF-8";//設定郵件編碼,默認ISO-8859-1,如果發中文此項必須設置,否則亂碼
    $mail->IsSMTP(); // 設定使用SMTP服務
    $mail->SMTPDebug  = 1;                     // 啟用SMTP調試功能
                                           // 1 = errors and messages
                                           // 2 = messages only
    $mail->SMTPAuth   = true;                  // 啟用 SMTP 驗證功能
    $mail->SMTPSecure = "ssl";                 // 安全協議
    $mail->Host       = "smtp.163.com";      // SMTP 服務器
    $mail->Port       = 465;                   // SMTP服務器的端口號
    $mail->Username   = "sinllychenfjnp";  // SMTP服務器用戶名
    $mail->Password   = "123456";            // SMTP服務器密碼
    $mail->SetFrom('sinllychenfjnp@163.com', 'sinllychen');
    $mail->AddReplyTo("郵件回復地址,如admin#jiucool.com #換成@","郵件回復人的名稱");
    $mail->Subject    = $subject;
    $mail->AltBody    = "To view the message, please use an HTML compatible email viewer! - From www.jiucool.com"; // optional, comment out and test
    $mail->MsgHTML($body);
    $address = $to;
    $mail->AddAddress($address, "收件人名稱");
    //$mail->AddAttachment("images/phpmailer.gif");      // attachment 
    //$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
    if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message sent!恭喜,郵件發送成功!";
        }
    }

在正文中我只需要通過

sendmail($to,$subject,$content);

便可以成功發送郵件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM