http://blog.csdn.net/kingerq/archive/2005/08/19/458966.aspx这个就可以。
解决方案 »
- php实现在线编辑xml,获得节点索引的问题
- apache URL重写问题
- 救助:XP下如何配置phpmyadmin(已安装好apache+php+mysql)?
- php cms menu 功能 实现
- 大家说说做php/ajax/js用什么开发环境IDE做比较好?
- 求助,像这个赋值方式合不合法的?
- 如何用header进行页面的跳转?
- 为什么我装好PHP运行环境了,可以打开PHP页面但是却用不了imagecreate()函数?
- 学PHP有1个多月了,高手或有体会的近来帮帮我
- 求一个技术思路
- php+ORACLED 多用户访问时oracle报错ORA-01001无效的游标 !!!急急急!!!!
- 关于php和sqlserver海量数据查询翻页的问题
当然你必须用正确的用正确的油箱地址发信
可以看出好像出错是因为from的地址不是tom的用户
-----------------------------------------------------
Trying to smtp.tom.com:25
220 Coremail SMTP(Anti Spam) System (163net[040302])
Connected to relay host smtp.tom.com
> HELO localhost
250 bjapp5
> AUTH LOGIN aWNlc3ljQHRvbS5jb20=
334 UGFzc3dvcmQ6
> Zm9ybWF0
235 Authentication successful
> MAIL FROM:<[email protected]>
550 <[email protected]>: Invalid User
Error: Remote host returned "550 <[email protected]>: Invalid User"
Error: Error occurred while sending MAIL FROM command.
Error: Cannot send email to <[email protected]>
Disconnected from remote host
class CLEmail {
//---设置全局变量
var $mailTo = ""; // 收件人
var $mailCC = ""; // 抄送
var $mailBCC = ""; // 秘密抄送
var $mailFrom = ""; // 发件人
var $mailSubject = ""; // 主题
var $mailText = ""; // 文本格式的信件主体
var $mailHTML = ""; // html格式的信件主体 // 用SOCKET方式发送时参数
var $smtp_server = "smtp.163.com";
var $smtp_port = "25";
var $smtp_user = "username";
var $smtp_pin = "password"; /*
setTo($inAddress) :检测收件人的地址
$inAddress : email地址,使用逗号来分割多个邮件地址
*/
function setTo($inAddress) {
$addressArray = explode( ",",$inAddress);
for($i=0;$i<count($addressArray);$i++) {
if($this->checkEmail($addressArray[$i])==false)
return false;
}
$this->mailTo = implode($addressArray, ",");
return true;
}
/*
setCC($inAddress) :检测抄送的地址
$inAddress : email地址,使用逗号来分割多个邮件地址
*/
function setCC($inAddress) {
$addressArray = explode( ",",$inAddress);
for($i=0;$i<count($addressArray);$i++) {
if($this->checkEmail($addressArray[$i])==false)
return false;
}
$this->mailCC = implode($addressArray, ",");
return true;
}
/*
setBCC($inAddress) :检测暗送的地址
$inAddress : email地址,使用逗号来分割多个邮件地址
*/
function setBCC($inAddress) {
$addressArray = explode( ",",$inAddress);
for($i=0;$i<count($addressArray);$i++) {
if($this->checkEmail($addressArray[$i])==false)
return false;
}
$this->mailBCC = implode($addressArray, ",");
return true;
}
/*
setFrom($inAddress) :检测发件人的地址
$inAddress : 发件人的EMAIL地址
*/
function setFrom($inAddress) {
if($this->checkEmail($inAddress)) {
$this->mailFrom = $inAddress;
return true;
}
return false;
} function setSubject($inSubject) {
if(strlen(trim($inSubject)) > 0) {
$this->mailSubject = ereg_replace( "n", "",$inSubject);
return true;
}
return false;
} function setText($inText) {
if(strlen(trim($inText)) > 0) {
$this->mailText = $inText;
return true;
}
return false;
}
/*
setHTML($inHTML): 设置html格式的邮件主体参数$inHTML为html格式,
默认返回值为true
*/
function setHTML($inHTML) {
if(strlen(trim($inHTML)) > 0) {
$this->mailHTML = $inHTML;
return true;
}
return false;
}
/*
checkEmail($inAddress) :检查email地址的合法性
*/
function checkEmail($inAddress) {
return (ereg( "^[^@ ]+@([a-zA-Z0-9-]+.)+([a-zA-Z0-9-]{2}|net|com|gov|mil|org|edu|int)$",$inAddress));
}
/*
getRandomBoundary($offset): 返回一个随机的边界值
$offset 为整数 – 用于多管道的调用 返回一个md5()编码的字串
*/
function getRandomBoundary($offset = 0) {
//--随机数生成
srand(time()+$offset);
//--返回 md5 编码的32位 字符长度的字串
return ( "----".(md5(rand())));
}
/*
formatTextHeader: 文本内容加上text的文件头
*/
function formatTextHeader() {
$outTextHeader = "";
$outTextHeader .= "Content-Type: text/plain;
charset=us-asciin";
$outTextHeader .= "Content-Transfer-Encoding: 7bitnn";
$outTextHeader .= $this->mailText. "n";
return $outTextHeader;
}
/*
formatHTMLHeader(): 邮件主体内容加上html的文件头
*/
function formatHTMLHeader() {
$outHTMLHeader = "";
$outHTMLHeader .= "Content-Type: text/html;
charset=us-asciin";
$outHTMLHeader .= "Content-Transfer-Encoding: 7bitnn";
$outHTMLHeader .= $this->mailHTML. "n";
return $outHTMLHeader;
}
/*
send(): 用于发送邮件,发送成功返回值为true
*/
function send() {
//--设置邮件头为空
$mailHeader = "";
//--添加抄送人
if($this->mailCC != "")
$mailHeader .= "CC: ".$this->mailCC. "n";
//--添加秘密抄送人
if($this->mailBCC != "")
$mailHeader .= "BCC: ".$this->mailBCC. "n";
//--添加发件人
if($this->mailFrom != "")
$mailHeader .= "FROM: ".$this->mailFrom. "n";
//---------------------------邮件格式------------------------------
//--文本格式
if($this->mailText != "" && $this->mailHTML == "") {
return mail($this->mailTo,$this->mailSubject,$this->mailText,$mailHeader);
}
//--html或text格式
else if($this->mailHTML != "") {
$bodyBoundary = $this->getRandomBoundary();
//$textHeader = $this->formatTextHeader();
$htmlHeader = $this->formatHTMLHeader();
//--设置 MIME-版本
$mailHeader .= "MIME-Version: 1.0n";
$mailHeader .= "Content-Type: multipart/alternative;n";
$mailHeader .= ' boundary="'.$bodyBoundary. '"';
$mailHeader .= "nnn";
//--添加邮件主体和边界
//$mailHeader .= "--".$bodyBoundary. "n";
//$mailHeader .= $textHeader;
//$mailHeader .= "--".$bodyBoundary. "n";
//--添加html标签
$mailHeader .= $htmlHeader;
$mailHeader .= "n--".$bodyBoundary. "--";
//--发送邮件
return mail($this->mailTo,$this->mailSubject, "",$mailHeader);
}
return false;
} //设置SOCKET 发送参数
function setSmtp($smtp_server, $smtp_port, $smtp_user = '', $smtp_pin = '') {
$this->smtp_server = $smtp_server;
$this->smtp_port = $smtp_port;
$this->smtp_user = $smtp_user;
$this->smtp_pin = $smtp_pin;
} //用SOCKET 方式发送,只支持文本方式
function sendSocket() {
// open socket
$fp = @fsockopen($this->smtp_server, $this->smtp_port, $errno, $errstr, 30);
if(!$fp) return false; @fputs($fp, 'Helo ,SOCKET-Mailer\r\n'); if(!empty($this->smtp_user)) {
@fputs($fp, 'AUTH LOGIN' . CRLF);
@fputs($fp, base64_encode($this->smtp_user) . "\r\n");
@fputs($fp, base64_encode($this->smtp_pin) . "\r\n");
} @fputs($fp, 'Mail from: ' . $this->mailFrom . "\r\n");
@fputs($fp, 'Rcpt to:' . $this->mailTo . "\r\n");
@fputs($fp, 'data\r\n'); @fputs($fp, 'To: ' . $this->mailTo . "\r\n");
@fputs($fp, 'From: '. $this->mailFrom . "\r\n");
@fputs($fp, 'subject: ' . $this->subject . "\r\n");
@fputs($fp, $this->mailText . "\r\n.\r\n"); @fputs($fp, 'Quit\r\n'); return true;
}
}
?>
你这个邮箱是对的吧?
收一下
一般都成功的。
要身份验证
1。找一个网络上免费提供的中转代理,或者自己拿一个扫描器扫一些开发25端口,并且没有验证的。
2。自己随便架设一个邮件服务器,比如装完Linux默认都有sendmail,当然,你也可以自己安装Qmail或者Postfix了。一般再本地来发那样就可以随意指定FROM地址了。这个我测试过,使用sendmail可以随便指定FROM地址,当然,你不要发送的太频繁,否则会被列入垃圾邮件服务器列表就惨了。
另外,采用这种方法的话,对sina不管用,因为sina具有反向DNS追踪,就是说,如果你的FROM地址跟你的发送IP不相符的话,它会拒收你的邮件,其他ISP的没有问题。
如果是那样只有找没有验证的或者自自己架邮件服务器了。
正如黑夜路人所述