一个关于smtp的问题 http://blog.csdn.net/kingerq/archive/2005/08/19/458966.aspx这个就可以。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知道smtp.163.com是如何判断的,我没有那里的油箱。通常$from是可以任意指定的,并没有任何问题!当然你必须用正确的用正确的油箱地址发信 哦?from可以任意指定?以下是我使用smtp.tom.com的DEBUG信息 可以看出好像出错是因为from的地址不是tom的用户-----------------------------------------------------Trying to smtp.tom.com:25220 Coremail SMTP(Anti Spam) System (163net[040302])Connected to relay host smtp.tom.com> HELO localhost250 bjapp5> AUTH LOGIN aWNlc3ljQHRvbS5jb20=334 UGFzc3dvcmQ6> Zm9ybWF0235 Authentication successful> MAIL FROM:<[email protected]>550 <[email protected]>: Invalid UserError: 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 <?phpclass 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; }}?> [email protected]你这个邮箱是对的吧?收一下 你用126.com的邮箱或者21cn的邮箱发,一般都成功的。要身份验证 发是能发成功,我想改变From的email... 应该是tom的限制,大概是为了防止把位于tom的邮件服务器作为SPAM发送点并伪装一个良好的from。 干吗,你想发垃圾邮件呀,呵呵~~~ -_-#这个跟ISP的邮件服务器有关,比如163的是使用coremail的邮件服务器,那么它会识别你的FROM是否是本地的服务,否则你随便指定FROM,那么以后别人都把163的邮箱的IP当作垃圾邮件服务器,拿它不是惨了。解决办法:1。找一个网络上免费提供的中转代理,或者自己拿一个扫描器扫一些开发25端口,并且没有验证的。2。自己随便架设一个邮件服务器,比如装完Linux默认都有sendmail,当然,你也可以自己安装Qmail或者Postfix了。一般再本地来发那样就可以随意指定FROM地址了。这个我测试过,使用sendmail可以随便指定FROM地址,当然,你不要发送的太频繁,否则会被列入垃圾邮件服务器列表就惨了。另外,采用这种方法的话,对sina不管用,因为sina具有反向DNS追踪,就是说,如果你的FROM地址跟你的发送IP不相符的话,它会拒收你的邮件,其他ISP的没有问题。 多谢黑夜路人,难道SMTP有身份验证的都会检查FROM是否为本地的用户?如果是那样只有找没有验证的或者自自己架邮件服务器了。 sina/hotmail应该都需要通过邮件服务器发送才可以顺利接受正如黑夜路人所述 通过url传递select选中的值 亲,给个答案吧 菜鸟求个代码 多表搜索的实现 表单提交刷新后,怎么让input里的值不变呢?(续-中文问题) Discuz 5 显示空白页 新闻系统的外部链接问题 iis+apache的path_info问题 php如何生成静态页面 再提文件锁定。 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的没有问题。
如果是那样只有找没有验证的或者自自己架邮件服务器了。
正如黑夜路人所述