PHP不依赖SMTP服务器发送邮件的办法
时间:2007-06-09 来源:yuyii
前段日子工作需要写了个邮件发送类,不使用PHP的MAIL函数(其实那个函数很破,没SMTP服务器等于0,底层的一点不涉及)
查了点相关资料,终于发现PHP也能写依靠查MX值来发送邮件的办法。
也就两步过程:1、查MX(mail exchange)2、用socks来发送信息
查MX的办法很多,LINUX的话可以直接调用PHP的一个函数,好像叫getdnsmx来着,windows没这个函数,可以用命令来取(nslookup -q=mx 163.com),也可以通过给dns发送信息来取,函数比较复杂。
socks发送就是建造邮件需要的头信息,一个个发送,当然先要建立socks连接,连不上一切免谈,用fsockopen。
邮件发送的包格式与顺序:(具体参考RFC文档)
EHLO {本地主机} //尽量不要写IP,某些邮件服务器(163就是)会拒绝,估计是防止垃圾邮件
MAIL FROM: //可能有些不需要 当收到421错误可以考虑下是否他们做了邮件验证
RCPT TO: //上同
DATA
From:{from邮件称呼}
To:{to邮件}
Subject:{邮件主题}
Content-Type: {text/html}/{text/plain}; //两种邮件类型,选一
{正文}
. //正文结束标志
QUIT
另外,在发送的时候,socks用阻塞模式,每次发送好取到返回信息再继续发送。试验的时候可以建议用sniffer抓包看哪里出的问题。
查了点相关资料,终于发现PHP也能写依靠查MX值来发送邮件的办法。
也就两步过程:1、查MX(mail exchange)2、用socks来发送信息
查MX的办法很多,LINUX的话可以直接调用PHP的一个函数,好像叫getdnsmx来着,windows没这个函数,可以用命令来取(nslookup -q=mx 163.com),也可以通过给dns发送信息来取,函数比较复杂。
socks发送就是建造邮件需要的头信息,一个个发送,当然先要建立socks连接,连不上一切免谈,用fsockopen。
邮件发送的包格式与顺序:(具体参考RFC文档)
EHLO {本地主机} //尽量不要写IP,某些邮件服务器(163就是)会拒绝,估计是防止垃圾邮件
MAIL FROM: //可能有些不需要 当收到421错误可以考虑下是否他们做了邮件验证
RCPT TO: //上同
DATA
From:{from邮件称呼}
To:{to邮件}
Subject:{邮件主题}
Content-Type: {text/html}/{text/plain}; //两种邮件类型,选一
{正文}
. //正文结束标志
QUIT
另外,在发送的时候,socks用阻塞模式,每次发送好取到返回信息再继续发送。试验的时候可以建议用sniffer抓包看哪里出的问题。
相关阅读 更多 +
排行榜 更多 +