如果验证邮件是否发送成功 如何判断,邮件是否发送成功,如果发送失败,是否服务器端会返回什么值。请高手赐教下。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我不知道你是用哪中方式发送邮件的!前段时间我正好写了个以smtp方式发送邮件的类,你可以参考下,每个步骤都是有返回状态的:<?class BMail{ /** * <p>以SMTP的方式发送邮件</p> * * @return true,false - 是否成功发送bool * @param $mailcfg array - 邮件发送的配置 * @param $mail array - 邮件的内容 */ public static function send($mailcfg,$mail){ //无法连接上smtp服务器 if(!$fp = fsockopen($mailcfg['server'], $mailcfg['port'], $errno, $errstr, 50)) { //echo ('无法连接'); return false; } stream_set_blocking($fp, true); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != '220') { $error_msg = "$mailcfg[server]:$mailcfg[port] CONNECT - $lastmessage"; //echo ('连接错误'); return false; } //发送用户名 fputs($fp, ($mailcfg['auth'] ? 'EHLO' : 'HELO')." ".$mailcfg['auth_username']."\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) { $error_msg = "($mailcfg[server]:$mailcfg[port]) HELO/EHLO - $lastmessage"; //echo ('身份错误'); return false; } while(1) { if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) {break;} $lastmessage = fgets($fp, 512); } //登陆验证 if($mailcfg['auth']) { fputs($fp, "AUTH LOGIN\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 334) { //登陆模式错误 $error_msg = "($mailcfg[server]:$mailcfg[port]) AUTH LOGIN - $lastmessage"; //echo ('登陆模式错误'); return false; } fputs($fp, base64_encode($mailcfg['auth_username'])."\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 334) { //用户名不正确 $error_msg = "($mailcfg[server]:$mailcfg[port]) USERNAME - $lastmessage"; //echo ('用户名不正确'); return false; } fputs($fp, base64_encode($mailcfg['auth_password'])."\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 235) { //用户密码不正确 $error_msg = "($mailcfg[server]:$mailcfg[port]) PASSWORD - $lastmessage"; //echo ('用户密码不正确'); return false; } $email_from = $mailcfg['from']; } fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 250) { //发送地址错误 $error_msg = "($mailcfg[server]:$mailcfg[port]) MAIL FROM - $lastmessage"; //echo ('发送地址错误'); return false; } $email_to=$mail['to']; //循环对逐个收件人发送 foreach(explode(',', $email_to) as $touser) { $touser = trim($touser); if($touser) { fputs($fp, "RCPT TO: <$touser>\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 250) { //目标地址错误 $error_msg = "($mailcfg[server]:$mailcfg[port]) RCPT TO - $lastmessage"; //echo ('目标地址错误'); return false; } } } fputs($fp, "DATA\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 354) { $error_msg = "($mailcfg[server]:$mailcfg[port]) DATA - $lastmessage"; //echo ('数据错误'); return false; } $from = $mailcfg['from']; $fromname = $mailcfg['fromname']; $subject = $mail['subject']; $content = $mail['content']; $charset = $mailcfg['charset']; $headers = "MIME-Version: 1.0\r\nContent-type: $mailcfg[type]; charset=".$charset."\r\n\r\n";//头文件避免出现乱码 //构建邮件数据 $str="To: $email_to\r\nFrom: $fromname <$from>\r\nSubject: ".$subject."\r\n".$headers.$content."\r\n.\r\n"; fputs($fp, "$str\r\n"); fputs($fp, "QUIT\r\n"); return true; }}/********//以下为调用例子define("REG_SMTP_HOST", "smtp服务器地址如:smtp.163.com");//如果是ssl类型的smtp,改成'ssl://smtp.163.com' 即可define("REG_SMTP_USER", "你用来发送邮件的邮箱账号名如:xxxx");define("REG_SMTP_PASS", "邮箱密码");define("REG_SMTP_FROM", "你的邮箱全称如:[email protected]");require_once('b-mail.php');$mailcfg = array( 'server'=>REG_SMTP_HOST, 'port'=>'25',//smtp服务器端口 'auth'=>1, 'from'=>REG_SMTP_FROM, 'charset'=>'utf-8',//信件编码 'type'=>'text/html',//发送的类型是html格式 //'type'=>'text/plain',//发送的类型是文本格式 'fromname'=>'邮件发送方署名(本邮件来自csdn)', 'auth_username'=>REG_SMTP_USER, 'auth_password'=>REG_SMTP_PASS); $mail = array( 'to'=>'接收邮件的地址([email protected])', 'subject'=>'邮件标题', 'content'=>'我是要发送的邮件内容'); $rst = BMail::send($mailcfg,$mail);if(!$rst){ echo 'mail fail';}else{ echo 'mail succ!';}**********/?> 希望对你有所帮助! 如何在程序里面自动换ip地址呢 时间不对称 数组中的引用是怎么回事 crul问题 php支持指针不? 小数点后面怎么取两位? 请问在哪里下载Apache1.3.19 和 php4.0.6 请问打侠们,php是否有进行加密解密的软件 window如何升级php的curl eclipse for php 怎么自动加载工作区间的项目? 如何处理超大并发策略? 取刚保存记录的ID
<?
class BMail{ /**
* <p>以SMTP的方式发送邮件</p>
*
* @return true,false - 是否成功发送bool
* @param $mailcfg array - 邮件发送的配置
* @param $mail array - 邮件的内容
*/ public static function send($mailcfg,$mail){
//无法连接上smtp服务器
if(!$fp = fsockopen($mailcfg['server'], $mailcfg['port'], $errno, $errstr, 50)) {
//echo ('无法连接');
return false;
}
stream_set_blocking($fp, true);
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != '220') {
$error_msg = "$mailcfg[server]:$mailcfg[port] CONNECT - $lastmessage";
//echo ('连接错误');
return false;
}
//发送用户名
fputs($fp, ($mailcfg['auth'] ? 'EHLO' : 'HELO')." ".$mailcfg['auth_username']."\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
$error_msg = "($mailcfg[server]:$mailcfg[port]) HELO/EHLO - $lastmessage";
//echo ('身份错误');
return false;
}
while(1) {
if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) {break;}
$lastmessage = fgets($fp, 512);
}
//登陆验证
if($mailcfg['auth']) {
fputs($fp, "AUTH LOGIN\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 334) {
//登陆模式错误
$error_msg = "($mailcfg[server]:$mailcfg[port]) AUTH LOGIN - $lastmessage";
//echo ('登陆模式错误');
return false;
}
fputs($fp, base64_encode($mailcfg['auth_username'])."\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 334) {
//用户名不正确
$error_msg = "($mailcfg[server]:$mailcfg[port]) USERNAME - $lastmessage";
//echo ('用户名不正确');
return false;
}
fputs($fp, base64_encode($mailcfg['auth_password'])."\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 235) {
//用户密码不正确
$error_msg = "($mailcfg[server]:$mailcfg[port]) PASSWORD - $lastmessage";
//echo ('用户密码不正确');
return false;
}
$email_from = $mailcfg['from'];
}
fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
//发送地址错误
$error_msg = "($mailcfg[server]:$mailcfg[port]) MAIL FROM - $lastmessage";
//echo ('发送地址错误');
return false;
}
$email_to=$mail['to'];
//循环对逐个收件人发送
foreach(explode(',', $email_to) as $touser) {
$touser = trim($touser);
if($touser) {
fputs($fp, "RCPT TO: <$touser>\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
//目标地址错误
$error_msg = "($mailcfg[server]:$mailcfg[port]) RCPT TO - $lastmessage";
//echo ('目标地址错误');
return false;
}
}
}
fputs($fp, "DATA\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 354) {
$error_msg = "($mailcfg[server]:$mailcfg[port]) DATA - $lastmessage";
//echo ('数据错误');
return false;
}
$from = $mailcfg['from'];
$fromname = $mailcfg['fromname'];
$subject = $mail['subject'];
$content = $mail['content'];
$charset = $mailcfg['charset'];
$headers = "MIME-Version: 1.0\r\nContent-type: $mailcfg[type]; charset=".$charset."\r\n\r\n";//头文件避免出现乱码
//构建邮件数据
$str="To: $email_to\r\nFrom: $fromname <$from>\r\nSubject: ".$subject."\r\n".$headers.$content."\r\n.\r\n";
fputs($fp, "$str\r\n");
fputs($fp, "QUIT\r\n");
return true;
}}/********
//以下为调用例子
define("REG_SMTP_HOST", "smtp服务器地址如:smtp.163.com");//如果是ssl类型的smtp,改成'ssl://smtp.163.com' 即可
define("REG_SMTP_USER", "你用来发送邮件的邮箱账号名如:xxxx");
define("REG_SMTP_PASS", "邮箱密码");
define("REG_SMTP_FROM", "你的邮箱全称如:[email protected]");require_once('b-mail.php');$mailcfg = array(
'server'=>REG_SMTP_HOST,
'port'=>'25',//smtp服务器端口
'auth'=>1,
'from'=>REG_SMTP_FROM,
'charset'=>'utf-8',//信件编码
'type'=>'text/html',//发送的类型是html格式
//'type'=>'text/plain',//发送的类型是文本格式
'fromname'=>'邮件发送方署名(本邮件来自csdn)',
'auth_username'=>REG_SMTP_USER,
'auth_password'=>REG_SMTP_PASS);
$mail = array(
'to'=>'接收邮件的地址([email protected])',
'subject'=>'邮件标题',
'content'=>'我是要发送的邮件内容');
$rst = BMail::send($mailcfg,$mail);
if(!$rst){
echo 'mail fail';
}else{
echo 'mail succ!';
}
**********/
?>
希望对你有所帮助!