首頁 >後端開發 >php教程 >linux下php設定smtp發送郵件的方法

linux下php設定smtp發送郵件的方法

WBOY
WBOY原創
2016-07-25 08:54:431626瀏覽
複製程式碼
  1. include_once("class.phpmailer.php");

  2. /**
  3. * 定義郵件模組配製資訊
  4. */
  5. define("SMTP_HOST","smtp.mail.yahoo.com"); // SMTP 主機
  6. define("SMTP_MAIL"," XXXX@yahoo.cn"); // SMTP 使用者email
  7. define ("SMTP_PASS"," XXXX"); // SMTP 用的密碼
  8. define("SERVICE_MAIL"," XXXX@yahoo.cn"); // SMTP 使用者email

  9. define ("SERVICE_NAME","PHPBOOK郵件測試"); // SMTP 用的名字
  10. /**

  11. * 使用phpmailer發送郵件模組
  12. *
  13. * @param string $email
  14. * @param string $user
  15. * @param string $subject
  16. * @param string $body
  17. * @return bool
  18. */
  19. function sendMail($email,$user,$subject ,$body)
  20. {
  21. $mail = new PHPMailer();
  22. //$this;
  23. $mail->IsSMTP(); // 設定使用SMTP
  24. $mail-> Host = SMTP_HOST; // 設定SMTP伺服器位址
  25. $mail->SMTPAuth = true; // 設定SMTP權限驗證
  26. $mail->Username = SMTP_MAIL; // SMTP 使用者名稱
  27. $mail-> Password = SMTP_PASS; // SMTP 伺服器密碼
  28. $mail->From = SERVICE_MAIL; // 設定發送者位址

  29. $mail->FromName = SERVICE_NAME; // 設定發送者名稱
  30. $mail->AddAddress($email, $user); // 新增接收者位址
  31. $mail->AddReplyTo(SERVICE_MAIL, SERVICE_NAME); // 設定回覆位址
  32. $mail->WordWrap = 50; // 設定顯示格式

  33. $mail->IsHTML(true); // 設定郵件支援html
  34. $mail->Subject = $subject;
  35. $mail- >Body = $body;
  36. $mail->AltBody = ""; // 文字類型的郵件
  37. if(!$mail->Send())

  38. {
  39. return $mail->ErrorInfo;
  40. }
  41. return true;
  42. }
  43. //開始傳送測試郵件ng: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/xiehui/admin/mail/class.smtp.php on line 89

  44. $tomail = " XXXX@126.com";
  45. user = = =d " XXXXlinux";
  46. $_mailSubject = "郵件測試範例!"; // 發給使用者的郵件標題小組
  47. $_mailBody = "新浪網" ; // 郵件內容小組
  48. sendMail($tomail,$user,$_mailSubject,$_mailBody);
  49. ?>
複製代碼
複製代碼複製代碼複製代碼複製代碼複製代碼複製代碼複製代碼複製代碼

實驗證明yahoo的smtp很好用,號稱sina的其實並不好用,我卡在著好長時間。

方法四,給予socket所寫的程序 使用socket發送郵件的封裝類別:

  1. class sendmail{
  2. var $lastmessage; //記錄最後回傳的回應訊息
  3. var $lastact; //最後的動作,字串形式
  4. var $welcome; //用在HELO後面,歡迎使用者
  5. var $debug; //是否顯示偵錯資訊
  6. var $smtp; //smtp伺服器
  7. var $ port; //smtp連接埠號碼
  8. var $fp; //socket句柄
  9. //傳送郵件函數
  10. function send_mail($smtp, $welcome="", $debug=false) {
  11. if(empty($smtp)) die("SMTP不能為空!");
  12. $this->smtp=$smtp;
  13. if(empty($welcome)) {
  14. $this->welcome=gethostbyaddr("localhost");
  15. }else
  16. $this->welcome=$welcome;
  17. $this->debug=$debug;
  18. $this->lastmessage="";
  19. $this->lastact=" ";
  20. $ this->port="25";
  21. }
  22. // 顯示偵錯訊息
  23. function show_debug($message, $inout) {
  24. if ($this-> ;debug) {
  25. if($inout=="in"){ //回應訊息
  26. $m=' }else
  27. $m='>> ';
  28. if(!ereg ( "n$", $message))
  29. $message .= "
    ";
  30. $message=nl2br($message);
  31. echo "${m } ${message}";
  32. }
  33. }
  34. // 執行提交的命令
  35. function do_command($command, $code) {
  36. $this->lastact= $ command;
  37. $this->show_debug($this->lastact, "out");
  38. fputs ( $this->fp , $this->lastact );
  39. $this->lastmessage = fgets ( $this->fp, 512 );
  40. $this->show_debug($this->lastmessage, "in ");
  41. if(!ereg("^$code", $this->lastmessage ) )
  42. return false;
  43. else
  44. return true;
  45. }
  46. //郵件發送處理
  47. function send( $to,$from,$subject,$message) {
  48. // 連線伺服器
  49. $this->lastact="connect";
  50. $this-> ;show_debug("連線到SMTP 伺服器: ".$this->smtp, "out");
  51. $this->fp = fsockopen ( $this->smtp, $this->port );
  52. if ( $this->fp ) {
  53. $this->set_socket_blocking( $this->fp, true );
  54. $this->lastmessage=fgets($this->; fp,512) ;
  55. $this->show_debug($this->lastmessage, "in");
  56. if (!ereg ( "^220", $this->lastmessage ) ) {
  57. return false;
  58. }else{
  59. $this->lastact="HELO " . "n";
  60. if(!$this->do_command($this->lastact, "250")){
  61. fclose($this->fp);
  62. return false;
  63. }
  64. $this->lastact="郵件寄件者:$from" 。 "n";
  65. if(!$this->do_command($this->lastact, "250")){
  66. fclose($this->fp);
  67. return false;
  68. }
  69. $this->lastact="RCPT TO: $to" 。 "n";
  70. if(!$this->do_command($this->lastact, "250")){
  71. fclose($this->fp);
  72. return false;
  73. }
  74. //開始傳送郵件正文
  75. $this->lastact="DATAn";
  76. if(!$this->do_command($this->lastact, "354") ){
  77. fclose ($this->fp);
  78. return false;
  79. }
  80. //開始處理郵件主題頭
  81. $head="Subject: $subjectn";
  82. if(!empty($ subject) && !ereg($head, $message)){
  83. $message = $head.$message;
  84. }
  85. //開始處理郵件Fromhead
  86. $head="From: $fromn ";
  87. if(!empty($from) && !ereg($head, $message)) {
  88. $message = $head.$message;
  89. }
  90. //開始處理郵件Tohead
  91. $head="To: $ton";
  92. if(!empty($to) && !ereg($head, $message)) {
  93. $message = $head.$message;
  94. }
  95. //處理結束字串
  96. if(!ereg("n.n", $message))
  97. $message .= "n.n";
  98. $ this->show_debug($message, " out");
  99. fputs($this->fp, $message);
  100. $this->lastact="QUITn";
  101. if(! $this->do_command($this->lastact, "250")){
  102. fclose($this->fp);
  103. 回傳false;
  104. }
  105. }
  106. 回傳true;
  107. }else{
  108. $this- >show_debug("連接失敗!", "in");
  109. return false;
  110. }
  111. }
  112. }
  113. ?>
複製代碼

使用socket發送郵件範例:

  1. include ("./sendmail.class.php");
  2. $mail = new sendmail();
  3. $email = "您好,這是一個測試郵件!";
  4. $sendmail = new send_mail("smtp.mail.126.com","PHPBOOK",true); //顯示調示訊息
  5. if($mail->send("XXXX@126.com", "XXXX@126.com", "測試SOCKET郵件", $email)) {
  6. echo "發送成功!
    ";
  7. }else{
  8. echo "發送失敗!
    ";
  9. }
  10. ?>
複製程式碼


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn