php 邮件类

编写一个用php socket 发送邮件的类,简单好用,当用到php程序发送邮件时,

而在163服务器中,可以在RCPT命令中还可以验证163邮箱是否存在,还有很多用处,

我现在暂时还没想到。

记录下,有需要的朋友可以参考下

<?php
class mail {

/**
    * 这些即可发送email
    */
    public $host;
    public $port;
    public $user;
    public $password;
    public $mail_form;
    public $rcpt;

public $body;

/**
    * 附属在 header 中信息
    */
    public $to_name;
    public $from_name;
    public $subject;
    public $html;
 
    public $connection;

public $msg = array();

// 进行参数初始化
    public function __construct($conf, $rcpt, $header, $body, $html = true) {

try {

$this->host = $conf[‘host‘];
            $this->port = $conf[‘port‘];
            $this->user = $conf[‘user‘];
            $this->password = $conf[‘password‘];

$this->rcpt = $rcpt;

$this->to_name   = $header[‘to_name‘];
            $this->from_name = $header[‘from_name‘];
            $this->subject   = $header[‘subject‘];
            $this->html      = $html;

$this->body = base64_encode($body);

} catch (Exception $e) {
            throw new Exception($e->getMessage());            
        }

}

public function connect() {
        $this->connection = @fsockopen($this->host, ‘25‘, $errno, $errstr, 10);
        if (!$this->connection) {            
            throw new Exception(‘connect failed!‘);
        }
        $greet = $this->callback_code();
        
    }

public function helo() {
        if($this->is_connect() &&
            $this->send_data(‘HELO ‘ . $this->host) &&
            $this->callback_code() == 250
            ) {
             return true;
        } else {
            throw new Exception($this->get_callback_msg_lastest());
            
        }
    }

public function send_data($cmd) {
        if (is_resource($this->connection)) {
            return @fwrite($this->connection, $cmd."\r\n", strlen($cmd) + 2);
        }
    }

public function auth(){
        if ($this->is_connect() &&
            $this->send_data(‘AUTH LOGIN‘) && $this->callback_code() == 334 &&
            $this->send_data(base64_encode($this->user)) && $this->callback_code() == 334 &&
            $this->send_data(base64_encode($this->password)) && $this->callback_code() == 235 ) {    
            return true;
        } else {
            throw new Exception($this->get_callback_msg_lastest());            
        }
    }

public function Mail() {
        
        if ($this->is_connect() &&
            $this->send_data("MAIL FROM:<$this->user>") &&
            $this->callback_code() == 250
            ) {
            return true;
        } else  {
           throw new Exception($this->get_callback_msg_lastest());            
        }
   }

public function is_connect() {
        return is_resource($this->connection);
    }

public function callback_code() {
        if ($this->is_connect()) {
            $msg = fgets($this->connection);
            if (!empty($msg)) {
                $code = substr($msg, 0, strpos($msg, ‘ ‘));
            } else {
                return ‘‘;
            }
            $this->msg[] = $msg;
            return $code;
        }
    }

public function get_callback_msg_lastest() {
        return end($this->msg);
    }

public function rcpt($rcpt) {
        if ($this->is_connect() &&
            $this->send_data("RCPT TO:<$rcpt>") &&
            $this->callback_code() == 250
            ) {
            return true;
        } else  {
            throw new Exception($this->get_callback_msg_lastest());            
        }
    }

public function data() {
        if ($this->is_connect() &&
            $this->send_data(‘DATA‘) &&
            $this->callback_code() == 354) {
            return true;
        } else {
            throw new Exception($this->get_callback_msg_lastest());
        }
    }

public function send_mail() {

try {
            
            $this->connect();
            $this->helo();
            $this->auth();
            $this->Mail();

if (is_array($this->rcpt)) {
                foreach ($this->rcpt as $rcpt) {
                    $this->rcpt($rcpt);
                }

} else {
                $this->rcpt($this->rcpt);
            }

$this->data();

$header = str_replace("\r\n" . ‘.‘, "\r\n" . ‘..‘, trim(implode("\r\n", $this->get_header())));
            $body   = str_replace("\r\n" . ‘.‘, "\r\n" . ‘..‘, $this->body);
            $body   = substr($body, 0, 1) == ‘.‘ ? ‘.‘ . $body : $body;

$this->send_data($header);
            $this->send_data(‘‘);
            $this->send_data($body);            
            $this->send_data(‘.‘);

if ($this->callback_code()  != 250) {
                throw new Exception(‘send mail falied!‘);                
            }
            return true;
        } catch (Exception $e) {
            throw new Exception($e->getMessage());            
        }

}

//只能检测同一邮件服务器上email address
    public  function is_email_exist() {

}

public function get_header() {

$header = array();
        $content_type = $this->html ? ‘text/html;‘ : ‘text/plain;‘ ;

$headers [] = ‘Date: ‘ . gmdate(‘D, j M Y H:i:s‘) . ‘ +0000‘;
        $to_mail = is_array($this->rcpt) ? implode(‘,‘, $this->rcpt) : $this->rcpt;
        $headers [] = ‘To: "‘ . ‘=? utf8?B?‘ . base64_encode($this->to_name) . ‘?=‘ . ‘" <‘ . $to_mail . ‘>‘;
        $headers [] = ‘From: "‘ . ‘=?utf8?B?‘ . base64_encode($this->from_name) . ‘?=‘ . ‘" <‘ . $this->user . ‘>‘;
        $headers [] = ‘Subject: ‘ . ‘=?utf8?B?‘ . base64_encode($this->subject) . ‘?=‘;
        $headers [] = ‘Content-Type:‘.$content_type . ‘ charset=utf8; format=flowed‘;
        $headers [] = ‘Content-Transfer-Encoding: base64‘;
        $headers [] = ‘Content-Disposition: inline‘;

return $headers;
    }

}

/**
* 用函数封装类
*/
function send_mail($conf, $rcpt, $header, $body) {
    
    $mail = new mail($conf, $rcpt, $header, $body);

if ($mail->send_mail()) {
        echo ‘send email successfully!‘;
    } else {
        echo ‘falied!‘;
    }

}

$conf = array(
    ‘host‘     => ‘smtp.163.com‘,
    ‘port‘     => ‘25‘,
    ‘user‘     => ‘[email protected]‘,
    ‘password‘ => ‘zeiwei123‘,
     );

$rcpt = array(
    ‘[email protected]‘,
    ‘[email protected]‘
    );

$header = array(
    ‘to_name‘   => ‘willstang‘,
    ‘from_name‘ => ‘sinawill‘,
    ‘subject‘   => ‘tst of reo ‘,
    );

$body = ‘<h1 style="color:red;">sfsfsd</h1>‘;

$mail = new mail($conf, $rcpt, $header, $body);

$mail->send_mail();

echo ‘<pre>‘;
print_r($mail->msg);

熟悉邮件发送的过程,它的stmp协议,

还有一些发送的细节,如:发送的内容分为两部分, 一部分在头部,另一部分是email的正文,

时间: 2024-10-12 02:44:52

php 邮件类的相关文章

c++封装的发邮件类CSendMail

项目需要做发邮件的功能,在网上找了一下代码,比较出名的SMailer编译不过(把那个Base64的encode拉到MailSender中实现就能过,但我搞不懂原来出错的原因,就不想用),另外找到了一个CSendMail的实现类,可以用,但代码的风格不好,使用起来也不方便,所以我就参考(chao)这两个类,实现了一个比较简单的发邮件类.CSendMail类支持多个收件人,支持附件(多个). [原]:http://www.cnblogs.com/sixbeauty/p/3983525.html 上代

PHPMailer邮件类使用错误分析

PHPMailer配置清单如下: require_once 'class.phpmailer.php'; $receiver = "; $mail =  new PHPMailer ( ); $mail->IsSMTP (); $mail->IsHTML ( true ); $mail->CharSet = "GB2312″; $mail->Encoding = "base64″; $mail->Host = 'mail.test.com'; $

phpmailer邮件类

<?php/** * 邮件类 * Enter description here ... * @author df * Mail::getMail()->sendMail(); * */class Mail{ private static $__mail=null;//邮箱类对象 private $__PMAIL=NULL; function __construct(){ require('class.phpmailer.php'); $this->__PMAIL=new PHPMaile

C# 发邮件类可发送附件

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Net.Mail; namespace Ajax.发邮件 { public class GetMail { //MailAddress ds = new MailAddress("[email protected]"); // Send(ds, "[email protected]&

Android调用系统邮件类应用的正确实现方法

Android应用开发中,很多情况下免不了要调用手机上的邮件类应用,实现邮件发送的功能,这一般是通过调用系统已有的Intent来实现的.看到网上很多邮件发送都是调用action为android.content.Intent.ACTION_SEND的Intent来实现的,下面我们就来看下这种方式实现的效果如何. [使用Intent.ACTION_SEND方式] 具体的UI搭建我就不说了,很easy,直接看下发送的核心代码就行: String[] email = {"3802**[email pro

邮件类

public class MailUnit { public string smtp; public string from; public string pwd; public string to; public string title; public string body; public ArrayList paths; /// <summary> /// 发送邮件单元类 /// </summary> /// <param name="Psmtp"

发送邮件确认验证注册,修改别人邮件类

类库 require "class.phpmailer.php"; require "class.smtp.php"; class PHP_Mailer { protected $mail; public function __construct() { $mail = new PHPMailer; $mail->SMTPDebug = 3; $mail->isSMTP(); $mail->SMTPAuth = true; $mail->is

ThinkPHP中使用PHPMailer邮件类

第一步.添加PHPMailer类库将下载后的文件解压,将PHPMail目录移动至ThinkPHP目录中的Vendor内.(请确保class.phpmailer.php文件就在ThinkPHP\Vendor\PHPMailer\class.phpmailer.php)第二步.添加发送邮件函数在项目目录中的Common文件夹中的common.php文件(如果没有请创建)添加如下代码: <?php /********** * 发送邮件 * **********/ function SendMail($

邮件类自动补全MultiAutoCompleteTextView

package com.dream.dream; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; im