smtp協議建立在tcp協議之上,所以原則上按照smtp協議的規範,使用socket跟smtp伺服器進行互動。使用fsockopen()函式代替socket_*()類函式。
fsockopen()函式的好處是把socket連線繫結到乙個流上,然後使用各種操作流的函式操作這個socket連線。
使用fsockopen()函式建立的socket連線控制代碼可以提供給諸如fgets()、fputs()、fwrite()、fread()、fclose()等流函式使用。
示例**如下:
<?php
class smtp_mail, error message:\n");
}$response = fgets($this->sock);
if (strstr($response, "220") === false) \n");}}
private function show_debug($message)
\n";}}
private function do_command($cmd, $return_code)
return true;
}private function is_email($email) else
}public function send_mail($from, $to, $subject, $body)
if (empty($subject) or empty($body))
$detail = "from:".$from."\r\n";
$detail .= "to:".$to."\r\n";
$detail .= "subject:".$subject."\r\n";
if ($this->mail_format == 1) else
$detail .= "charset=gb2312\r\n\r\n";
$detail .= $body."\r\n.\r\n";
$this->do_command("helo smtp.qq.com\r\n", 250);
$this->do_command("auth login\r\n", 334);
$this->do_command($this->user."\r\n", 334);
$this->do_command($this->pass."\r\n", 235);
$this->do_command("mail from:<".$from.">\r\n", 250);
$this->do_command("rcpt to:<".$to.">\r\n", 250);
$this->do_command("data\r\n",354);
$this->do_command($detail, 250);
$this->do_command("quit\r\n", 221);
return true;}}
$host = "smtp.163.com";
$port = 25;
$user = "[email protected]";
$pass = "********";
$from = "[email protected]";
$to = "[email protected]";
$subject = "hello body";
$content = "this is example email for you";
$mail = new smtp_mail($host, $port, $user, $pass);
$mail->send_mail($from, $to, $subject, $content);
?>
使用Socket傳送郵件
之前寫過一篇 使用php傳送郵件 方法是利用nette mail元件傳送郵件。以下內容整理自 php核心技術與最佳實踐 php有乙個自帶的mail 函式,但是要想使用smtp協議傳送郵件,需要安裝smtp伺服器。如果不想安裝,可以使用socket傳送郵件。smtp協議建立在tcp協議之上,所以原則上...
使用Socket撰寫郵件傳送程式
首先,我們簡單介紹一下帶驗證的 tp伺服器如何使用auth原語進行身份驗證,其詳細的定義可以參考rfc2554。具體如下 1 首先,需要使用ehlo而不是原先的helo。2 ehlo成功以後,客戶端需要傳送auth原語,與伺服器就認證時使用者名稱和密碼的傳遞方式進行協商。3 如果協商成功,伺服器會返...
用Socket傳送電子郵件 php
用socket傳送電子郵件 hello this is a test 生成mime類例項 mime new mime mail chatme 263.net to,str 新增html附件 mime attach html data,html,base64 注釋掉,採用我的傳送郵件處理 mime s...