PHP_带smtp验证的发邮件函数

#echo send_mail($_POST["email"],$tosubject,$_POST["errortext"]);
echo send_mail('someone@126.com','only a test mail for test php mail function','一封垃圾邮件');
echo time();

function send_mail($to, $subject = 'No subject', $body) {
        $loc_host = "mail.server";            //发信计算机名,可随意
        $smtp_acc = "smp@163.com"; //Smtp认证的用户名
        $smtp_pass="pwdpwd";          //Smtp认证的密码,一般等同pop3密码
        $smtp_host="smtp.163.com";    //SMTP服务器地址,类似 smtp.tom.com
        $from="smp@163.com";       //发信人Email地址,你的发信信箱地址
    $deliver=$smtp_acc; //回复到指定邮箱
    $headers = "Content-Type: text/plain; charset=\"gb2312\"\r\nContent-Transfer-Encoding: base64";
    $lb="\r\n";                    //linebreak    
        $hdr = explode($lb,$headers);     //解析后的hdr
    if($body) {$bdy = preg_replace("/^\./","..",explode($lb,$body));}//解析后的Body

        $smtp = array(
      //1、EHLO,期待返回220或者250
      array("EHLO ".$loc_host.$lb,"220,250","HELO error: "),
      //2、发送Auth Login,期待返回334
      array("AUTH LOGIN".$lb,"334","AUTH error:"),
      //3、发送经过Base64编码的用户名,期待返回334
      array(base64_encode($smtp_acc).$lb,"334","AUTHENTIFICATION error : "),
      //4、发送经过Base64编码的密码,期待返回235
      array(base64_encode($smtp_pass).$lb,"235","AUTHENTIFICATION error : "));
      //5、发送Mail From,期待返回250
      $smtp[] = array("MAIL FROM: <".$from.">".$lb,"250","MAIL FROM error: ");
      //6、发送Rcpt To。期待返回250
      $smtp[] = array("RCPT TO: <".$to.">".$lb,"250","RCPT TO error: ");
      //7、发送DATA,期待返回354
      $smtp[] = array("DATA".$lb,"354","DATA error: ");
      //8.0、发送From
      $smtp[] = array("From: ".$deliver.$lb,"","");
      //8.2、发送To
      $smtp[] = array("To: ".$to.$lb,"","");
      //8.1、发送标题
      $smtp[] = array("Subject: ".$subject.$lb,"","");
      //8.3、发送其他Header内容
      foreach($hdr as $h) {$smtp[] = array($h.$lb,"","");}
      //8.4、发送一个空行,结束Header发送
      $smtp[] = array($lb,"","");
      //8.5、发送信件主体
      if($bdy) {foreach($bdy as $b) {$smtp[] = array(base64_encode($b.$lb).$lb,"","");}}
      //9、发送“.”表示信件结束,期待返回250
      $smtp[] = array(".".$lb,"250","DATA(end)error: ");
      //10、发送Quit,退出,期待返回221
      $smtp[] = array("QUIT".$lb,"221","QUIT error: ");

        //打开smtp服务器端口
        $fp = @fsockopen($smtp_host, 25);
        if (!$fp) echo "<b>Error:</b> Cannot conect to ".$smtp_host."<br>";
        while($result = @fgets($fp, 1024)){if(substr($result,3,1) == " ") { break; }}
       
        $result_str="";
        //发送smtp数组中的命令/数据
        foreach($smtp as $req){
                //发送信息
                @fputs($fp, $req[0]);
                //如果需要接收服务器返回信息,则
                if($req[1]){
                        //接收信息
                        while($result = @fgets($fp, 1024)){
                                if(substr($result,3,1) == " ") { break; }
                        };
                        if (!strstr($req[1],substr($result,0,3))){
                                $result_str.=$req[2].$result."<br>";
                        }
                }
        }
        //关闭连接
        @fclose($fp);
        return $result_str;
}

偶然看到的,google收录了老多,估计是百度的数据http接口,但不知道是哪里用的

http://www.google.cn/search?hl=zh-CN&newwindow=1&q=site:pdc.baidu.com&start=140&sa=N

http://pdc.baidu.com/uinfo/?callback=requestImstate&type=json&uids=523d413b75c1a126cefca385,8f28d950665b64514ec226ba,d29a005a39605d318644f91f,972455b2b064851103e92853,287656924c43163e24979151,420b446f2059bd7fcb80c4a0&randin=2130115001&detaillen=256&t=

fa28d4b9-53ee-102d-956f-2075ea3753fb

几个有用的查询网站 互联网相关

  网站历史查询http://www.archive.org/index.php

  Web网页信息http://www.infomall.cn/

  日文注册查询http://whois.co.jp

  国外域名交易网站http://www.sedo.com/

  ip绑定域名查询http://whois.webhosting.info/

  银点停放http://www.silverclicks.com.cn/

  易域网域名论坛 http://www.domain.cn/club

  网络实名查询http://realname.alibaba.com.cn/

  通用网址查询http://seal.cnnic.cn/index.html

  百度竞价排名http://jingjia.baidu.com

  雅虎竞价排名http://p4p.cn.yahoo.com/

  国外关键词竞标http://overture.showdn.com/

  百度指数http://index.baidu.com/

  百度相关关键词排行http://d.baidu.com/rs.php

  百度热门搜索http://top.baidu.com/top_keyword.html

  百度火爆地带http://ma.baidu.com/fs/inquire/price.php

  Google PageRank 查询http://tool.chinaz.com/Rank/

  百度词典http://dict.baidu.com/

  汉字转拼音http://tool.chinaz.com/Trans/Word_Spell.asp

  中国网络备案中心http://www.miibeian.gov.cn/

  全球网站排行TOP500http://www.alexa.com

  中国互联网络信息中心http://www.cnnic.cn

  网页关键词密度分析工具http://www.keyworddensity.com/

  时代互联批量查询http://www.now.cn/domain/mcheck.net

  其他语言国际域名的转码http://mct.verisign-grs.com/index.shtml

  亚洲域名域名争议解决中心http://www.adndrc.org/adndrc/bjc_home.html

  阿里巴巴热门词http://info.china.alibaba.com/news/subject/v1-s5011580.html

  Google中国热门关键词http://www.google.com/intl/en/press/intl-zeitgeist.html#cn

  Yahoo搜索排行榜http://top.cn.yahoo.com/index.html?source=yahoo_buzz_allsrvc

  Google AdWords 关键字https://adwords.google.com/select/KeywordToolExternal

  在线翻译http://www.worldlingo.com/zh/microsoft/computer_translation.html

  国外域名停放http://www.sedo.com

  域名排名查询http://www.alexa.com

from: http://www.cndns.com/help/?t=1&c=20&s=10&classid=35&id=221

多操作系统方案成功探索:用NTLDR(不用bootmgr)引导启动windows7(linux,grub,window xp)

windows7使用新的操作系统引导程序bootmgr,而不是之前的ntldr;电脑启动时会先出来bootmgr的画面,选择windows7或早期OS,然后是早期操作系统的列表;windows7并不经常使用,每次启动都要多加上这个等待时间,过程太罗嗦,准备简化一下。

探索过程
windows 7正式版算是出来了,虽然还是不很尽人意,但还是值得试试用一下,就安装试用一下,感觉和之前的bate版RC版差不多没有太多改变,基本算是vista的变种;而且电脑启动还要加上一个可恶的bootmgr的等待时间,画面视觉效果还不如ntldr(xp启动时的多操作系统选单)。第二天就卸载了,不过并没有格式化win7的安装分区,文件还是在的。
今天上午看到这个分区,想能不能使用NTLDR把windows7引导启动呢,之前Bate版时尝试过,简单的使用boot.ini是不行的。前几天偶然见过一个系统工具盘里有用GRUB引导vista/windows7的一个选项,但没有使用,也没研究。既然别人能这么搞,用GRUB应该是可以的,就到网上查相关资料,但非常不幸,一时间还没找到。
回头看看Grub引导windows的配置代码
root (hd0,0)
makeactive
chainloader +1
(对grub 并不很懂,只能算是蒙一下)也就是说,如果grub要把系统的控制权交给(hd0,0)处,如果这里有windows的启动文件,就可以启动。联想linux可以把引导文件安装在非主引导分区下,那么如果也把windows7的引导文件安装在其它分区下,而不是系统主引导分区下(这样就不影响C盘的ntldr),就可以实现了。
windows7 卸载是执行 [DriveLetter]:\boot\bootsect.exe /nt52 ALL /force
好像bootsect还可以恢复windows7的引导文件,查一下,找到M$官方的文档
http://technet.microsoft.com/zh-cn/library/cc749177%28WS.10%29.aspx

Bootsect 命令
Bootsect 使用下列约定:
bootsect.exe {/help | /nt52 | /nt60} {SYS | ALL | <DriveLetter:>}[/force]
例如,若要将与 NTLDR 兼容的主启动代码应用到标记为 E 的卷,请使用以下命令:
bootsect.exe /nt52 E:

笔者硬盘上装了好几个OS,主要用win 2003 中文版,另有一个英文版XP、fedora linux ,再加上一个win7。win7在(hd0,8) 在XP下分配盘符为J(03下没有分配盘符,比较变态一点),就进入XP下,运行bootsect.exe /nt60 j:
报了一个错误,但后面还是提示了个successful,不管它,看看好了没有。进入grub 命令行运行:
root (hd0,8)
makeactive
chainloader +1
boot
出错了,提示说:\Boot\BCD找不到,重启,把C盘下的\boot目录拷过去(windows7的文件没有删,就不用到光盘ISO中拷了)。
再重启,进入GRUB,运行启动命令,正常进入window7,成功。
但是再进windows xp 时,出错了,\system32\ntoskrnl.exe 丢失,从win03进去看看,文件是在的,重启xp试了试,还是不行;只好到xp ISO里提取一下覆盖一下,xp也正常启动了。估计是安装bootmgr时搞出了乱子。
[注]根据回忆写的,可能有一定的疏漏,还敬请斧正。

MS SQL SERVER 孤立用户问题

Windows环境下,经常遇到系统Over的情况,如果你在新装了系统和SQL Server 2005后,需要把SQL Server2000数据库还原,就会出现孤立用户的问题,下文中我们将介绍具体的解决方法:

解决步骤如下:

1.首先,需要还原数据库。 feedom.net

2.在 安全性/登陆名/新建登陆名,把产生的孤立用户新建一个,密码什么都设置好。

3.最后在查询分析器中执行

exec sp_change_users_login 'update_one','没有登陆名的数据库用户','新的登陆名'

-----------

检测当前数据库的孤立用户

sp_change_users_login @Action='Report';

MS SQL server 自定义函数:获取汉字拼音首字母(音序)

转来的,很好用,要谢谢作者的

Create function [dbo].[fun_getPY]
(
    @str nvarchar(4000)
)
returns nvarchar(4000)
as
begin
declare @word nchar(1),@PY nvarchar(4000)

set @PY=''

while len(@str)>0
begin
    set @word=left(@str,1)

    --如果非汉字字符,返回原字符
    set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901
               then (
                    select top 1 PY
                    from
                    (
                     select 'A' as PY,N'驁' as word
                     union all select 'B',N'簿'
                     union all select 'C',N'錯'
                     union all select 'D',N'鵽'
                     union all select 'E',N'樲'
                     union all select 'F',N'鰒'
                     union all select 'G',N'腂'
                     union all select 'H',N'夻'
                     union all select 'J',N'攈'
                     union all select 'K',N'穒'
                     union all select 'L',N'鱳'
                     union all select 'M',N'旀'
                     union all select 'N',N'桛'
                     union all select 'O',N'漚'
                     union all select 'P',N'曝'
                     union all select 'Q',N'囕'
                     union all select 'R',N'鶸'
                     union all select 'S',N'蜶'
                     union all select 'T',N'籜'
                     union all select 'W',N'鶩'
                     union all select 'X',N'鑂'
                     union all select 'Y',N'韻'
                     union all select 'Z',N'咗'
                      ) T
                   where word>=@word collate Chinese_PRC_CS_AS_KS_WS
                   order by PY ASC
                          )
                      else @word
                 end)
    set @str=right(@str,len(@str)-1)
end

return @PY

end

windows 2003 安装新版本的MSN9 完美解决方案

windows 2003 安装新版本的MSN9 完美解决方案

对于使用windows2003做为工作平台的劳苦大众,我们也要使用msn,但可恶的M$却不让我们正常的在2003下使用msn,之前msn9刚刚出来时,我们可以在XP下安装,然后使用释放出来的msi文件在瘟2003下安装msn,但前些天msn又出更狠的招儿:释放出来的文件安装了也不能使用,还是提示版本过低,不能使用。

偶然的机会发现了一个完美的解决方案,在2003下安装msn9,不敢独自保留,分享给大家。

方法非常简单:

用ResHacker 打开MSN9的安装文件,修改 CONFIG / CONFIG0 / 0 / <os productType="workstation" />改为<os productType="server" />

注:可以修改100多兆的那个安装文件,也可以修改1M多的在线安装文件,都可以正常通过安装的。

一切搞定,直接安装吧,2003下的msn世界一下就和~谐~了!

HTTP协议header头域

HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

通用头域
通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。
Cache-Control头域
Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Date头域
Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
Pragma头域
Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。

请求消息
请求消息的第一行为下面的格式:
MethodSPRequest-URISPHTTP-VersionCRLFMethod表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE。方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。GET方法取回由Request-URI标识的信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。
SP表示空格。Request-URI遵循URI格式,在此字段为星号(*)时,说明请求并不用于某个特定的资源地址,而是用于服务器本身。HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。CRLF表示换行回车符。请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If-Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。
典型的请求消息:
GEThttp://class/download.microtool.de:80/somedata.exe
Host:download.microtool.de
Accept:*/*
Pragma:no-cache
Cache-Control:no-cache
Referer:http://class/download.microtool.de/
User-Agent:Mozilla/4.04[en](Win95;I;Nav)
Range:bytes=554554-
上例第一行表示HTTP客户端(可能是浏览器、下载程序)通过GET方法获得指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。
Host头域
Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
Referer头域
Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。
Range头域
Range头域可以请求实体的一个或者多个子范围。例如,
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节以后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999
但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。
User-Agent头域
User-Agent头域的内容包含发出请求的用户信息。

响应消息
响应消息的第一行为下面的格式:
HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF
HTTP-Version表示支持的HTTP版本,例如为HTTP/1.1。Status-Code是一个三个数字的结果代码。Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。
典型的响应消息:
HTTP/1.0200OK
Date:Mon,31Dec200104:25:57GMT
Server:Apache/1.3.14(Unix)
Content-type:text/html
Last-modified:Tue,17Apr200106:46:28GMT
Etag:"a030f020ac7c01:1e9f"
Content-length:39725426
Content-range:bytes554554-40279979/40279980
上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。
Location响应头
Location响应头用于重定向接收者到一个新URI地址。
Server响应头
Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。

实体
请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content-Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、Etag、Expires、Last-Modified、extension-header。extension-header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。
Content-Type实体头
用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型Content-Range实体头
Content-Range实体头
用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth
例如,传送头500个字节次字段的形式:Content-Range:bytes0-499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。
Last-modified实体头
指定服务器上保存内容的最后修订时间。

推荐工具firefox插件:live http header,可以很方便的查看http header 还有其它的一些功能,严重推荐.

Pages: Prev 1 2 3 ... 38 39 40 41 42 43 44 45 46 47 48 Next