PHP發送郵件____PHP

來源:互聯網
上載者:User

       最近閑來無事想寫個php傳送檔案的網頁程式,進過幾次失敗最後成功,遇到了很多坑,網上講的比價簡略,涉及的要點好多都沒有講到,在這裡分享一下自己的經驗,希望對各位讀者有所協助。
       php發送郵件有兩種方式:1.通過php內建函數mail();2.php發送socket寄送電子郵件。我使用的是第一種方式,通過mail函數,網上可以下載包含此函數的email.class.php檔案。我使用的SMTP伺服器是163郵箱的,直接點,上代碼,如果你有代碼卻一直失敗又找不到原因,請認真閱讀後面的分析。
index.html`

<form action="sendmail.php" method="post">    <p>收件者<input type="text" name="toemail" /></p>    <p>標題<input type="text" name="title" /></p>    <p>內容<textarea name="content" cols="50" rows="5"></textarea></p>    <p><input type="submit" value="發送"  /></p></form>

sendmail.php

<?php    require_once "email.class.php";    //******************** 配置資訊 ********************************    $smtpserver = "smtp.163.com";//SMTP伺服器    $smtpserverport =25;//SMTP伺服器連接埠    $smtpusermail = "你的163郵箱";//你註冊的郵箱帳號    $smtpemailto = $_POST['toemail'];//發送給誰    $smtpuser = "你的163郵箱";//同上面的註冊的郵箱帳號    $smtppass = "授權碼(不同於賬戶密碼)";//SMTP伺服器的使用者密碼    $mailtitle = $_POST['title'];//郵件主題    $mailcontent = "<h1>".$_POST['content']."</h1>";//郵件內容    $mailtype = "HTML";//郵件格式(HTML/TXT),TXT為文本郵件    //************************ 配置資訊 ****************************    $smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//這裡面的一個true是表示使用身分識別驗證,否則不使用身分識別驗證.    $smtp->debug = true;//是否顯示發送的調試資訊    $state = $smtp->sendmail($smtpemailto, $smtpusermail, $mailtitle, $mailcontent, $mailtype);    echo "<div style='width:300px; margin:36px auto;'>";    if($state==""){        echo "對不起,郵件發送失敗。請檢查郵箱填寫是否有誤。";        echo "<a href='index.html'>點此返回</a>";        exit();    }    echo "恭喜。郵件發送成功。。";    echo "<a href='index.html'>點此返回</a>";    echo "</div>";?>

       sendmail.php的配置我們可以發現,需要一個已存在的郵箱。顯然,通過這種方式發送郵件的工作流程大概是:php程式類比登陸給出的使用者郵箱向收件者發送郵件。我測試的時候發送失敗,給出的錯誤Remote host returned “550 User has no permission”。我們來分析一下產生錯誤的原因:我們登陸郵箱時都是要使用特定的登陸入口,比如qq登陸郵箱有qq郵箱的網頁、APP,一般情況下在第三方登陸郵箱都是不允許的。使用php程式發送郵件,這裡的php程式就是一個第三方,那麼怎麼解決這個問題呢。
       郵箱都有一個SMPT設定,SMTP(Simple Mail Transfer Protocol)即簡易郵件傳輸通訊協定,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬於TCP/IP協議簇,它協助每台電腦在發送或中轉信件時找到下一個目的地。通過SMTP協議所指定的伺服器,就可以把E-mail寄到收信人的伺服器上了,整個過程只要幾分鐘。SMTP伺服器則是遵循SMTP協議的發送郵件伺服器,用來發送或中轉寄出的電子郵件。
      &nbsp當我們需要在第三方登陸郵箱的時候就要開啟SMTP服務,否則都會拒絕登陸。開啟時提示你設定郵箱的授權碼,這就是我們在配置mail函數參數要用到的密碼。另外可以開啟qq的SMTP服務,這樣就不用下載qq郵箱的APP可以直接使用手機內建的郵件APP來登陸qq郵箱。此時失敗就是因為伺服器拒絕登陸而引起的錯誤,使用mail函數發送郵件,就要確保你提供的郵箱開啟了SMTP服務。如果提示郵件發送成功而沒有收到郵件,可能是被放到垃圾箱了。另一種方式的郵件發送也會繼續研究,歡迎關注共同學習。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.