php用 fsockopen smtp 发邮件遇到个问题

闲人三分 2014-12-21 02:47:10

$fp = fsockopen ( $smtp , $port , $errno , $errstr , 30 );
if (! $fp ) {
echo " $errstr ( $errno )<br />\n" ;
} else {

$re = fgets ( $fp , 256 );
$re_arr = explode(" ",$re);
//print_r($re_arr);
if ($re_arr[0]!=220) {
$state['state']=0;
$state['info'] ="连接到邮件服务器失败";
fclose ( $fp );
print_r($state);
exit();
return $state;

}


//send HELO sb
fwrite ( $fp , "HELO sb\r\n" );
$re = fgets ( $fp , 256 );
$re_arr = explode(" ",$re);
if ($re_arr[0]!=250) {
$state['state']=0;
$state['info'] ="邮件服务器无响应";
fclose ( $fp );
print_r($state);
exit();
return $state;

}


fwrite ( $fp , "auth login\r\n" );
$re = fgets ( $fp , 256 );
$re_arr = explode(" ",$re);
if ($re_arr[0]!=334) {
$state['state']=0;
$state['info'] ="邮件服务器拒绝登录";
fclose ( $fp );
print_r($state);
exit();
return $state;

}


//发送用户名
fwrite ( $fp , base64_encode($email_user)."\r\n" );
$re = fgets ( $fp , 256 );
// 这里遇到个问题 这个$re 有时返回是空的 没有任何内容
$re_arr = explode(" ",$re);
if ($re_arr[0]!=334) {
$state['state']=0;
$state['info'] ="用户名验证失败";
fclose ( $fp );
print_r($state);
exit();
return $state;

}

//发送密码
fwrite ( $fp , base64_encode($password)."\r\n" );
$re = fgets ( $fp , 256 );
$re_arr = explode(" ",$re);
if ($re_arr[0]!=235) {
$state['state']=0;
if ($re_arr[0]=="454") {
$state['info'] ="请开启smtp";
}else{
$state['info'] ="用户名或密码验证失败";
}

fclose ( $fp );
print_r($re_arr);
print_r($state);
exit();
return $state;

}

//mail from:<xxx@qq.com>
fwrite ( $fp , "mail from:<".$email.">\r\n" );
$re = fgets ( $fp , 256 );
$re_arr = explode(" ",$re);
if ($re_arr[0]!=250) {
$state['state']=0;
$state['info'] ="mail from 消息验证失败";
fclose ( $fp );
print_r($state);
exit();
return $state;

}

//rcpt to:<xxx@qq.com>
fwrite ( $fp , "rcpt to:<".$to.">\r\n" );
$re = fgets ( $fp , 256 );
$re_arr = explode(" ",$re);
if ($re_arr[0]!=250) {
$state['state']=0;
$state['info'] ="rcpt to 消息验证失败";
fclose ( $fp );
print_r($state);
exit();
return $state;

}

//data 命令
fwrite ( $fp , "data\r\n" );
$re = fgets ( $fp , 256 );
$re_arr = explode(" ",$re);
if ($re_arr[0]!=354) {
$state['state']=0;
$state['info'] ="邮件服务器拒绝";
fclose ( $fp );
print_r($state);
exit();
return $state;

}

// 发送数据
fwrite ( $fp , $mail_body );
$re = fgets ( $fp , 256 );
$re_arr = explode(" ",$re);
if ($re_arr[0]!=250) {
$state['state']=0;
$state['info'] ="邮件发送失败";
fclose ( $fp );
print_r($state);
exit();
return $state;

}else{
$state['state']=1;
$state['info'] ="邮件发送成功";
fclose ( $fp );
print_r($state);
exit();
return $state;

}



在 发送用户名 那里遇到个问题。经过反复测试后发现 fgets();有时返回值是空的,没有这个 “334 xxxxx” 这种内容。下面发送密码也是这样的 。在家里的电脑上没出现这种问题,在公司的电脑和在服务器上就出现了。代码写成这样主要是为了方便看。求高手帮忙解答。
...全文
95 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,873

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧