㈠ php發送的電郵, hotmail收不到, 怎樣做
親 我給你份資料,你自己學學 關於 PHPmailer的,這個是燕十八的課,你網上搜搜,他的網站 自學IT網
,不行你就用他的方法 發郵件 真的自己使用socke他純便 指不定就那裡寫錯了,建議你使用PHPMAILER
第一,需要下載PHPMailer文件包phpmailer. http://phpmailer.sourceforge.net/
第二,確認你的伺服器系統已經支持socket ,通過phpinfo();查看是否支持sockets(socket 是屬於沒哪PHP擴展部分),如果顯現為「enabled」,那就是支持了。
第三,把文件解壓到你的web伺服器目錄下,調用類就可以了.
首先包含class.phpmailer.php,然後創建對象,設置參數,調用成員函數。
例1,做成函數方便調用
復制代碼 代碼如下:
<?php
require("phpmailer/class.phpmailer.php");
function smtp_mail( $sendto_email, $subject, $body, $extra_hdrs, $user_name){
$mail = new PHPMailer();
$mail->IsSMTP(); // send via SMTP
$mail->Host = "200.162.244.66"; // SMTP servers
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "yourmail"; // SMTP username 注意:普通郵件認證不需要加 @域名
$mail->Password = "mailPassword"; // SMTP password
$mail->From = "[email protected]"; // 發件人郵箱
$mail->FromName = "管理員"; // 發件人
$mail->CharSet = "GB2312"; // 這里指定字元集!
$mail->Encoding = "base64";
$mail->AddAddress($sendto_email,"username"); // 收件人郵箱和姓名
$mail->AddReplyTo("[email protected]","yourdomain.com");
//$mail->WordWrap = 50; // set word wrap 換行字數
//$mail->AddAttachment("/var/tmp/file.tar.gz"); // attachment 附件
//$mail->AddAttachment("/tmp/image.jpg", "new.jpg");
$mail->IsHTML(true); // send as HTML
// 郵件主題
$mail->Subject = $subject;
// 郵件內容
$mail->Body = "
<html><head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
</head>
<body>
I love php。
</body>
</html>
";
$mail->AltBody ="text/html";
亮消 if(!$mail->Send())
{
echo "郵件發送有誤 <p>";
echo "郵件錯誤信息: " . $mail->ErrorInfo;
exit;
}
else {
echo "$user_name 郵件發送成功!<br />";
枯鍵碼 }
}
// 參數說明(發送到, 郵件主題, 郵件內容, 附加信息, 用戶名)
smtp_mail("[email protected]", "歡迎使用phpmailer!", "NULL", "yourdomain.com", "username");
?>
注意:
1.郵件的字元集設置, $mail->CharSet = "GB2312"; // 這里指定字元集!在這里我只指定為GB2312因為這樣Outlook能正常顯示郵件主題,我嘗試過設為utf-8但在Outlook下顯示亂碼。
2.如果是發送html格式的郵件,那麼記得也指定
3.如果你想用它來群發郵件的話,記得修改包含文件函數,如:
require("phpmailer/class.phpmailer.php");
改為
require_once("phpmailer/class.phpmailer.php");
否則的話會產生類的重定義。
個人認為要使用phpmailer,首先,需要有一個郵件伺服器,PHP的 mail函數沒有指定,應該是使用的PHP設置的SMTP。
而在這里需要具體指定,同時需要指定郵件伺服器的管理者和密碼。
PHPMailer 也是一個功能強大的郵件類
PHPMailer的主要功能特點:
支持郵件 s/mime加密的數字簽名
支持郵件多個 TOs, CCs, BCCs and REPLY-TOs
可以工作在任何伺服器平台,所以不用擔心WIN平台無法發送郵件的問題的
支持文本/HTML格式郵件
可以嵌入image圖像
對於郵件客戶端不支持HTML閱讀的進行支持
功能強大的發送郵件調試功能debug
自定義郵件header
冗餘SMTP伺服器支持
支持8bit, base64, binary, and quoted-printable 編碼
文字自動換行
支持多附件發送功能
支持SMTP伺服器驗證功能
在Sendmail, qmail, Postfix, Gmail, Imail, Exchange 等平台測試成功
提供的下載文件中,包括內容詳細的說明文檔及示例說明,所以不用擔心難於上手的問題!
PHPMailer 非常小巧、簡單、方便、快捷
以上資料由Jiucool 翻譯自phpmailer 官網,轉載請註明!
PHPMailer的使用(這里以使用gmail smtp發送郵件為例,當然也支持sendmail pop 等其他方式):
首先到http://phpmailer.worxware.com/ 下載最新版本的程序包
下載完成後,找到class.phpmailer.php 、class.smtp.php兩個類放到自己的目錄下!
然後新建一個php文件這里命名為:phpmail_jiucool.php
phpmail_jiucool.php內容如下:
我直接將郵件發送模塊寫成一個函數postmail_jiucool_com(),大家使用的時候直接調用該函數即可,函數內容為:
復制代碼 代碼如下:
function postmail_jiucool_com($to,$subject = "",$body = ""){
//Author:Jiucool WebSite: http://www.jb51.net
//$to 表示收件人地址 $subject 表示郵件標題 $body表示郵件正文
//error_reporting(E_ALL);
error_reporting(E_STRICT);
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.googlemail.com"; // SMTP 伺服器
$mail->Port = 465; // SMTP伺服器的埠號
$mail->Username = "SMTP伺服器用戶名"; // SMTP伺服器用戶名
$mail->Password = "SMTP伺服器密碼"; // SMTP伺服器密碼
$mail->SetFrom('發件人地址,如admin#jiucool.com #換成@', '發件人名稱');
$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!恭喜,郵件發送成功!";
}
}
㈡ 請教php大神,php如何實現點擊頁面上的一個按鈕發送socket的tcp數據
1.參考資料
socket_create()函數需要三個參數:一個協議、一個socket類型、一個公共協議。socket_create()函數運行成功返回一個
包含socket的資源類型,如果沒有成功則返回false。
Socket函數
函數名 描述
函數名 描述
socket_accept() 接受一個Socket連接
socket_bind() 把socket綁定在一個IP地址和埠上
socket_clear_error() 清除socket的錯誤或最後的錯誤代碼
socket_close() 關閉一個socket資源
socket_connect() 開始一個socket連接
socket_create_listen() 在指定埠打開一個socket監聽
socket_create_pair() 產生一對沒有差別的socket到一個數組里
socket_create() 產生一個socket,相當於產生一個socket的數據結構
socket_get_option() 獲取socket選項
socket_getpeername() 獲取遠程類似主機的ip地址
socket_getsockname() 獲取本地socket的ip地址
socket_iovec_add() 添加一個新的向量到一個分散/聚合的數組
socket_iovec_alloc() 這個函數創建一個能夠發送接收讀寫的iovec數據結構
socket_iovec_delete() 刪除一個已分配的iovec
socket_iovec_fetch() 返回指定的iovec資源的數據
socket_iovec_free() 釋放一個iovec資源
socket_iovec_set() 設置iovec的數據新值
socket_last_error() 獲取當前socket的最後錯誤代碼
socket_listen() 監聽由指定socket的所有連接
socket_read() 讀取指定長度的數據
socket_readv() 讀取從分散/聚合數組過來的數據
socket_recv() 從socket里結束數據到緩存
socket_recvfrom() 接受數據從指定的socket,如果沒有指定則默認當前socket
socket_recvmsg() 從iovec里接受消息
socket_select() 多路選擇
socket_send() 這個函數發送數據到已連接的socket
socket_sendmsg() 發送消息到socket
socket_sendto() 發送消息到指定地址的socket
socket_set_block() 在socket里設置為塊模式
socket_set_nonblock() socket里設置為非塊模式
socket_set_option() 設置socket選項
socket_shutdown() 這個函數允許你關閉讀、寫、或指定的socket
socket_strerror() 返回指定錯誤號的周詳錯誤
socket_write() 寫數據到socket緩存
socket_writev() 寫數據到分散/聚合數組
2.代碼:
<?php
$sendStr='30323034033033';//16進制數據
$sendStrArray=str_split(str_replace('','',$sendStr),2);//將16進制數據轉換成兩個一組的數組
$socket=socket_create(AF_INET,SOCK_STREAM,getprotobyname("tcp"));//創建Socket
if(socket_connect($socket,"192.168.1.100",8080)){//連接
for($j=0;$j<count($sendStrArray);$j++){
socket_write($socket,chr(hexdec($sendStrArray[$j])));//逐組數據發送
}
$receiveStr="";
$receiveStr=socket_read($socket,1024,PHP_BINARY_READ);//採用2進制方式接收數據
$receiveStrHex=bin2hex($receiveStr);//將2進制數據轉換成16進制
echo"client:".$receiveStrHex;
}
socket_close($socket);//關閉Socket
?>
㈢ PHP FilesystemRuntime 配置
PHP FilesystemRuntime 配置主要包括以下幾個關鍵選項:
allow_url_fopen:
user_agent:
default_socket_timeout:
from:
auto_detect_line_endings:
這些配置選項共同影響了PHP在處理文件系統操作時的行為,特別是在與遠程文件交互和跨平台兼容性方面。調整這些設置時,應充分考慮安全性、性能和兼容性等因素。
㈣ 想問下php的socket的工作流程是什麼
PHP利用Berkley的socket庫來建立連接。socket實質上是一種數據結構,用它來開始客戶端與伺服器之間的會話。伺服器端一直監聽等待新的會話請求,一旦客戶端連接伺服器,它會打開伺服器正在監聽的埠,雙方開始數據交換。創建一個Socket需要三個參數:協議、socket類型和公共協議類型。創建Socket時有三種可供選擇的協議:AF_INET、AF_INET6、AF_UNIX。AF_INET協議使用TCP或UDP來傳輸,適用於IPv4的地址;AF_INET6適用於IPv6;AF_UNIX是本地協議,用於Unix和Linux系統。
Socket類型有四種:SOCK_STREAM、SOCK_DGRAM、SOCK_SEQPACKET、SOCK_RAW。SOCK_STREAM是一種基於位元組流的連接,使用TCP進行傳輸,適用於大部分情況;SOCK_DGRAM是無連接的、固定長度的傳輸調用,使用UDP,適用於數據包大小固定的情況;SOCK_SEQPACKET是雙線路的、可靠的連接,發送固定長度的數據包,必須完整接收才能讀取;SOCK_RAW提供單一的網路訪問,使用ICMP協議,適用於像ping和traceroute這樣的工具;SOCK_RDM很少使用,大部分操作系統不支持,用於數據鏈路層,不保證數據包順序。
公共協議包括ICMP、UDP、TCP。ICMP用於網關和主機檢查網路狀況和報告錯誤信息;UDP是一種無連接、不可靠的傳輸協議;TCP是最常用的可靠公共協議,保證數據包能夠到達接收者,傳輸過程中發生錯誤則重新發送。
在PHP中使用socket_create()函數創建Socket,需要三個參數:協議、socket類型、公共協議。socket_create()函數成功返回一個包含Socket的資源類型,失敗返回false。函數定義如下:Resource socket_create(int protocol, int socketType, int commonProtocol);
產生Socket後,PHP提供了幾個操作Socket的函數,包括綁定Socket到一個IP、監聽Socket通信、接受Socket等。以下是一個例子:$commonProtocol = getprotobyname(「tcp」); $socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol); socket_bind($socket, 『localhost』, 1337); socket_listen($socket); // 更多Socket功能待續。在例子的第一行,使用公共協議名字獲取一個協議類型,這里使用TCP協議;若使用UDP或ICMP協議,則將getprotobyname()函數的參數改為「udp」或「icmp」。另一種方法是直接在socket_create()函數中指定SOL_TCP或SOL_UDP。
第二行是創建一個Socket並返回一個Socket資源實例。有了一個Socket資源實例後,需要將Socket綁定到一個IP地址和某個埠上。
㈤ 請問一下,PHP配置SMTP怎麼弄
PHPMailer的獲取:
PHPMailer項目地址:PHPMailer 使用git命令克隆到本地,或直接在該項目頁面的右下方點擊「 Download ZIP 」即可獲取到完整的PHPMailer代碼包,再到本地解壓即可。
步驟一:使我們的QQ郵箱能夠發送郵件
這里怎麼說能夠發送郵件呢?其實我們的郵箱都是可以發送郵件的,但是要實現在我們的網站中發送郵件,那就要設置一下我們的QQ郵箱了,因為此時我們的網站現在是作為一個第三方客戶端存在的。
這里怎麼說能夠發送郵件呢?其實我們的郵箱都是可以發送郵件的,但是要實現在我們的網站中發送郵件,那就要設置一下我們的QQ郵箱了,因為此時我們的網站現在是作為一個第三方客戶端存在的
由於待會我們用到的是SMTP伺服器來發送,在這里建議把前面的兩項開啟了!當你點擊開啟的時候,它會提示:
<?phprequire_once("./functions.php");$flag=sendMail('[email protected]','lsgo在線通知','恭喜你成功加入LSGO實驗室,開啟你的學習之旅吧!');if($flag){echo"發送郵件成功!";
}else{echo"發送郵件失敗!";
}?>
㈥ PHP編程語言中的socket是什麼東西
HP使用Berkley的socket庫來創建它的連接。你可以知道socket只不過是一個數據結構。你使用這個socket數據結構去開始一個客戶端和伺服器之間的會話。這個伺服器是一直在監聽准備產生一個新的會話。當一個客戶端連接伺服器,它就打開伺服器正在進行監聽的一個埠進行會話。這時,伺服器端接受客戶端的連接請求,那麼就進行一次循環。現在這個客戶端就能夠發送信息到伺服器,伺服器也能發送信息給客戶端。產生一個Socket,你需要三個變數:一個協議、一個socket類型和一個公共協議類型。產生一個socket有三種協議供選擇,繼續看下面的內容來獲取詳細的協議內容。定義一個公共的協議類型是進行連接一個必不可少的元素。下面的表我們看看有那些公共的協議類型。表一:協議名字/常量描述AF_INET這是大多數用來產生socket的協議,使用TCP或UDP來傳輸,用在IPv4的地址AF_INET6與上面類似,不過是來用在IPv6的地址AF_UNIX本地協議,使用在Unix和Linux系統上,它很少使用,一般都是當客戶端和伺服器在同一台及其上的時候使用表二:Socket類型名字/常量描述SOCK_STREAM這個協議是按照順序的、可靠的、數據完整的基於位元組流的連接。這是一個使用最多的socket類型,這個socket是使用TCP來進行傳輸。SOCK_DGRAM這個協議是無連接的、固定長度的傳輸調用。該協議是不可靠的,使用UDP來進行它的連接。SOCK_SEQPACKET這個協議是雙線路的、可靠的連接,發送固定長度的數據包進行傳輸。必須把這個包完整的接受才能進行讀取。SOCK_RAW這個socket類型提供單一的網路訪問,這個socket類型使用ICMP公共協議。(ping、traceroute使用該協議)SOCK_RDM這個類型是很少使用的,在大部分的操作系統上沒有實現,它是提供給數據鏈路層使用,不保證數據包的順序表三:公共協議名字/常量描述ICMP互聯網控制消息協議,主要使用在網關和主機上,用來檢查網路狀況和報告錯誤信息UDP用戶數據報文協議,它是一個無連接,不可靠的傳輸協議TCP傳輸控制協議,這是一個使用最多的可靠的公共協議,它能保證數據包能夠到達接受者那兒,如果在傳輸過程中發生錯誤,那麼它將重新發送出錯數據包。現在你知道了產生一個socket的三個元素,那麼我們就在php中使用socket_create()函數來產生一個socket。這個socket_create()函數需要三個參數:一個協議、一個socket類型、一個公共協議。socket_create()函數運行成功返回一個包含socket的資源類型,如果沒有成功則返回false。Resourecesocket_create(intprotocol,intsocketType,intcommonProtocol);現在你產生一個socket,然後呢?php提供了幾個操縱socket的函數。你能夠綁定socket到一個IP,監聽一個socket的通信,接受一個socket;現在我們來看一個例子,了解函數是如何產生、接受和監聽一個socket。上面這個例子產生一個你自己的伺服器端。例子第一行,$commonProtocol=getprotobyname(「tcp」);使用公共協議名字來獲取一個協議類型。在這里使用的是TCP公共協議,如果你想使用UDP或者ICMP協議,那麼你應該把getprotobyname()函數的參數改為「udp」或「icmp」。還有一個可選的法是不使用getprotobyname()函數而是指定SOL_TCP或SOL_UDP在socket_create()函數中。$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);例子的第二行是產生一個socket並且返回一個socket資源的實例。在你有了一個socket資源的實例以後,你就必須把socket綁定到一個IP地址和某一個埠上。socket_bind($socket,『localhost』,1337);在這里你綁定socket到本地計算機(127.0.0.1)和綁定socket到你的1337埠。然後你就需要監聽所有進來的socket連接。socket_listen($socket);在第四行以後,你就需要了解所有的socket函數和他們的使用。表四:Socket函數函數名描述socket_accept()接受一個Socket連接socket_bind()把socket綁定在一個IP地址和埠上socket_clear_error()清除socket的錯誤或者最後的錯誤代碼socket_close()關閉一個socket資源socket_connect()開始一個socket連接socket_create_listen()在指定埠打開一個socket監聽socket_create_pair()產生一對沒有區別的socket到一個數組里socket_create()產生一個socket,相當於產生一個socket的數據結構socket_get_option()獲取socket選項socket_getpeername()獲取遠程類似主機的ip地址socket_getsockname()獲取本地socket的ip地址socket_iovec_add()添加一個新的向量到一個分散/聚合的數組socket_iovec_alloc()這個函數創建一個能夠發送接收讀寫的iovec數據結構socket_iovec_delete()刪除一個已經分配的iovecsocket_iovec_fetch()返回指定的iovec資源的數據socket_iovec_free()釋放一個iovec資源socket_iovec_set()設置iovec的數據新值socket_last_error()獲取當前socket的最後錯誤代碼socket_listen()監聽由指定socket的所有連接socket_read()讀取指定長度的數據socket_readv()讀取從分散/聚合數組過來的數據socket_recv()從socket里結束數據到緩存socket_recvfrom()接受數據從指定的socket,如果沒有指定則默認當前socketsocket_recvmsg()從iovec里接受消息socket_select()多路選擇socket_send()這個函數發送數據到已連接的socketsocket_sendmsg()發送消息到socketsocket_sendto()發送消息到指定地址的socketsocket_set_block()在socket里設置為塊模式socket_set_nonblock()socket里設置為非塊模式socket_set_option()設置socket選項socket_shutdown()這個函數允許你關閉讀、寫、或者指定的socketsocket_strerror()返回指定錯誤號的詳細錯誤socket_write()寫數據到socket緩存socket_writev()寫數據到分散/聚合數組(注:函數介紹刪減了部分原文內容,函數詳細使用建議參考英文原文,或者參考PHP手冊)以上所有的函數都是PHP中關於socket的,使用這些函數,你必須把你的socket打開,如果你沒有打開,請編輯你的php.ini文件,去掉下面這行前面的注釋:extension=php_sockets.dll如果你無法去掉注釋,那麼請使用下面的代碼來載入擴展庫:如果你不知道你的socket是否打開,那麼你可以使用phpinfo()函數來確定socket是否打開。你通過查看phpinfo信息了解socket是否打開。如下圖:查看phpinfo()關於socket的信息◆產生一個伺服器現在我們把第一個例子進行完善。你需要監聽一個指定的socket並且處理用戶的連接。你應該使用你的命令提示符來運行這個例子。理由是因為這里將產生一個伺服器,而不是一個Web頁面。如果你嘗試使用Web瀏覽器來運行這個腳本,那麼很有可能它會超過30秒的限時。你可以使用下面的代碼來設置一個無限的運行時間,但是還是建議使用命令提示符來運行。set_time_limit(0);在你的命令提示符中對這個腳本進行簡單測試:Php.exeexample01_server.php如果你沒有在系統的環境變數中設置php解釋器的路徑,那麼你將需要給php.exe指定詳細的路徑。當你運行這個伺服器端的時候,你能夠通過遠程登陸(telnet)的方式連接到埠1337來測試這個伺服器。如下圖:上面的伺服器端有三個問題:1.它不能接受多個連接。2.它只完成唯一的一個命令。3.你不能通過Web瀏覽器連接這個伺服器。這個第一個問題比較容易解決,你可以使用一個應用程序去每次都連接到伺服器。但是後面的問題是你需要使用一個Web頁面去連接這個伺服器,這個比較困難。你可以讓你的伺服器接受連接,然後些數據到客戶端(如果它一定要寫的話),關閉連接並且等待下一個連接。在上一個代碼的基礎上再改進,產生下面的代碼來做你的新伺服器端:這個伺服器端要做什麼呢?它初始化一個socket並且打開一個緩存收發數據。它等待連接,一旦產生一個連接,它將列印「Socketconnected」在伺服器端的屏幕上。這個伺服器檢查緩沖區,如果緩沖區里有數據,它將把數據發送到連接過來的計算機。然後它發送這個數據的接受信息,一旦它接受了信息,就把信息保存到數據里,並且讓連接的計算機知道這些信息,最後關閉連接。當連接關閉後,伺服器又開始處理下一次連接。(翻譯的爛,附上原文)Thisiswhattheserverdoes..Thenitwaitsforaconnection.「Socketconnected」.;ifthereis,..,,andthenclosestheconnection.Aftertheconnectionisclosed,.◆產生一個客戶端處理第二個問題是很容易的。你需要產生一個php頁連接一個socket,發送一些數據進它的緩存並處理它。然後你又個處理後的數據在還頓,你能夠發送你的數據到伺服器。在另外一台客戶端連接,它將處理那些數據。.,,andprocessit..Whenanotherclientconnects,.下面的例子示範了使用socket:這個例子的代碼演示了客戶端連接到伺服器。客戶端讀取數據。如果這是第一時間到達這個循環的首次連接,這個伺服器將發送「NODATA」返回給客戶端。如果情況發生了,這個客戶端在連接之上。客戶端發送它的數據到伺服器,數據發送給伺服器,客戶端等待響應。一旦接受到響應,那麼它將把響應寫到屏幕上。