请教下各位大大,php中如何快速循环群发邮件呢?
我目前用的mail()函数,感觉不好用,而且感觉这个邮件地址不能太多,
一次copy了100个可能会出问题.
目前php中发送邮件最好的方法是什么呢?
能不能给个例子,讲解下.
请指点,不胜感激. 多谢多谢

解决方案 »

  1.   

    给你个传送门~里面有我之前写的现成的smtp邮件发送类~~,发送多人的话用,号分隔联系人地址!
    http://topic.csdn.net/u/20101105/15/ac661510-426c-41d1-8bdf-f7c56988e6b4.html
    希望对你有所帮助!
      

  2.   

    这是我用的类,你可以借鉴
    <?php
    //$Mail->set("發件郵箱SMTP服務器地址", "發件郵箱登陸名", "發件郵箱登錄密碼");
    //Echo $Mail->send("收件人mail(多个地址逗号隔开)","邮件标题","邮件内容(可包含HTML)","发信人mail");Class Sendmail{
    Function __construct(){
    $this->set();
    $this->auth = 1;
    } Function set($server=YJ_SysMail_Smtp,$user="",$password=YJ_SysMail_Pass,$port=YJ_SysMailPort,$type=1,$mailusername=0){
    $user=($user=="")?SubStr(YJ_SysMail,0,Stripos(YJ_SysMail,"@")):$user; $this->type = $type;
    $this->server = $server;
    $this->port = $port;
    $this->user = $user;
    $this->password = $password;
    $this->mailusername = $mailusername;
    } Function Send($email_to, $email_subject, $email_message, $email_from = ''){
    $email_subject = '=?utf-8?B?'.base64_encode(str_replace("\r", '', $email_subject)).'?=';
    $email_message = 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 = $email_from == '' ? '=?utf-8?B?'.base64_encode(YJ_SysName)."?= <".YJ_SysMail.">" : (preg_match('/^(.+?) \<(.+?)\>$/',$email_from, $from) ? '=?utf-8?B?'.base64_encode($from[1])."?= <$from[2]>" : $email_from);
    $emails = explode(',', $email_to);
    Foreach($emails as $touser){
    $tousers[] = preg_match('/^(.+?) \<(.+?)\>$/',$touser, $to) ? ($this->mailusername ? '=?utf-8?B?'.base64_encode($to[1])."?= <$to[2]>" : $to[2]) : $touser;
    }
    $email_to = implode(',', $tousers);
    $headers = "MIME-Version: 1.0\r\nTo: {$email_to}\r\nFrom: {$email_from}<{$email_from}>\r\nX-Priority: 3\r\nX-Mailer: egLive \r\nDate: ".date("r")."\r\nContent-type: text/html; charset=UTF-8\r\n"; IF($this->type == 1){
    Return $this->smtp($email_to, $email_subject, $email_message, $email_from, $headers);
    }ElseIF($this->type == 2){
    Return @mail($email_to, $email_subject, $email_message, $headers);
    }Else{
    ini_set('SMTP', $this->server);
    ini_set('smtp_port', $this->port);
    ini_set('sendmail_from', $email_from);
    Return @mail($email_to, $email_subject, $email_message, $headers);
    }
    } Function smtp($email_to, $email_subject, $email_message, $email_from = '', $headers = ''){
    IF(!$fp = @fsockopen($this->server, $this->port, $errno, $errstr, 10)){
    $this->errorlog('SMTP', "($this->server:$this->port) CONNECT - Unable to connect to the SMTP server", 0);
    return false;
    }
    stream_set_blocking($fp, true);
    $lastmessage = fgets($fp, 512);
    IF(substr($lastmessage, 0, 3) != '220'){
    $this->errorlog('SMTP', "$this->server:$this->port CONNECT - $lastmessage", 0);
    return false;
    }
    fputs($fp, ($this->auth ? 'EHLO' : 'HELO')." Phpcms\r\n");
    $lastmessage = fgets($fp, 512);
    IF(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250){
    $this->errorlog('SMTP', "($this->server:$this->port) HELO/EHLO - $lastmessage", 0);
    return false;
    }
    While(1){
    IF(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)){
    break;
    }
    $lastmessage = fgets($fp, 512);
    }
    fputs($fp, "AUTH LOGIN\r\n");
    $lastmessage = fgets($fp, 512);
    IF(substr($lastmessage, 0, 3) != 334){
    $this->errorlog('SMTP', "($this->server:$this->port) AUTH LOGIN - $lastmessage", 0);
    return false;
    }
    fputs($fp, base64_encode($this->user)."\r\n");
    $lastmessage = fgets($fp, 512);
    IF(substr($lastmessage, 0, 3) != 334){
    $this->errorlog('SMTP', "($this->server:$this->port) USERNAME - $lastmessage", 0);
    return false;
    }
    fputs($fp, base64_encode($this->password)."\r\n");
    $lastmessage = fgets($fp, 512);
    IF(substr($lastmessage, 0, 3) != 235){
    $this->errorlog('SMTP', "($this->server:$this->port) PASSWORD - $lastmessage", 0);
    return false;
    }
    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){
    $this->errorlog('SMTP', "($this->server:$this->port) MAIL FROM - $lastmessage", 0);
    return false;
    }
    }
    $email_tos = array();
    $emails = explode(',', $email_to);
    Foreach($emails as $touser){
    $touser = trim($touser);
    IF($touser){
    fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">\r\n");
    $lastmessage = fgets($fp, 512);
    IF(substr($lastmessage, 0, 3) != 250){
    fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">\r\n");
    $lastmessage = fgets($fp, 512);
    $this->errorlog('SMTP', "($this->server:$this->port) RCPT TO - $lastmessage", 0);
    return false;
    }
    }
    }
    fputs($fp, "DATA\r\n");
    $lastmessage = fgets($fp, 512);
    IF(substr($lastmessage, 0, 3) != 354){
    $this->errorlog('SMTP', "($this->server:$this->port) DATA - $lastmessage", 0);
    }
    $headers .= 'Message-ID: <'.gmdate('YmdHs').'.'.substr(md5($email_message.microtime()), 0, 6).rand(100000, 999999).'@'.$_SERVER['HTTP_HOST'].">\r\n";
    fputs($fp, "Date: ".gmdate('r')."\r\n");
    fputs($fp, "To: ".$email_to."\r\n");
    fputs($fp, "Subject: ".$email_subject."\r\n");
    fputs($fp, $headers."\r\n");
    fputs($fp, "\r\n\r\n");
    fputs($fp, "$email_message\r\n.\r\n");
    $lastmessage = fgets($fp, 512);
    fputs($fp, "QUIT\r\n");
    return true;
    } Function errorlog($type, $message, $is){
    $this->error[] = array($type, $message, $is);
    } Function Mailmess($Mess=""){
    Return "<style>*{font-family:Verdana;font-size:13px;}</style>
    <table cellpadding='5' cellspacing='1' border='0' width='750' style='background-color:#fff;border:1px solid #3b5998;padding:15px;'>
    <tr><td style='background:#3b5998;color:#fff;font-weight:bold;font-size:14px;'>".YJ_SysCnname." - ".YJ_SysName."</td></tr>
    <tr><td>{$Mess}</td></tr>
    <tr><td style='border-top:1px dashed gray;'><span style='color:gray;'>該郵件由軟體<a href='http://www.7di.net' target='_blank'>".YJ_SysName."</a>自動發送,如需技術支持請發信至".YJ_SysMail.".</span></td></tr>
    </table>";
    }
    }
    ?>
      

  3.   

    PHPMailer类不错支持多语言,而且支持Gmail邮件
      

  4.   

    PHP100的课程里好像有一个实例是讲email的
      

  5.   

    我给你个
    php发送邮件http://www.111cn.net/search.php?keyword=php%B7%A2%CB%CD%D3%CA%BC%FE&p=1
      

  6.   

    真的非常非常谢谢各位, 之前一直用的mail函数发送邮件,感觉真是不好用.
    我先好好看看各位给的, 有不清楚的再向各位请教,多谢各位了.
      

  7.   

    兄臺,有何感言, phpmailer?! 也說來聽聽...
    Tks.
      

  8.   

    我一般使用 phpmailer 
    这些有专门的人写好的,直接拿来使用就行了