PHP中发送邮件的代码

RYL80812912928266 2006-10-30 05:09:09
在php中发送邮件,如何利用Mail()发送邮件,为什么总是报Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\AppServ\www\AKSCI\simplemail.php on line 31
An error occurred while sending the e-mail!的错误,我弄了一天了,都解决不了啊?谁有发送成功的邮件代码,供我参考一下啊,急用啊!
...全文
2190 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
an9ryfr09 2006-10-30
  • 打赏
  • 举报
回复
class MailCls{
private $mEmails;

function setEmailInfo( $emails ){
if( is_array( $emails ) ){
$this->mEmails['email_to'] = $emails['email_to'];
#对邮件标题进行处理
if( isset( $emails['email_subject'] ) || !empty($emails['email_subject'])) {
eval("$email_subject = "".$emails['email_subject']."";");
$email_subject = str_replace(" ", '', str_replace(" ", '', $emails['email_subject'] ));
$this->mEmails['email_subject'] = $emails['email_subject'];
}

#对邮件内容进行处理
if( isset( $emails['email_message']) || !empty($emails['email_message'])) {
eval("$email_message = "".$emails['email_message']."";");
$emails['email_message'] = str_replace(" .", " ..", str_replace(" ", " ", str_replace(" ", " ", str_replace(" ", " ", str_replace(" ", " ", $emails['email_message'])))));
$this->mEmails['email_message'] = $emails['email_message'];
}

#对邮件来源进行处理
if( isset($emails['email_from']) || !empty($emails['email_from']))
$this->mEmails['email_from'] = $emails['email_from'];
else
$this->mEmails['email_from'] = '<'.$_SERVER['SERVER_ADMIN'].'>';
}
}

function getEmails( $elements ){
if( isset( $elements ) || !empty( $elements ))
return $this->mEmails[$elements];
else
return $this->mEmails;
}

function __destruct(){
unset( $this );
}
}


class sendMail extends MailCls{
private $mMailCfg;

function __construct( $mailcfg ){
if(is_array( $mailcfg ))
$this->mMailCfg = $mailcfg;
}

#发送邮件函数
function sendMails( ){
if(!$fp = fsockopen($this->mMailCfg['server'], $this->mMailCfg['port'], $errno, $errstr, 30)) {
errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) CONNECT - Unable to connect to the SMTP server, please check your "mail_config.php".", 0);
}
stream_set_blocking($fp, true);

$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != '220') {
errorlog('SMTP', "$this->mMailCfg[server]:$this->mMailCfg[port] CONNECT - $lastmessage", 0);
}

fputs($fp, ($this->mMailCfg['auth'] ? 'EHLO' : 'HELO')." hoodong ");
$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) HELO/EHLO - $lastmessage", 0);
}

while(1) {
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) {
break;
}
}

if($this->mMailCfg['auth']) {
fputs($fp, "AUTH LOGIN ");
$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 334) {
errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) AUTH LOGIN - $lastmessage", 0);
}

fputs($fp, base64_encode($this->mMailCfg['auth_username'])." ");
$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 334) {
errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) USERNAME - $lastmessage", 0);
}

fputs($fp, base64_encode($this->mMailCfg['auth_password'])." ");
$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 235) {
errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) PASSWORD - $lastmessage", 0);
}

$email_from = $this->mMailCfg['from'];
}

fputs($fp, "MAIL FROM: ".preg_replace("/.*<(.+?)>.*/", "\1", $this->getEmails('email_from'))." ");
$lastmessage = fgets($fp, 512);

if(substr($lastmessage, 0, 3) != 250) {
fputs($fp, "MAIL FROM: <".preg_replace("/.*<(.+?)>.*/", "\1", $this->getEmails('email_from'))."> ");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 250) {
errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) MAIL FROM - $lastmessage", 0);
}
}

foreach(explode(',', $this->getEmails('email_to')) as $to_user) {
$to_user = trim( $to_user );
if( $to_user ) {
fputs( $fp, "RCPT TO: $to_user " );
$lastmessage = fgets( $fp, 512 );
if(substr($lastmessage, 0, 3) != 250) {
fputs($fp, "RCPT TO: <$to_user> ");
$lastmessage = fgets($fp, 512);
errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) RCPT TO - $lastmessage", 0);
}
}
}

fputs($fp, "DATA ");
$lastmessage = fgets($fp, 512);
if(substr($lastmessage, 0, 3) != 354) {
errorlog('SMTP', "($this->mMailCfg[server]:$this->mMailCfg[port]) DATA - $lastmessage", 0);
}

fputs($fp, "To: ".$this->getEmails('email_to')." From: ".$this->getEmails('email_from')." Subject: ".str_replace(" ", ' ', $this->getEmails('email_subject'))." ".$this->getEmails('email_message')." . ");
fputs($fp, "QUIT ");
}

function getEmailCfg( $elements ){
if(isset( $elements ) || !empty( $elements ))
return $this->mMailCfg[$elements];
else
return $this->mMailCfg;
}

function __destruct(){
unset($fp);
unset($this);
}
}

/*@调用演示.请设置下面信息@*/
#######################################################################

$emails = array(
'email_to' => '123@gmail.com', #收件人地址
'email_subject' => 'test', #邮件标题
'email_message' => 'ksadasdasdasdsadasfafdasfdsaff', #邮件正文
'email_from' => ' <123@gmail.com>', #邮件来源
);


##########################################################################
$mailcfg['server'] = 'smtp.gmail.com'; #smtp服务器地址,这只是例子,你还是需要找一个smtp服务器,比如你公司的就可以
$mailcfg['port'] = '25'; #smtp端口
$mailcfg['auth'] = 1; #显示作者
$mailcfg['from'] = 'gmail <123@gmail.com>'; #发件人地址
$mailcfg['auth_username'] = '123@hotmail.com'; #发件人邮箱
$mailcfg['auth_password'] = '1234567'; #发件人邮箱密码

#调用:


$sm = new sendMail( $mailcfg );
$sm->setEmailInfo( $emails );
$sm->sendMails();
neverdead 2006-10-30
  • 打赏
  • 举报
回复
//不需要修改php.ini发邮件,这个是smtp不需要验证情况下用的,如果需要验证的话,要去找个php 发邮件类
ini_set('SMTP', '你的smtp服务器,比如smtp.qq.com');
ini_set('smtp_port', 25);
ini_set('sendmail_from', '你的邮箱');
if (mail($emailto, $subject, $message, $headers)) {
//成功
} else {
//失败
}
RYL80812912928266 2006-10-30
  • 打赏
  • 举报
回复
多谢各位的帮忙啊,但我找了半天用socket发送邮件的例子,没弄成啊,各位有没有做过这方面的,有的话给我发一下你们测试成功的例子啊,快急死我了,弄了两天,都没成功,老板急的要啊,如果大家有的话,给我发到我的邮箱里:ryl800914@126.com 多谢多谢各位的帮忙了!
an9ryfr09 2006-10-30
  • 打赏
  • 举报
回复
看错误提示,你的机器没有安装smtp服务器,你可以找一个不需要验证免费的smtp服务器。或者,找个用socket发邮件的类,不要用mail
marse 2006-10-30
  • 打赏
  • 举报
回复
估计这个不是代码的问题,是你的php没有装发邮件的插件,或者没有设置好之类的
iasky 2006-10-30
  • 打赏
  • 举报
回复
mail是调用php.ini中配置的smtp

你可以用网上其他的代码,不用mail函数

21,886

社区成员

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

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