`

PHP中发送邮件的几种方法总结

 
阅读更多

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"); //打开管道
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 = "heiyeluren@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,使用方法可以参考下面的文章:

http://blog.jianqing.net/2005/05/02/201-phpmailer

另外加上官方网站的使用方法:

Examples using phpmailer

1. Advanced Example

This 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 phpmailer

Extending 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 = "heiyeluren@yahoo.com.cn"; //发送到的邮箱

$smtp = new Net_SMTP('192.168.0.1'); //smtp服务器
$smtp->connect(); //连接服务器
$smtp->helo('unixsky.net'); //发送HELO信息给服务器
$smtp->mailFrom('heiyeluren@unixsky.net'); //发件人地址
$smtp->rcptTo($u_email); //收件人地址
$date = date('r'); //获取发信日期
$smtp->data("Date: $date/r/nFrom: vote@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(); //关闭连接

5. 其他方法

比如使用socket,自己写程序。

PEAR::Mail类跟上面的不一样,我没使过,可以尝试一下。

其他方法。。。

分享到:
评论

相关推荐

    FastMail邮件到达率精准测试工具 v1.0.rar

    FASTmail 是一种专用到EDM邮件营销到达率测试工具 PHP 批量邮箱账号收件程序 本程序免费,爱好者可任意修改,但请页面保留版权和连接 可以批量收取常见邮箱的邮件标题,适合管理大量的邮件发送账号,一次可处理几千个,你...

    PHP入门到精通

    21.3应用PHP发送和接收电子邮件 PHP与XML技术(教学录像:31分17秒) 22.1XML的概述 22.2XML语法 22.3在PHP中创建XML文档 22.4SimpleXML 22.5动态创建XML文档 PHP与LDAP技术(教学录像:25分27秒) 23.1LDAP简介 ...

    PHP和MySQL Web开发(中文第4版)

    例如,用户验证、创建购物车、动态生成pdf文档和图像、发送和管理电子邮件、管理用户讨论、使用xml连接web服务,以及使用基于ajax的交互性开发web 2.0应用。 与上一版相比,本书经过了更新、重写以及扩展,并涵盖了...

    PHP入门到精通02

    21.3应用PHP发送和接收电子邮件 PHP与XML技术(教学录像:31分17秒) 22.1XML的概述 22.2XML语法 22.3在PHP中创建XML文档 22.4SimpleXML 22.5动态创建XML文档 PHP与LDAP技术(教学录像:25分27秒) 23.1LDAP简介 ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    以下就是你可以采用的几种方法。你可以选用其中一种你最适应的并且就这样坚持这种方法! 从HTML中分离 以下是可以使用的方法: &lt;?php . . . ?&gt; &lt;script language="php"&gt; . . . &lt;/script&gt; 语句 与Perl和C一样,...

    乘风多用户PHP统计系统 v5.2.zip

    6.可以更换几种皮肤 7.完全防注入攻击,密码32位Md5加密 乘风多用户PHP统计系统截图 乘风多用户PHP统计系统后台登陆 默认超级管理员登陆页面:域名/admin.php 用户:admin 密码:admin 相关阅读 同类...

    PHP3程序设计

    14.5 几种连接类型 222 14.5.1 左连接 222 14.5.2 正则左连接 223 14.5.3 Using选项 223 14.6 处理空值 224 14.7 完整性 225 14.8 总结 226 第15章 中场四:管理并发访问 228 15.1 问题:一个用户能覆盖另一 个用户...

    PHP和MySQL Web开发 英文第4版

    例如,用户验证、创建购物车、动态生成PDF文档和图像、发送和管理电子邮件、管理用户讨论、使用XML连接Web服务,以及使用基于Ajax的交互性开发Web 2.0应用。 与上一版相比,本书经过了更新、重写以及扩展,并涵盖了...

    awesome-php:精选PHP框架,库和软件清单

    -Faker是一个PHP库,可以为您生成假数据-PHP依赖管理器 -Symfony PHP框架guzzle guzzle-Guzzle,一个可扩展PHP HTTP客户端 -PHP 7.4中几种设计模式的示例代码开源PHP框架(最初来自EllisLab) -PHP单元测试框架。...

    php网络开发完全手册

    1.5 几种综合网络服务器系统的安装 14 1.5.1 XAMPP 14 1.5.2 WAMP 16 1.5.3 Appserv 17 1.5.4 EasyPHP 18 1.5.5 VertrigoServ 19 1.6 几种开发工具的介绍 20 1.6.1 Vi及Vim 20 1.6.2 Eclipse+PHPEclipse插件 21 ...

    乘风多用户PHP统计系统 v5.2

    可以更换几种皮肤7.完全防注入攻击,密码32位Md5加密乘风多用户PHP统计系统 V5.2版更新内容:1.新增对https站点统计的支持2.新增对cdn访问的支持,可正确获取浏览者IP地址3.新增在非ie内核下可正确获取统计代码4....

    PHP和MySQL.Web开发(原书第4版).part1/2

    例如,用户验证、创建购物车、动态生成pdf文档和图像、发送和管理电子邮件、管理用户讨论、使用xml连接web服务,以及使用基于ajax的交互性开发web 2.0应用。  与上一版相比,本书经过了更新、重写以及扩展,并涵盖...

    PHP和MySQL.Web开发(原书第4版).part2/2

    例如,用户验证、创建购物车、动态生成pdf文档和图像、发送和管理电子邮件、管理用户讨论、使用xml连接web服务,以及使用基于ajax的交互性开发web 2.0应用。  与上一版相比,本书经过了更新、重写以及扩展,并涵盖...

    felix:使用Twilio和过程PHP的简单团体短信

    通过@alexpgates 这是使用PHP和Twilio管理SMS组的一种快速而肮脏的方法。 当您想快速向组织者/咨询员传达信息时,这对于诸如夏令营之类的活动或其他活动非常方便。 该代码已有几年历史,但是已更新为使用最新的...

    初级java笔试题-php:php

    中几种设计模式的示例代码 - Guzzle,一个可扩展的 PHP HTTP 客户端 - Yii 2:快速、安全和专业的 PHP 框架 - 经典的 PHP 电子邮件发送库 - PHP 单元测试框架。 - 已弃用 - DateTime 的简单 PHP API 扩展。 - 开放的...

    啊估留言簿 v2.1.rar

    指定邮箱收不到用户留言的邮件可能有以下几种原因:在线发送邮件必须网站服务器支持 JMail,发送邮件的参数设置错误;发送邮件的邮箱不支持;接收的邮箱多次接收同类的邮件,会被邮箱服务器当成垃圾邮件拒收。 运行...

    Question2Answer(PHP问答系统) v1.6.3.zip

    •发送的有关意见通知电子邮件的意见(而不是其母公司)的直接联系。 •应用字审查的电子邮件通知发送出墙的帖子内容。 •应用字审查,以在搜索结果中的项目标题。 •应用word显示标签在标签云窗口小部件时审查。...

    初级java笔试题-awesome-php:很棒的php

    中几种设计模式的示例代码 - Faker 是一个为你生成假数据的 PHP 库 - Yii 2:快速、安全和专业的 PHP 框架 - Guzzle,一个可扩展的 PHP HTTP 客户端 - PHP 依赖管理器 - 经典的 PHP 电子邮件发送库 - 一个用于读写...

    初级java笔试题-awesome-php-resources:精选的很棒的php列表

    中几种设计模式的示例代码 - Faker 是一个为你生成假数据的 PHP 库 - Yii 2:快速、安全和专业的 PHP 框架 - PHP 依赖管理器 - Guzzle,一个可扩展的 PHP HTTP 客户端 - 经典的 PHP 电子邮件发送库 - 一个用于读写...

    流量安全管控工具CIDRAM.zip

    有几种不同的方式为您的系统或CMS设定钩子,最简单的是在您的系统或CMS的核心文件的开头中使用require或include命令直接包含脚本(这个方法通常会导致在有人访问时每次都加载)。平时,这些都是存储的在文件夹中,...

Global site tag (gtag.js) - Google Analytics