把自己框架里的邮件发送类分享出来,希望对大家有帮助,同时做了一个小例子,方便大家使用。 SMTP类:Smtp.class.php ?php/** * SMTP类 * @package DolrPHP * @author Joy chao * @version v2.0 * @copyright Copyright (c) 2012. DolrPHP.com * @modifier J
把自己框架里的邮件发送类分享出来,希望对大家有帮助,同时做了一个小例子,方便大家使用。
SMTP类:Smtp.class.php
<?php
/**
* SMTP类
* @package DolrPHP
* @author Joy chao
* @version v2.0
* @copyright Copyright (c) 2012. DolrPHP.com
* @modifier Joy chao
* @lastmodified Joy chao 2012-4-30
*/
class Smtp {
public $smtp_host; //SMTP主机,如: smtp.qq.com
public $smtp_port = 25; //SMTP端口
public $auth = TRUE; //是否需要帐户认证
public $user; //帐户名
public $pass; //帐户密码
public $debug = FALSE; //开启调试
public $time_out;
public $host_name;
public $log_file;
public $sock;
/**
* 构造函数,连接smtp服务器
* @param string smtp服务器
* @param int smtp服务器端口
* @param bool smtp服务器是否需要认证
* @param string smtp服务器邮件帐号
* @param string smtp服务器邮件密码
*/
function smtp($smtp_host, $smtp_port = 25, $auth = TRUE, $user = '', $pass = '') {
$this->debug = FALSE;
$this->smtp_port = trim ( $smtp_port );
$this->smtp_host = trim ( $smtp_host );
$this->time_out = 30; // is used in fsockopen()
$this->auth = trim ( $auth ); // auth
$this->user = trim ( $user );
$this->pass = trim ( $pass );
$this->host_name = "localhost"; // is used in HELO command
$this->log_file = '';
$this->sock = FALSE;
}
/**
* 发送邮件主方法
* @param string $to 收件人
* @param string $mail_from 发件人
* @param string $subject 主题
* @param string $body 内容
* @param string $mailtype 邮件类型(HTML/TXT)
* @param string $cc 抄送
* @param string $bcc 密送
* @param string $additional_headers 额外头信息
* @return boolean 成功或者失败
*/
function sendmail($to, $mail_from, $subject = '', $body = '', $mailtype = "HTML", $cc = '', $bcc = '', $additional_headers = '') {
$to = trim ( $to );
$stringEncode = mb_detect_encoding($body, array('UTF-8','GBK','ASCII','GB2312'));
$subject = iconv($stringEncode,'UTF-8',$subject);
$body = iconv($stringEncode,'UTF-8',$body);
$body = preg_replace ( "/(^|(
))(.)/", "\1.\3", base64_encode($body));
$header = "MIME-Version:1.0
";
if (strtoupper ( $mailtype ) == "HTML") {
$header .= "Content-Type:text/html;charset=utf-8
";
}
$header .= "Content-Transfer-Encoding: base64
";
$header .= "To: " . $to . "
";
if ($cc != '') {
$header .= "Cc: " . $cc . "
";
}
$header .= "From: " . $this->get_mailfrom ( $this->user, $mail_from ) . "
";
$header .= "Subject: " . $subject . "
";
$header .= $additional_headers;
$header .= "Date: " . date ( "r" ) . "
";
$header .= "X-Mailer:By Apache (PHP/" . phpversion() . ")
";
list ( $msec, $sec ) = explode ( ' ', microtime() );
$header .= "Message-ID: <" . date ( 'YmdHis', $sec ) . "." . ($msec * 1000000) . "." . substr ( $mail_from, strpos ( $mail_from, '@' ) ) . ">
";
$TO = explode ( ',', $this->strip_comment ( $to ) );
if ($cc != '') {
$TO = array_merge ( $TO, explode( ',', $this->strip_comment ( $cc ) ) );
}
if ($bcc != '') {
$TO = array_merge ( $TO, explode ( ',', $this->strip_comment ( $bcc ) ) );
}
$sent = TRUE;
foreach ( $TO as $rcpt_to ) {
$rcpt_to = $this->get_address ( $rcpt_to );
if (! $this->smtp_sockopen ( $rcpt_to )) {
$this->log_write ( "Error: Cannot send email to " . $rcpt_to . "
" );
$sent = FALSE;
continue;
}
if ($this->smtp_send ( $this->host_name, $this->user, $rcpt_to, $header, $body )) {
$this->log_write ( "E-mail has been sent to <" . $rcpt_to . ">
" );
} else {
$this->log_write ( "Error: Cannot send email to <" . $rcpt_to . ">
" );
$sent = FALSE;
}
fclose ( $this->sock );
$this->log_write ( "Disconnected from remote host
" );
}
return $sent;
}
/**
* 发送邮件
* @access public
*/
function smtp_send($helo, $from, $to, $header, $body = '') {
if (! $this->smtp_putcmd ( "HELO", $helo )) {
return $this->smtp_error ( "sending HELO command" );
}
// auth
if ($this->auth) {
if (! $this->smtp_putcmd ( "AUTH LOGIN", base64_encode ( $this->user ) )) {
return $this->smtp_error ( "sending HELO command" );
}
if (! $this->smtp_putcmd ( '', base64_encode ( $this->pass ) )) {
return $this->smtp_error ( "sending HELO command" );
}
}
if (! $this->smtp_putcmd ( "MAIL", "FROM:<" . $from . ">" )) {
return $this->smtp_error ( "sending MAIL FROM command" );
}
if (! $this->smtp_putcmd ( "RCPT", "TO:<" . $to . ">" )) {
return $this->smtp_error ( "sending RCPT TO command" );
}
if (! $this->smtp_putcmd ( "DATA" )) {
return $this->smtp_error ( "sending DATA command" );
}
if (! $this->smtp_message ( $header, $body )) {
return $this->smtp_error ( "sending message" );
}
if (! $this->smtp_eom ()) {
return $this->smtp_error ( "sending . [EOM]" );
}
if (! $this->smtp_putcmd ( "QUIT" )) {
return $this->smtp_error ( "sending QUIT command" );
}
return TRUE;
}
function smtp_sockopen($address) {
if ($this->smtp_host == '') {
return $this->smtp_sockopen_mx ( $address );
} else {
return $this->smtp_sockopen_relay ();
}
}
function smtp_sockopen_relay() {
$this->log_write ( "Trying to " . $this->smtp_host . ":" . $this->smtp_port . "
" );
$this->sock = @fsockopen ( $this->smtp_host, $this->smtp_port, $errno, $errstr, $this->time_out );
if (! ($this->sock && $this->smtp_ok ())) {
$this->log_write ( "Error: Cannot connenct to relay host " . $this->smtp_host . "
" );
$this->log_write ( "Error: " . $errstr . " (" . $errno . ")
" );
return FALSE;
}
$this->log_write ( "Connected to relay host " . $this->smtp_host . "
" );
return TRUE;
}
function smtp_sockopen_mx($address) {
$domain = ereg_replace ( "^.+@([^@]+)$", "", $address );
if (! @getmxrr ( $domain, $MXHOSTS )) {
$this->log_write ( "Error: Cannot resolve MX "" . $domain . ""
" );
return FALSE;
}
foreach ( $MXHOSTS as $host ) {
$this->log_write ( "Trying to " . $host . ":" . $this->smtp_port . "
" );
$this->sock = @fsockopen ( $host, $this->smtp_port, $errno, $errstr, $this->time_out );
if (! ($this->sock && $this->smtp_ok ())) {
$this->log_write ( "Warning: Cannot connect to mx host " . $host . "
" );
$this->log_write ( "Error: " . $errstr . " (" . $errno . ")
" );
continue;
}
$this->log_write ( "Connected to mx host " . $host . "
" );
return TRUE;
}
$this->log_write ( "Error: Cannot connect to any mx hosts (" . implode ( ", ", $MXHOSTS ) . ")
" );
return FALSE;
}
function smtp_message($header, $body) {
fputs ( $this->sock, $header . "
" . $body );
$this->smtp_debug ( "> " . str_replace ( "
", "
" . "> ", $header . "
> " . $body . "
> " ) );
return TRUE;
}
function smtp_eom() {
fputs ( $this->sock, "
.
" );
$this->smtp_debug ( ". [EOM]
" );
return $this->smtp_ok ();
}
function smtp_ok() {
$response = str_replace ( "
", '', fgets ( $this->sock, 512 ) );
$this->smtp_debug ( $response . "
" );
if (! preg_match("/^[23]/", $response )) {
fputs ( $this->sock, "QUIT
" );
fgets ( $this->sock, 512 );
$this->log_write ( "Error: Remote host returned "" . $response . ""
" );
return FALSE;
}
return TRUE;
}
function smtp_putcmd($cmd, $arg = '') {
if ($arg != '') {
if ($cmd == '')
$cmd = $arg;
else
$cmd = $cmd . " " . $arg;
}
fputs ( $this->sock, $cmd . "
" );
$this->smtp_debug ( "> " . $cmd . "
" );
return $this->smtp_ok ();
}
function smtp_error($string) {
$this->log_write ( "Error: Error occurred while " . $string . ".
" );
return FALSE;
}
function log_write($message) {
$this->smtp_debug ( $message );
if ($this->log_file == '') {
return TRUE;
}
$message = date ( "M d H:i:s " ) . get_current_user () . "[" . getmypid () . "]: " . $message;
if (! @file_exists ( $this->log_file ) || ! ($fp = @fopen ( $this->log_file, "a" ))) {
$this->smtp_debug ( "Warning: Cannot open log file "" . $this->log_file . ""
" );
return FALSE;
}
flock ( $fp, LOCK_EX );
fputs ( $fp, $message );
fclose ( $fp );
return TRUE;
}
function strip_comment($address) {
$comment = "/([^()]*)/";
while ( preg_match( $comment, $address ) ) {
$address = preg_replace ( $comment, '', $address );
}
return $address;
}
function get_address($address) {
return trim ( preg_replace ( "/(.*[<])?([^<>]+)[>]?/i", "$2", $address ) );
}
function get_mailfrom($address,$mail_from) {
return $mail_from . "<{$address}>";
}
function smtp_debug($message) {
if ($this->debug) {
return $message;
}
}
}//CLASS SMTP END-----使用范例: mail.php
<?php
/**
* SMTP邮件发送演示
*
* @author Joychao
**/
//包含SMTP类文件
include './Smtp.class.php';
$smtpserver = "smtp.exmail.qq.com"; //SMTP服务器
$smtpport = 25; //SMTP服务器端口
$smtpusermail = "admin@joychao.cc"; //SMTP服务器的用户邮箱
$smtpuser = "admin@joychao.cc"; //SMTP服务器的用户帐号
$smtppass = "123456"; //SMTP服务器的用户密码
$mailfrom = "Joychao'Blog"; //发送者名称
$mailto = '44294631@qq.com'; //发送给谁(QQ邮箱情况下不能和上面的登录帐户一样,否则发不出去)
$mailsubject = "Hello world!这是一封测试邮件的标题"; //邮件主题
$mailbody = '您好!这是一封测试邮件来自Joychao'Blog';//邮件内容,支持HTML
$mailtype = "HTML"; //邮件格式(HTML/TXT),TXT为文本邮件
##########################################
//这里面的一个true是表示使用身份验证,否则不使用身份验证.
$smtp = new Smtp($smtpserver,$smtpport,true,$smtpuser,$smtppass);//实例化SMTP类
//是否显示调试信息
$smtp->debug = 1;
//发送邮件
$res=$smtp->sendmail($mailto, $mailfrom, $mailsubject, $mailbody, $mailtype);
if($res){
echo '发送成功';
}else{
echo '发送失败';
}代码呢?百度网盘:http://pan.baidu.com/share/link?shareid=78838&uk=453059967
原文地址:简单的PHP邮件发送类, 感谢原作者分享。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号