php發送body請求,請求類型body

本文目錄一覽:

怎麼php發送get請求給Java,然後返回想要的具體參數

curl請求java介面,介面返回值後進行相關操作,給你貼一個curl的代碼

function ihttp_request($url, $post = ”, $extra = array(), $timeout = 60) {

$urlset = parse_url($url);

if (empty($urlset[‘path’])) {

$urlset[‘path’] = ‘/’;

}

if (!empty($urlset[‘query’])) {

$urlset[‘query’] = “?{$urlset[‘query’]}”;

}

if (empty($urlset[‘port’])) {

$urlset[‘port’] = $urlset[‘scheme’] == ‘https’ ? ‘443’ : ’80’;

}

if (strexists($url, ‘https://’)  !extension_loaded(‘openssl’)) {

if (!extension_loaded(“openssl”)) {

message(‘請開啟您PHP環境的openssl’);

}

}

if (function_exists(‘curl_init’)  function_exists(‘curl_exec’)) {

$ch = curl_init();

if (ver_compare(phpversion(), ‘5.6’) = 0) {

curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);

}

if (!empty($extra[‘ip’])) {

$extra[‘Host’] = $urlset[‘host’];

$urlset[‘host’] = $extra[‘ip’];

unset($extra[‘ip’]);

}

curl_setopt($ch, CURLOPT_URL, $urlset[‘scheme’] . ‘://’ . $urlset[‘host’] . ($urlset[‘port’] == ’80’ ? ” : ‘:’ . $urlset[‘port’]) . $urlset[‘path’] . $urlset[‘query’]);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ch, CURLOPT_HEADER, 1);

@curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);

if ($post) {

if (is_array($post)) {

$filepost = false;

foreach ($post as $name = $value) {

if ((is_string($value)  substr($value, 0, 1) == ‘@’) || (class_exists(‘CURLFile’)  $value instanceof CURLFile)) {

$filepost = true;

break;

}

}

if (!$filepost) {

$post = http_build_query($post);

}

}

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

}

if (!empty($GLOBALS[‘_W’][‘config’][‘setting’][‘proxy’])) {

$urls = parse_url($GLOBALS[‘_W’][‘config’][‘setting’][‘proxy’][‘host’]);

if (!empty($urls[‘host’])) {

curl_setopt($ch, CURLOPT_PROXY, “{$urls[‘host’]}:{$urls[‘port’]}”);

$proxytype = ‘CURLPROXY_’ . strtoupper($urls[‘scheme’]);

if (!empty($urls[‘scheme’])  defined($proxytype)) {

curl_setopt($ch, CURLOPT_PROXYTYPE, constant($proxytype));

} else {

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);

curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);

}

if (!empty($GLOBALS[‘_W’][‘config’][‘setting’][‘proxy’][‘auth’])) {

curl_setopt($ch, CURLOPT_PROXYUSERPWD, $GLOBALS[‘_W’][‘config’][‘setting’][‘proxy’][‘auth’]);

}

}

}

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

curl_setopt($ch, CURLOPT_SSLVERSION, 1);

if (defined(‘CURL_SSLVERSION_TLSv1’)) {

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

}

curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1’);

if (!empty($extra)  is_array($extra)) {

$headers = array();

foreach ($extra as $opt = $value) {

if (strexists($opt, ‘CURLOPT_’)) {

curl_setopt($ch, constant($opt), $value);

} elseif (is_numeric($opt)) {

curl_setopt($ch, $opt, $value);

} else {

$headers[] = “{$opt}: {$value}”;

}

}

if (!empty($headers)) {

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

}

}

$data = curl_exec($ch);

$status = curl_getinfo($ch);

$errno = curl_errno($ch);

$error = curl_error($ch);

curl_close($ch);

if ($errno || empty($data)) {

return error(1, $error);

} else {

return ihttp_response_parse($data);

}

}

$method = empty($post) ? ‘GET’ : ‘POST’;

$fdata = “{$method} {$urlset[‘path’]}{$urlset[‘query’]} HTTP/1.1\r\n”;

$fdata .= “Host: {$urlset[‘host’]}\r\n”;

if (function_exists(‘gzdecode’)) {

$fdata .= “Accept-Encoding: gzip, deflate\r\n”;

}

$fdata .= “Connection: close\r\n”;

if (!empty($extra)  is_array($extra)) {

foreach ($extra as $opt = $value) {

if (!strexists($opt, ‘CURLOPT_’)) {

$fdata .= “{$opt}: {$value}\r\n”;

}

}

}

$body = ”;

if ($post) {

if (is_array($post)) {

$body = http_build_query($post);

} else {

$body = urlencode($post);

}

$fdata .= ‘Content-Length: ‘ . strlen($body) . “\r\n\r\n{$body}”;

} else {

$fdata .= “\r\n”;

}

if ($urlset[‘scheme’] == ‘https’) {

$fp = fsockopen(‘ssl://’ . $urlset[‘host’], $urlset[‘port’], $errno, $error);

} else {

$fp = fsockopen($urlset[‘host’], $urlset[‘port’], $errno, $error);

}

stream_set_blocking($fp, true);

stream_set_timeout($fp, $timeout);

if (!$fp) {

return error(1, $error);

} else {

fwrite($fp, $fdata);

$content = ”;

while (!feof($fp))

$content .= fgets($fp, 512);

fclose($fp);

return ihttp_response_parse($content, true);

}

}

php對put請求的body是如何處理的

可以使用file_get_contents(“php://input”)接收原始數據,然後自己原始數據

php模擬post請求,獲取不到數據

這個問題我沒見過,很感興趣

類似的問題我見過一些。您是不是還上傳了什麼東西,然後請你把上傳上限復原,如果就是兩個字元串的話不用那麼大。如果提示你大小出現問題就是別的問題了

修改配置的話,記得重啟Apache

然後我的解決方法就是,把代碼刪除,重打一遍

只是傳兩個字元串我不信不好使

還有一個很噁心的問題,緩存

如果再不行就去重新建一個文件測試下。

php curl 401時怎麼獲取body

PHP curl可以從伺服器端模擬一個http請求,例如抓取網頁、模擬登陸等。根據選項設置,可以在curl_exec的返回結果中獲取到響應頭和body,但這沒有響應的狀態嗎。想要獲取狀態碼,需要在執行curl_exec後再通過curl_getinfo來獲取。例如:

[php] view plain copy 在CODE上查看代碼片派生到我的代碼片

$ch = curl_init ();

curl_setopt($ch, CURLOPT_URL, ”);

curl_setopt($ch, CURLOPT_TIMEOUT, 200);

curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_NOBODY, FALSE);

#curl_setopt( $ch, CURLOPT_POSTFIELDS, “username=”.$username.”password=”.$password );

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ‘GET’);

curl_exec($ch);

$httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);

另外curl_getinfo還可以獲取很多其他信息,具體請參考: 。

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片

下列選項的值將被作為長整形使用(在option參數中指定):

CURLOPT_INFILESIZE: 當你上傳一個文件到遠程站點,這個選項告訴PHP你上傳文件的大小。

CURLOPT_VERBOSE: 如果你想CURL報告每一件意外的事情,設置這個選項為一個非零值。

CURLOPT_HEADER: 如果你想把一個頭包含在輸出中,設置這個選項為一個非零值。

CURLOPT_NOPROGRESS: 如果你不會PHP為CURL傳輸顯示一個進程條,設置這個選項為一個非零值。注意:PHP自動設置這個選項為非零值,你應該僅僅為了調試的目的來改變這個選項。

CURLOPT_NOBODY: 如果你不想在輸出中包含body部分,設置這個選項為一個非零值。

CURLOPT_FAILONERROR: 如果你想讓PHP在發生錯誤(HTTP代碼返回大於等於300)時,不顯示,設置這個選項為一人非零值。默認行為是返回一個正常頁,忽略代碼。

CURLOPT_UPLOAD: 如果你想讓PHP為上傳做準備,設置這個選項為一個非零值。

CURLOPT_POST: 如果你想PHP去做一個正規的HTTP POST,設置這個選項為一個非零值。這個POST是普通的 application/x-www-from-urlencoded 類型,多數被HTML表單使用。

CURLOPT_FTPLISTONLY: 設置這個選項為非零值,PHP將列出FTP的目錄名列表。

CURLOPT_FTPAPPEND: 設置這個選項為一個非零值,PHP將應用遠程文件代替覆蓋它。

CURLOPT_NETRC: 設置這個選項為一個非零值,PHP將在你的 ~./netrc 文件中查找你要建立連接的遠程站點的用戶名及密碼。

CURLOPT_FOLLOWLOCATION: 設置這個選項為一個非零值(象 「Location: 「)的頭,伺服器會把它當做HTTP頭的一部分發送(注意這是遞歸的,PHP將發送形如 「Location: 「的頭)。

CURLOPT_PUT: 設置這個選項為一個非零值去用HTTP上傳一個文件。要上傳這個文件必須設置CURLOPT_INFILE和CURLOPT_INFILESIZE選項.

CURLOPT_MUTE: 設置這個選項為一個非零值,PHP對於CURL函數將完全沉默。

CURLOPT_TIMEOUT: 設置一個長整形數,作為最大延續多少秒。

CURLOPT_LOW_SPEED_LIMIT: 設置一個長整形數,控制傳送多少位元組。

CURLOPT_LOW_SPEED_TIME: 設置一個長整形數,控制多少秒傳送CURLOPT_LOW_SPEED_LIMIT規定的位元組數。

CURLOPT_RESUME_FROM: 傳遞一個包含位元組偏移地址的長整形參數,(你想轉移到的開始表單)。

CURLOPT_SSLVERSION: 傳遞一個包含SSL版本的長參數。默認PHP將被它自己努力的確定,在更多的安全中你必須手工設置。

CURLOPT_TIMECONDITION: 傳遞一個長參數,指定怎麼處理CURLOPT_TIMEVALUE參數。你可以設置這個參數為TIMECOND_IFMODSINCE 或 TIMECOND_ISUNMODSINCE。這僅用於HTTP。

CURLOPT_TIMEVALUE: 傳遞一個從1970-1-1開始到現在的秒數。這個時間將被CURLOPT_TIMEVALUE選項作為指定值使用,或被默認TIMECOND_IFMODSINCE使用。

下列選項的值將被作為字元串:

CURLOPT_URL: 這是你想用PHP取回的URL地址。你也可以在用curl_init()函數初始化時設置這個選項。

CURLOPT_USERPWD: 傳遞一個形如[username]:[password]風格的字元串,作用PHP去連接。

CURLOPT_PROXYUSERPWD: 傳遞一個形如[username]:[password] 格式的字元串去連接HTTP代理。

CURLOPT_RANGE: 傳遞一個你想指定的範圍。它應該是」X-Y」格式,X或Y是被除外的。HTTP傳送同樣支持幾個間隔,用逗句來分隔(X-Y,N-M)。

CURLOPT_POSTFIELDS: 傳遞一個作為HTTP 「POST」操作的所有數據的字元串。

CURLOPT_REFERER: 在HTTP請求中包含一個」referer」頭的字元串。

CURLOPT_USERAGENT: 在HTTP請求中包含一個」user-agent」頭的字元串。

CURLOPT_FTPPORT: 傳遞一個包含被ftp 「POST」指令使用的IP地址。這個POST指令告訴遠程伺服器去連接我們指定的IP地址。這個字元串可以是一個IP地址,一個主機名,一個網路界面名(在UNIX下),或是『-』(使用系統默認IP地址)。

CURLOPT_COOKIE: 傳遞一個包含HTTP cookie的頭連接。

CURLOPT_SSLCERT: 傳遞一個包含PEM格式證書的字元串。

CURLOPT_SSLCERTPASSWD: 傳遞一個包含使用CURLOPT_SSLCERT證書必需的密碼。

CURLOPT_COOKIEFILE: 傳遞一個包含cookie數據的文件的名字的字元串。這個cookie文件可以是Netscape格式,或是堆存在文件中的HTTP風格的頭。

CURLOPT_CUSTOMREQUEST: 當進行HTTP請求時,傳遞一個字元被GET或HEAD使用。為進行DELETE或其它操作是有益的,更Pass a string to be used instead of GET or HEAD when doing an HTTP request. This is useful for doing or another, more obscure, HTTP request. 注意: 在確認你的伺服器支持命令先不要去這樣做。下列的選項要求一個文件描述(通過使用fopen()函數獲得):

CURLOPT_FILE: 這個文件將是你放置傳送的輸出文件,默認是STDOUT.

CURLOPT_INFILE: 這個文件是你傳送過來的輸入文件。

CURLOPT_WRITEHEADER: 這個文件寫有你輸出的頭部分。

CURLOPT_STDERR: 這個文件寫有錯誤而不是stderr。用來獲取需要登錄的頁面的例子,當前做法是每次或許都登錄一次,有需要的人再做改進了. PHP curl可以從伺服器端模擬一個http請求,例如抓取網頁、模擬登陸等。根據選項設置,可以在curl_exec的返回結果中獲取到響應頭和body,但這沒有響應的狀態嗎。想要獲取狀態碼,需要在執行curl_exec後再通過curl_getinfo來獲取。例如:

[php] view plain copy 在CODE上查看代碼片派生到我的代碼片

$ch = curl_init ();

curl_setopt($ch, CURLOPT_URL, ”);

curl_setopt($ch, CURLOPT_TIMEOUT, 200);

curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_NOBODY, FALSE);

#curl_setopt( $ch, CURLOPT_POSTFIELDS, “username=”.$username.”password=”.$password );

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, ‘GET’);

curl_exec($ch);

$httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE);

另外curl_getinfo還可以獲取很多其他信息,具體請參考: 。

[html] view plain copy 在CODE上查看代碼片派生到我的代碼片

下列選項的值將被作為長整形使用(在option參數中指定):

CURLOPT_INFILESIZE: 當你上傳一個文件到遠程站點,這個選項告訴PHP你上傳文件的大小。

CURLOPT_VERBOSE: 如果你想CURL報告每一件意外的事情,設置這個選項為一個非零值。

CURLOPT_HEADER: 如果你想把一個頭包含在輸出中,設置這個選項為一個非零值。

CURLOPT_NOPROGRESS: 如果你不會PHP為CURL傳輸顯示一個進程條,設置這個選項為一個非零值。注意:PHP自動設置這個選項為非零值,你應該僅僅為了調試的目的來改變這個選項。

CURLOPT_NOBODY: 如果你不想在輸出中包含body部分,設置這個選項為一個非零值。

CURLOPT_FAILONERROR: 如果你想讓PHP在發生錯誤(HTTP代碼返回大於等於300)時,不顯示,設置這個選項為一人非零值。默認行為是返回一個正常頁,忽略代碼。

CURLOPT_UPLOAD: 如果你想讓PHP為上傳做準備,設置這個選項為一個非零值。

CURLOPT_POST: 如果你想PHP去做一個正規的HTTP POST,設置這個選項為一個非零值。這個POST是普通的 application/x-www-from-urlencoded 類型,多數被HTML表單使用。

CURLOPT_FTPLISTONLY: 設置這個選項為非零值,PHP將列出FTP的目錄名列表。

CURLOPT_FTPAPPEND: 設置這個選項為一個非零值,PHP將應用遠程文件代替覆蓋它。

CURLOPT_NETRC: 設置這個選項為一個非零值,PHP將在你的 ~./netrc 文件中查找你要建立連接的遠程站點的用戶名及密碼。

CURLOPT_FOLLOWLOCATION: 設置這個選項為一個非零值(象 「Location: 「)的頭,伺服器會把它當做HTTP頭的一部分發送(注意這是遞歸的,PHP將發送形如 「Location: 「的頭)。

CURLOPT_PUT: 設置這個選項為一個非零值去用HTTP上傳一個文件。要上傳這個文件必須設置CURLOPT_INFILE和CURLOPT_INFILESIZE選項.

CURLOPT_MUTE: 設置這個選項為一個非零值,PHP對於CURL函數將完全沉默。

CURLOPT_TIMEOUT: 設置一個長整形數,作為最大延續多少秒。

CURLOPT_LOW_SPEED_LIMIT: 設置一個長整形數,控制傳送多少位元組。

CURLOPT_LOW_SPEED_TIME: 設置一個長整形數,控制多少秒傳送CURLOPT_LOW_SPEED_LIMIT規定的位元組數。

CURLOPT_RESUME_FROM: 傳遞一個包含位元組偏移地址的長整形參數,(你想轉移到的開始表單)。

CURLOPT_SSLVERSION: 傳遞一個包含SSL版本的長參數。默認PHP將被它自己努力的確定,在更多的安全中你必須手工設置。

CURLOPT_TIMECONDITION: 傳遞一個長參數,指定怎麼處理CURLOPT_TIMEVALUE參數。你可以設置這個參數為TIMECOND_IFMODSINCE 或 TIMECOND_ISUNMODSINCE。這僅用於HTTP。

CURLOPT_TIMEVALUE: 傳遞一個從1970-1-1開始到現在的秒數。這個時間將被CURLOPT_TIMEVALUE選項作為指定值使用,或被默認TIMECOND_IFMODSINCE使用。

下列選項的值將被作為字元串:

CURLOPT_URL: 這是你想用PHP取回的URL地址。你也可以在用curl_init()函數初始化時設置這個選項。

CURLOPT_USERPWD: 傳遞一個形如[username]:[password]風格的字元串,作用PHP去連接。

CURLOPT_PROXYUSERPWD: 傳遞一個形如[username]:[password] 格式的字元串去連接HTTP代理。

CURLOPT_RANGE: 傳遞一個你想指定的範圍。它應該是」X-Y」格式,X或Y是被除外的。HTTP傳送同樣支持幾個間隔,用逗句來分隔(X-Y,N-M)。

CURLOPT_POSTFIELDS: 傳遞一個作為HTTP 「POST」操作的所有數據的字元串。

CURLOPT_REFERER: 在HTTP請求中包含一個」referer」頭的字元串。

CURLOPT_USERAGENT: 在HTTP請求中包含一個」user-agent」頭的字元串。

CURLOPT_FTPPORT: 傳遞一個包含被ftp 「POST」指令使用的IP地址。這個POST指令告訴遠程伺服器去連接我們指定的IP地址。這個字元串可以是一個IP地址,一個主機名,一個網路界面名(在UNIX下),或是『-』(使用系統默認IP地址)。

CURLOPT_COOKIE: 傳遞一個包含HTTP cookie的頭連接。

CURLOPT_SSLCERT: 傳遞一個包含PEM格式證書的字元串。

CURLOPT_SSLCERTPASSWD: 傳遞一個包含使用CURLOPT_SSLCERT證書必需的密碼。

CURLOPT_COOKIEFILE: 傳遞一個包含cookie數據的文件的名字的字元串。這個cookie文件可以是Netscape格式,或是堆存在文件中的HTTP風格的頭。

CURLOPT_CUSTOMREQUEST: 當進行HTTP請求時,傳遞一個字元被GET或HEAD使用。為進行DELETE或其它操作是有益的,更Pass a string to be used instead of GET or HEAD when doing an HTTP request. This is useful for doing or another, more obscure, HTTP request. 注意: 在確認你的伺服器支持命令先不要去這樣做。下列的選項要求一個文件描述(通過使用fopen()函數獲得):

CURLOPT_FILE: 這個文件將是你放置傳送的輸出文件,默認是STDOUT.

CURLOPT_INFILE: 這個文件是你傳送過來的輸入文件。

CURLOPT_WRITEHEADER: 這個文件寫有你輸出的頭部分。

CURLOPT_STDERR: 這個文件寫有錯誤而不是stderr。用來獲取需要登錄的頁面的例子,當前做法是每次或許都登錄一次,有需要的人再做改進了.

我想用php發郵件,我想發html格式的,body應該怎麼寫呢,要發的文件是D:\local\website\proj\test\123.htm

你看看這個行么??

?php

/**

*一個很簡單的提交留言到指定郵箱的類。

*/

//發送郵件的類

class Smtp

{

/* Public Variables */

var $smtp_port;

var $time_out;

var $host_name;

var $log_file;

var $relay_host;

var $debug;

var $auth;

var $user;

var $pass;

/* Private Variables */

var $sock;

/* Constractor */

function Smtp($relay_host = “”, $smtp_port = 25,$auth = false,$user,$pass)

{

$this-debug = FALSE;

$this-smtp_port = $smtp_port;

$this-relay_host = $relay_host;

$this-time_out = 30; //is used in fsockopen()

#

$this-auth = $auth;//auth

$this-user = $user;

$this-pass = $pass;

#

$this-host_name = “localhost”; //is used in HELO command

$this-log_file = “”;

$this-sock = FALSE;

}

/* Main Function */

function sendmail($to, $from, $subject = “”, $body = “”, $mailtype, $cc = “”, $bcc = “”, $additional_headers = “”)

{

$mail_from = $this-get_address($this-strip_comment($from));

$body = ereg_replace(“(^|(\r\n))(\.)”, “\1.\3”, $body);

$header = “MIME-Version:1.0\r\n”;

if($mailtype==”HTML”){

$header .= “Content-Type:text/html\r\n”;

}

$header .= “To: “.$to.”\r\n”;

if ($cc != “”) {

$header .= “Cc: “.$cc.”\r\n”;

}

$header .= “From: $from”.$from.”\r\n”;

$header .= “Subject: “.$subject.”\r\n”;

$header .= $additional_headers;

$header .= “Date: “.date(“r”).”\r\n”;

$header .= “X-Mailer:By Redhat (PHP/”.phpversion().”)\r\n”;

list($msec, $sec) = explode(” “, microtime());

$header .= “Message-ID: “.date(“YmdHis”, $sec).”.”.($msec*1000000).”.”.$mail_from.”\r\n”;

$TO = explode(“,”, $this-strip_comment($to));

if ($cc != “”) {

$TO = array_merge($TO, explode(“,”, $this-strip_comment($cc)));

}

if ($bcc != “”) {

$TO = array_merge($TO, explode(“,”, $this-strip_comment($bcc)));

}

$sent = TRUE;

foreach ($TO as $rcpt_to) {

$rcpt_to = $this-get_address($rcpt_to);

if (!$this-smtp_sockopen($rcpt_to)) {

$this-log_write(“Error: Cannot send email to “.$rcpt_to.”\n”);

$sent = FALSE;

continue;

}

if ($this-smtp_send($this-host_name, $mail_from, $rcpt_to, $header, $body)) {

$this-log_write(“E-mail has been sent to “.$rcpt_to.”\n”);

} else {

$this-log_write(“Error: Cannot send email to “.$rcpt_to.”\n”);

$sent = FALSE;

}

fclose($this-sock);

$this-log_write(“Disconnected from remote host\n”);

}

return $sent;

}

/* Private Functions */

function smtp_send($helo, $from, $to, $header, $body = “”)

{

if (!$this-smtp_putcmd(“HELO”, $helo)) {

return $this-smtp_error(“sending HELO command”);

}

#auth

if($this-auth){

if (!$this-smtp_putcmd(“AUTH LOGIN”, base64_encode($this-user))) {

return $this-smtp_error(“sending HELO command”);

}

if (!$this-smtp_putcmd(“”, base64_encode($this-pass))) {

return $this-smtp_error(“sending HELO command”);

}

}

#

if (!$this-smtp_putcmd(“MAIL”, “FROM:”.$from.””)) {

return $this-smtp_error(“sending MAIL FROM command”);

}

if (!$this-smtp_putcmd(“RCPT”, “TO:”.$to.””)) {

return $this-smtp_error(“sending RCPT TO command”);

}

if (!$this-smtp_putcmd(“DATA”)) {

return $this-smtp_error(“sending DATA command”);

}

if (!$this-smtp_message($header, $body)) {

return $this-smtp_error(“sending message”);

}

if (!$this-smtp_eom()) {

return $this-smtp_error(“sending CRLF.CRLF [EOM]”);

}

if (!$this-smtp_putcmd(“QUIT”)) {

return $this-smtp_error(“sending QUIT command”);

}

return TRUE;

}

function smtp_sockopen($address)

{

if ($this-relay_host == “”) {

return $this-smtp_sockopen_mx($address);

} else {

return $this-smtp_sockopen_relay();

}

}

function smtp_sockopen_relay()

{

$this-log_write(“Trying to “.$this-relay_host.”:”.$this-smtp_port.”\n”);

$this-sock = @fsockopen($this-relay_host, $this-smtp_port, $errno, $errstr, $this-time_out);

if (!($this-sock $this-smtp_ok())) {

$this-log_write(“Error: Cannot connenct to relay host “.$this-relay_host.”\n”);

$this-log_write(“Error: “.$errstr.” (“.$errno.”)\n”);

return FALSE;

}

$this-log_write(“Connected to relay host “.$this-relay_host.”\n”);

return TRUE;

}

function smtp_sockopen_mx($address)

{

$domain = ereg_replace(“^.+@([^@]+)$”, “\1”, $address);

if (!@getmxrr($domain, $MXHOSTS)) {

$this-log_write(“Error: Cannot resolve MX \””.$domain.”\”\n”);

return FALSE;

}

foreach ($MXHOSTS as $host) {

$this-log_write(“Trying to “.$host.”:”.$this-smtp_port.”\n”);

$this-sock = @fsockopen($host, $this-smtp_port, $errno, $errstr, $this-time_out);

if (!($this-sock $this-smtp_ok())) {

$this-log_write(“Warning: Cannot connect to mx host “.$host.”\n”);

$this-log_write(“Error: “.$errstr.” (“.$errno.”)\n”);

continue;

}

$this-log_write(“Connected to mx host “.$host.”\n”);

return TRUE;

}

$this-log_write(“Error: Cannot connect to any mx hosts (“.implode(“, “, $MXHOSTS).”)\n”);

return FALSE;

}

function smtp_message($header, $body)

{

fputs($this-sock, $header.”\r\n”.$body);

$this-smtp_debug(” “.str_replace(“\r\n”, “\n”.” “, $header.”\n “.$body.”\n “));

return TRUE;

}

function smtp_eom()

{

fputs($this-sock, “\r\n.\r\n”);

$this-smtp_debug(“. [EOM]\n”);

return $this-smtp_ok();

}

function smtp_ok()

{

$response = str_replace(“\r\n”, “”, fgets($this-sock, 512));

$this-smtp_debug($response.”\n”);

if (!ereg(“^[23]”, $response)) {

fputs($this-sock, “QUIT\r\n”);

fgets($this-sock, 512);

$this-log_write(“Error: Remote host returned \””.$response.”\”\n”);

return FALSE;

}

return TRUE;

}

function smtp_putcmd($cmd, $arg = “”)

{

if ($arg != “”) {

if($cmd==””) $cmd = $arg;

else $cmd = $cmd.” “.$arg;

}

fputs($this-sock, $cmd.”\r\n”);

$this-smtp_debug(” “.$cmd.”\n”);

return $this-smtp_ok();

}

function smtp_error($string)

{

$this-log_write(“Error: Error occurred while “.$string.”.\n”);

return FALSE;

}

function log_write($message)

{

$this-smtp_debug($message);

if ($this-log_file == “”) {

return TRUE;

}

$message = date(“M d H:i:s “).get_current_user().”[“.getmypid().”]: “.$message;

if (!@file_exists($this-log_file) || !($fp = @fopen($this-log_file, “a”))) {

$this-smtp_debug(“Warning: Cannot open log file \””.$this-log_file.”\”\n”);

return FALSE;;

}

flock($fp, LOCK_EX);

fputs($fp, $message);

fclose($fp);

return TRUE;

}

function strip_comment($address)

{

$comment = “\([^()]*\)”;

while (ereg($comment, $address)) {

$address = ereg_replace($comment, “”, $address);

}

return $address;

}

function get_address($address)

{

$address = ereg_replace(“([ \t\r\n])+”, “”, $address);

$address = ereg_replace(“^.*(.+).*$”, “\1”, $address);

return $address;

}

function smtp_debug($message)

{

if ($this-debug) {

echo $message;

}

}

}

/********************************************************************************************/

//本類是針對qq的,如果你的qq有限沒有開啟stmp服務,請開啟。

$smtpserver = “smtp.qq.com”; //SMTP伺服器

$smtpserverport =25; //SMTP伺服器埠

$smtpusermail = “你的QQ號碼@qq.com”; //SMTP伺服器的用戶郵箱

$smtpemailto = “924434008@qq.com”; //發送給誰

$smtpuser = “你的qq號碼@qq.com”; //SMTP伺服器的用戶帳號

$smtppass = “你的qq密碼”; //SMTP伺服器的用戶密碼 這裡是指你qq的密碼

$mailsubject = “測試郵件主題”; //郵件主題

$mailbody = “h1測試郵件的內容………………………………………../h1”; //郵件內容

$mailtype = “HTML”; //郵件格式(HTML/TXT),TXT為文本郵件

$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass); //這裡面的一個true是表示使用身份驗證,否則不使用身份驗證.

$smtp-debug = false; //是否顯示發送的調試信息

if($smtp-sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype)==”1″){

echo “郵件發送成功!”;

}else{

echo “郵件發送失敗!”;

}

?

原創文章,作者:EQSRN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/317302.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
EQSRN的頭像EQSRN
上一篇 2025-01-11 16:27
下一篇 2025-01-11 16:27

相關推薦

  • int類型變數的細節與注意事項

    本文將從 int 類型變數的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變數進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變數。 一、定義與聲明 int…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python基本數字類型

    本文將介紹Python中基本數字類型,包括整型、布爾型、浮點型、複數型,並提供相應的代碼示例以便讀者更好的理解。 一、整型 整型即整數類型,Python中的整型沒有大小限制,所以可…

    編程 2025-04-29
  • Python中的Bool類型判斷

    本篇文章旨在講解Python中的Bool類型判斷。在Python中,Bool類型是經常使用的一種類型,因此掌握其用法非常重要。 一、True和False 在Python中,True…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • Python函數類型有哪些

    本文將從以下幾個方面詳細闡述Python函數類型。 一、內置函數 Python的內置函數是指在Python編程語言中提供的可以直接使用的函數,不需要通過導入模塊等方式引入。 部分常…

    編程 2025-04-29
  • Python中的整數類型int類總覽

    本文將從多個方面,對Python中的整數類型int類進行全面介紹和闡述。 一、數據類型及基本操作 在Python中,整數類型的數據類型為int。在Python3.x中,整數類型的范…

    編程 2025-04-28
  • Python變數類型用法介紹

    Python是一種解釋型編程語言,它提供了豐富的數據類型,包括數字、字元串、列表、元組、集合、字典等。Python變數類型的定義是Python程序開發的基礎,本文將從以下幾個方面對…

    編程 2025-04-28

發表回復

登錄後才能評論