php mail类使用问题 提示很清楚,不能连接smtp服务器.尝试,用outlook测试一下,看能不能用. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 提示很清楚,不能连接smtp服务器.尝试,用outlook测试一下,看能不能用. 试了outlook,很奇怪的是可以显示收到的新邮件,但是发不出邮件。是不是yahoo对smtp的使用是有条件的??? 不用那么麻烦,我给你一个函数,简便易用,可以群发:函数调用:send_mail($email_to, $email_subject, $email_message);$email_to 收件邮箱 多个邮箱使用半角“,”隔开,例如:[email protected],[email protected],[email protected]$email_subject 邮件标题$email_message 邮件正文function send_mail($email_to, $email_subject, $email_message) { $mailcfg['server'] = 'mail.ww8ww.cn'; //邮件服务器地址 $mailcfg['port'] = '25'; //邮件服务器端口 $mailcfg['auth'] = 1; $mailcfg['auth_username'] = '[email protected]'; //登录名 $mailcfg['auth_password'] = '密码'; //登录密码 $charset = "gbk"; //字符集 $fromname = "天下网"; //发件人名 $frommail = "[email protected]"; //发件人邮箱 $email_subject = '=?'.$charset.'?B?'.base64_encode(str_replace("\r", '', str_replace("\n", '', $email_subject))).'?='; $email_message = chunk_split(base64_encode(str_replace("\r\n.", " \r\n..", str_replace("\n", "\r\n", str_replace("\r", "\n", str_replace("\r\n", "\n", str_replace("\n\r", "\r", $email_message))))))); $email_from = '=?'.$charset.'?B?'.base64_encode($fromname)."?= <$frommail>"; $headers = "From: $email_from\nMIME-Version: 1.0\nContent-type: text/plain; charset=$charset\nContent-Transfer-Encoding: base64\n"; $nowdate = date("20ynjHis"); //服务器时间 if(!$fp = fsockopen($mailcfg['server'], $mailcfg['port'], $errno, $errstr, 30)) { return "Unable to connect to the SMTP server"; exit(); } stream_set_blocking($fp, true); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != '220') { return "CONNECT".$lastmessage; exit(); } fputs($fp, ($mailcfg['auth'] ? 'EHLO' : 'HELO')." discuz\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) { return "HELO/EHLO".$lastmessage; exit(); } 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) { return "AUTH LOGIN".$lastmessage; exit(); } fputs($fp, base64_encode($mailcfg['auth_username'])."\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 334) { return "USERNAME".$lastmessage; exit(); } fputs($fp, base64_encode($mailcfg['auth_password'])."\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 235) { return "PASSWORD".$lastmessage; exit(); }// $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) { fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 250) { return "MAIL FROM".$lastmessage; exit(); } } 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) { fputs($fp, "RCPT TO: <$touser>\r\n"); $lastmessage = fgets($fp, 512); return "RCPT TO".$lastmessage; exit(); } } } //本段设置群发邮件时显示收件人内容,删除本段则显示所有收件邮箱---began list($email_to1,$email_to2)=split(",",$email_to); if ($email_to2){ $email_to = '天下网会员'; } //本段设置群发邮件时显示收件人内容,删除本段则显示所有收件邮箱---over fputs($fp, "DATA\r\n"); $lastmessage = fgets($fp, 512); if(substr($lastmessage, 0, 3) != 354) { return "DATA".$lastmessage; exit(); } fputs($fp, "To: $email_to\r\nSubject: $email_subject\r\n$headers\r\n$email_message\r\n.\r\n"); sleep(1); fputs($fp, "QUIT\r\n"); } 用类是因为可以有更多的功能像模拟outlook发送等等直接传送很多时候只会被送到垃圾邮件 =.= 呵呵,哪就说明你这个发送的邮件服务器是不能正常工作的.outlook都不能发送, phpmailer当然也不可以了. ThinkPHP的分组配置+Apache Alias的问题 哪儿可以下载到支持php开发语言的指纹开发包 提请WEB版版主注意!!!!!!!!!!!!! 有不有学习PHP的很好的书? 请问imagecreatefromjpet是哪个函数库的函数? 关闭浏览器后。。。 怎样返回当前行在整个表中的具体位置(应该很容易 请问各位:<?php echo $PHP_SELF; ?> 的结果应该是什么? 在Unix系统Apache服务器下,如何正确显示php的包含文件 PHP用单一入口加载HTML文件不能显示框架? array_rand()效率 问题! 权限管理问题,感觉矛盾!
尝试,用outlook测试一下,看能不能用.
是不是yahoo对smtp的使用是有条件的???
函数调用:send_mail($email_to, $email_subject, $email_message);
$email_to 收件邮箱 多个邮箱使用半角“,”隔开,例如:[email protected],[email protected],[email protected]
$email_subject 邮件标题
$email_message 邮件正文
function send_mail($email_to, $email_subject, $email_message) {
$mailcfg['server'] = 'mail.ww8ww.cn'; //邮件服务器地址
$mailcfg['port'] = '25'; //邮件服务器端口
$mailcfg['auth'] = 1;
$mailcfg['auth_username'] = '[email protected]'; //登录名
$mailcfg['auth_password'] = '密码'; //登录密码
$charset = "gbk"; //字符集
$fromname = "天下网"; //发件人名
$frommail = "[email protected]"; //发件人邮箱 $email_subject = '=?'.$charset.'?B?'.base64_encode(str_replace("\r", '', str_replace("\n", '', $email_subject))).'?=';
$email_message = chunk_split(base64_encode(str_replace("\r\n.", " \r\n..", str_replace("\n", "\r\n", str_replace("\r", "\n", str_replace("\r\n", "\n", str_replace("\n\r", "\r", $email_message)))))));
$email_from = '=?'.$charset.'?B?'.base64_encode($fromname)."?= <$frommail>"; $headers = "From: $email_from\nMIME-Version: 1.0\nContent-type: text/plain; charset=$charset\nContent-Transfer-Encoding: base64\n";
$nowdate = date("20ynjHis"); //服务器时间
if(!$fp = fsockopen($mailcfg['server'], $mailcfg['port'], $errno, $errstr, 30)) {
return "Unable to connect to the SMTP server";
exit();
}
stream_set_blocking($fp, true); $lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != '220') {
return "CONNECT".$lastmessage;
exit();
} fputs($fp, ($mailcfg['auth'] ? 'EHLO' : 'HELO')." discuz\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
return "HELO/EHLO".$lastmessage;
exit();
} 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) {
return "AUTH LOGIN".$lastmessage;
exit();
} fputs($fp, base64_encode($mailcfg['auth_username'])."\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 334) {
return "USERNAME".$lastmessage;
exit();
} fputs($fp, base64_encode($mailcfg['auth_password'])."\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 235) {
return "PASSWORD".$lastmessage;
exit();
}// $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) {
fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
return "MAIL FROM".$lastmessage;
exit();
}
} 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) {
fputs($fp, "RCPT TO: <$touser>\r\n");
$lastmessage = fgets($fp, 512);
return "RCPT TO".$lastmessage;
exit();
}
}
}
//本段设置群发邮件时显示收件人内容,删除本段则显示所有收件邮箱---began
list($email_to1,$email_to2)=split(",",$email_to);
if ($email_to2){
$email_to = '天下网会员';
}
//本段设置群发邮件时显示收件人内容,删除本段则显示所有收件邮箱---over
fputs($fp, "DATA\r\n");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 354) {
return "DATA".$lastmessage;
exit();
} fputs($fp, "To: $email_to\r\nSubject: $email_subject\r\n$headers\r\n$email_message\r\n.\r\n");
sleep(1);
fputs($fp, "QUIT\r\n");
}
像模拟outlook发送等等直接传送很多时候只会被送到垃圾邮件 =.=
outlook都不能发送, phpmailer当然也不可以了.