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


Posted in PHP onJanuary 22, 2014

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 = "<html><body>".$u_email   
   ." 你好!<br><br>谢谢,本邮件测试!<br</body></html>"; //内容信息  
$u_email = "hren@yahoo.com.cn"; //发送到的邮箱  
if (send_check_mail($u_email, $subject, $uid, $content)) {  
 echo "恭喜!发送投票邮件到你的邮箱!<br><br>请检查你的邮箱:<font color=#CC0033>".$u_email." </font><br><br>". $close;  
 } else {  
 echo "非常不幸,发送投票邮件到你的邮箱失败,请重试或联系研发人员。<br><br>". $close;  
}

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

下面代码示例:

<?php  
$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->From     = "list@example.com";  
$mail->FromName = "List manager";  
$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 employee?HERE?d=$id";  
$result??MYSQL_QUERY($query);  
while ($row = mysql_fetch_array ($result))  
{  
    // HTML body  
    $body  = "Hello <font size=\"4\">" . $row["full_name"] . "</font>, <p>";  
    $body .= "<i>Your</i> personal photograph to this message.<p>";  
    $body .= "Sincerely, <br>";  
    $body .= "phpmailer List manager";  
    // Plain text body (for mail clients that cannot read HTML)  
    $text_body  = "Hello " . $row["full_name"] . ", \n\n";  
    $text_body .= "Your personal photograph to this message.\n\n";  
    $text_body .= "Sincerely, \n";  
    $text_body .= "phpmailer List manager";  
    $mail->Body    = $body;  
    $mail->AltBody = $text_body;  
    $mail->AddAddress($row["email"], $row["full_name"]);  
    $mail->AddStringAttachment($row["photo"], "YourPhoto.jpg");  
    if(!$mail->Send())  
        echo "There has been a mail error sending to " . $row["email"] . "<br>";  
    // Clear all addresses and attachments for next loop  
    $mail->ClearAddresses();  
    $mail->ClearAttachments();  
}

2. Extending phpmailerExtending classes with inheritance is one of the most powerful features of object-oriented programming. It allows you to make changes to the original class for your own personal use without hacking the original classes. Plus, it is very easy to do. I've provided an example:

Here's a class that extends the phpmailer class and sets the defaults for the particular site:
PHP include file: mail.inc.php

require("class.phpmailer.php");
class my_phpmailer extends phpmailer {  
    // Set default variables for all new objects  
    var $From     = "from@example.com";  
    var $FromName = "Mailer";  
    var $Host     = "smtp1.example.com;smtp2.example.com";  
    var $Mailer   = "smtp";                         // Alternative to IsSMTP()  
    var $WordWrap = 75;      // Replace the default error_handler  
    function error_handler($msg) {  
        print("My Site Error");  
        print("Description:");  
        printf("%s", $msg);  
        exit;  
    }  
    // Create an additional function  
    function do_something($something) {  
        // Place your new code here  
    }  
}

Now here's a normal PHP page in the site, which will have all the defaults set above:
Normal PHP file: 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 = "<html><body>".$u_email   
   ." 你好!<br><br>谢谢,本邮件测试!<br</body></html>"; //内容信息  
$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(); //关闭连接
PHP 相关文章推荐
十天学会php之第二天
Oct 09 PHP
php trim 去除空字符的定义与语法介绍
May 31 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
thinkphp在模型中自动完成session赋值示例代码
Sep 09 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
php递归实现无限分类的方法
Jul 28 PHP
smarty简单应用实例
Nov 03 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
PHP strcmp()和strcasecmp()的区别实例
Nov 05 PHP
laravel-admin 实现给grid的列添加行数序号的方法
Oct 08 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 PHP
简单的php缓存类分享     php缓存机制
Jan 22 #PHP
一组PHP可逆加密解密算法实例代码
Jan 21 #PHP
discuz加密解密函数使用方法和中文注释
Jan 21 #PHP
php加密算法之实现可逆加密算法和解密分享
Jan 21 #PHP
检查用户名是否已在mysql中存在的php写法
Jan 20 #PHP
php设计模式之单例模式使用示例
Jan 20 #PHP
php实现图形显示Ip地址的代码及注释
Jan 20 #PHP
You might like
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
如何在php中正确的使用json
2013/08/06 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
2012/10/11 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
JS批量修改PS中图层名称的方法
2014/01/26 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
Python冲顶大会 快来答题!
2018/01/17 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
python os用法总结
2018/06/08 Python
python将list转为matrix的方法
2018/12/12 Python
pytest中文文档之编写断言
2019/09/12 Python
python游戏开发的五个案例分享
2020/03/09 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
周年庆典邀请函范文
2014/01/23 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
Ajax是什么?Ajax高级用法之Axios技术
2021/04/21 Javascript
Flask response响应的具体使用
2021/07/15 Python
Pillow图像处理库安装及使用
2022/04/12 Python