首页 >后端开发 >php教程 >php多种形式发送邮件(mail qmail邮件系统 phpmailer类)_php实例

php多种形式发送邮件(mail qmail邮件系统 phpmailer类)_php实例

WBOY
WBOY原创
2016-05-17 08:50:451245浏览

1. 使用 mail() 函数

没什么好讲的,就是使用系统自带的smtp系统来发送,一般是使用sendmail来发。这个按照各个系统不同而定。使用参考手册。

2. 使用管道的形式

昨天刚测试成功,使用本地的qmail来发送邮件。

复制代码 代码如下:

/* 使用qmail发送邮件函数 */ 
function send_check_mail($email, $subject,$uid,$buffer) 

 $command =  "/var/qmail/bin/qmail-inject ".$email; //qmail程式地址,$email是要发送的地址 
 $handle = popen($command, "w"); //打开管道  http://www.cnblogs.com/roucheng/
 if (!$handle) { 
  return false; 
 }  

 $from = "webmaster@unixsky.net"; //发件人 
 fwrite($handle, "From: ".$from."\n"); //往管道写数据 
 fwrite($handle, "Return-Path: ".$from."\n"); 
 fwrite($handle, "To: ".$uid."\n"); 
 fwrite($handle, "Subject: ".$subject."\n"); 
 fwrite($handle, "Mime-Version: 1.0\n"); 
 fwrite($handle, "Content-Type: text/html; charset=\"gb2312\"\n\n"); 
 fwrite($handle, $buffer."\n"); 
 pclose($handle); //关闭管道 

 return true; 


------------------测试发送邮件: 

//发送邮件 

$subject = "测试邮件"; 

$uid = $_POST['uid']; //from信息 
$content = "".$u_email  

   ." 你好!

谢谢,本邮件测试!"; //内容信息 

$u_email = "hren@yahoo.com.cn"; //发送到的邮箱 
if (send_check_mail($u_email, $subject, $uid, $content)) { 

 echo "恭喜!发送投票邮件到你的邮箱!

请检查你的邮箱:".$u_email."

". $close; 
 } else { 

 echo "非常不幸,发送投票邮件到你的邮箱失败,请重试或联系研发人员。

". $close; 

}

当然,也能使用相同的方法来处理sendmail的进程来发送邮件。

下面代码示例:

复制代码 代码如下:

$pp = popen("/usr/sbin/sendmail -t", "w") or die("Cannot fork sendmail"); 
fputs($pp, "To: sterling@designmultimedia.com\r\n"); 
fputs($pp, "Reply-to: $senders_email\r\n"); 
fputs($pp, "From: $senders_email\r\n"); 
fputs($pp, "Subject The Results of your form\r\n\r\n"); 
fputs($pp, "$senders_email sent the fllowing comments:\r\n"); 
fputs($pp, $comments); 
pclose($pp) or die("Cannot close pipe to sendmail"); 
?>

其实这种管道的方法比较底层,取决于你所调用程式的稳定性。所以是一种可选的发送邮件的方式。


3. 使用phpmailer类

是个开源的发送邮件类,主站:http://phpmailer.sourceforge.net

里面是两个文件,一个是class.smtp.php,更有以个是class.phpmailer.php
另外加上官方网站的使用方法:
Examples using phpmailer
1. Advanced ExampleThis demonstrates sending out multiple email messages with binary attachments from a MySQL database with multipart/alternative support.

复制代码 代码如下:

require("class.phpmailer.php"); 

$mail = new phpmailer(); 

$mail->来自     = "list@example.com"; 
$mail->FromName = "列表管理员"; 
$mail->Host     = "smtp1.example.com;smtp2.example.com"; 
$mail->Mailer = "smtp"; 

@MYSQL_CONNECT("localhost","root","password"); 
@mysql_select_db("my_company"); 
$query?=?SELECT full_name, email,?hoto?ROM 员工?HERE?d=$id"; 
$result??MYSQL_QUERY($query); 

while ($row = mysql_fetch_array ($result)) 

    // HTML 正文 
    $body  = "Hello $row["full_name"] . ;/font>,

"; 
    $body .= "您的;
    $body .= "phpmailer 列表管理器"; 

    // 纯文本文本正文(适用于无法读取 HTML 的邮件客户端) 
    $text_body  = "Hello " . $row["full_name"] . ", \n\n"; 
    $text_body .= "您的个人照片message.\n\n"; 
    $text_body .= "此致,\n"; 
    $text_body .= "phpmailer 列表管理器"; 

    $mail->Body    = $body ; 
    $mail->AltBody = $text_body; 
    $mail->AddAddress($row["email"], $row["full_name"]); 
    $mail->AddStringAttachment ($row["photo"], "YourPhoto.jpg"); 

    if(!$mail->Send()) 
        echo "发送至 " $ 时出现邮件错误。 row["email"] . "
"; 

    // 清除下一个循环的所有地址和附件 
    $mail->ClearAddresses(); 
    $mail->清除附件(); 
}

2.通过继承来扩展 phpmailerExtending 类是面向对象编程最强大的功能之一。它允许您对原始类进行更改以供您个人使用,而无需修改原始类。另外,这很容易做到。我提供了一个例子:

这是一个扩展 phpmailer 类并为特定站点设置默认值的类:

PHP 包含文件:mail.inc.php

复制代码 代码如下:
require("class.phpmailer.php");

复制代码代码如下:
class my_phpmailer extends phpmailer { 
    // 设置默认值所有新对象的变量
    var $From     = "from@example.com"; 
    var $FromName = "Mailer"; 
    var $Host     = "smtp1.example.com;smtp2.example.com"; 
    var $Mailer   = "smtp";                         // IsSMTP() 的替代方法 
    var $WordWrap = 75; 

    // 替换默认的 error_handler
    function error_handler($msg) { 
        print("My Site Error"); 
        print("描述:"); 
        printf("%s", $msg); 
        退出; 
    } 

    // 创建一个附加函数 
    function do_something($something) { 
        // 将新代码放在这里 
    } 
}

现在网站中有一个普通的 PHP 页面,它将具有上面设置的所有默认值:

普通 PHP 文件:mail_test.php

复制代码代码如下:

require("mail.inc.php"); 

// Instantiate your new class 
$mail = new my_phpmailer; 

// Now you only need to add the necessary stuff 
$mail->AddAddress("josh@example.com", "Josh Adams"); 
$mail->Subject = "Here is the subject"; 
$mail->Body    = "This is the message body"; 
$mail->AddAttachment("c:/temp/11-10-00.zip", "new_name.zip");  // optional name 

if(!$mail->Send()) 

   echo "There was an error sending the message"; 
   exit; 


echo "Message was sent successfully";

4. 使用PEAR::Net_SMTP组件

PEAR真是个好东西,可能非常多人都不怎么用,至少我目前使用他的DB类,发送邮件类都不错。

需要Net_SMTP类,能去 http://pear.php.net 下载,Net_SMTP类的使用手册:

http://pear.php.net/manual/en/package.networking.net-smtp.php

我使用上面几个类,这个是最佳的,不管是速度还是别的,不过操作涉及到一些简单的smtp协议。

我的使用代码:

复制代码 代码如下:

//------------------------------------------ 

require_once 'Net/SMTP.php'; //加载类库 

 
$subject = "测试邮件"; 

$uid = $_POST['uid']; //from信息 
$content = "".$u_email  

   ." 你好!

谢谢,本邮件测试!"; //内容信息 

$u_email = "hren@yahoo.com.cn"; //发送到的邮箱 

$smtp = new Net_SMTP('192.168.0.1'); //smtp服务器 
$smtp->connect(); //连接服务器 
$smtp->helo('unixsky.net'); //发送HELO信息给服务器 
$smtp->mailFrom('hren@unixsky.net'); //发件人地址 
$smtp->rcptTo($u_email); //收件人地址 
$date = date('r'); //获取发信日期 
$smtp->data("Date: $date\r\nFrom: vdddote@eyou.net\r\nTo: $u_email\r\nSubject: $subject\r\nContent-Type: text/html; charset=\"gb2312\"\r\n\r\n$content\r\n"); //添加发送数据并且发送 
$smtp->disconnect(); //关闭连接
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn