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"; |
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 { |
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 |
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类跟上面的不一样,我没使过,可以尝试一下。
其他方法。。。
PHP中发送邮件的几种方法总结的更多相关文章
- 解析Jquery取得iframe中元素的几种方法
iframe在复合文档中经常用到,利用jquery操作iframe可以大幅提高效率,这里收集一些基本操作,需要的朋友可以参考下 DOM方法:父窗口操作IFRAME:window.frames[&q ...
- 转载:WinForm中播放声音的三种方法
转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...
- 使用PHP发送邮件的两种方法
使用PHP发送邮件的两种方法 May242013 作者:Jerry Bendy 发布:2013-05-24 22:25 分类:PHP 阅读:2,107 views 抢沙发 今天 ...
- java中需要关注的3大方面内容/Java中创建对象的几种方法:
1)垃圾回收 2)内存管理 3)性能优化 Java中创建对象的几种方法: 1)使用new关键字,创建相应的对象 2)通过Class下面的new Instance创建相应的对象 3)使用I/O流读取相应 ...
- MATLAB中多行注释的三种方法
MATLAB中多行注释的三种方法 A. %{ 若干语句 %} B. 多行注释: 选中要注释的若干语句, 编辑器菜单Text->Comment, 或者快捷键Ctrl+R 取消注释: 选中要取消注释 ...
- C#中文件下载的几种方法演示源码
内容过程,把内容过程比较重要的内容做个珍藏,如下的内容是关于C#中文件下载的几种方法演示的内容,应该是对各朋友有较大好处. using System;using System.Data;using S ...
- Jquery取得iframe中元素的几种方法(转载)
iframe在复合文档中经常用到,利用jquery操作iframe可以大幅提高效率,这里收集一些基本操作 DOM方法:父窗口操作IFRAME:window.frames["iframeSon ...
- js 跨域 Jquery取得iframe中元素的几种方法
http://www.jb51.net/article/34942.htm 收集利用Jquery取得iframe中元素的几种方法 : 父页面访问子页面 $(document.getElementByI ...
- [浪风转载]Jquery取得iframe中元素的几种方法
iframe在复合文档中经常用到,利用jquery操作iframe可以大幅提高效率,这里收集一些基本操作 DOM方法:父窗口操作IFRAME:window.frames["iframeSon ...
随机推荐
- jQuery对input中radio的一些操作
通过jQuery获取页面中的所有radio对象,遍历页面中的radio,取消选中的标签,因为使用到jQuery时间,因此引用到了网上公共的js,这只是本人的一些总结,大神勿喷. <html> ...
- linux 关机方式
linux 关机命令: 1- init 0 关机. 具体详情接受可以 init --help 查询 如下: init [OPTIONS...] {COMMAND} Send control comm ...
- silverlight 用户浏览器未安装SL插件问题
1.在Silverlight启动页面 <%@ Page Language="C#" AutoEventWireup="true" %> <!D ...
- 使用tortoise git管理gitolite版本库
gitolite-admin是用于管理git版本库的版本库,将其从服务器上clone下来. 使用tortoise git clone的时候需要指定私钥,私钥的格式是ppk的,需要使用putty的PUT ...
- curl 报错记录,mark
今天在做接口开发的时候,使用curl post ,请求返回数据为 null ,很纳闷,然后使用 curl_errno 打印出来的错误代码为 28 ,curl_error($ch) 打印出来的是Oper ...
- python 获取 mac 地址 的代码
python 获取 mac 地址 的例子,有需要的朋友可以参考下. #!/bin/python import os import re def GetMac(): if os.name == ...
- LLVM language 参考手册(译)(2)
调用约定(Calling Conventions) LLVM functions, calls and invokes 可以带有一个可选的调用约定来指明调用方式.每一对 caller/callee(调 ...
- Color About——Second
下面来简要的说一下Android开发中如何对某一个Activity进行背景色的设置.下面我以名字为FirstActivity的Activity的背景色的设置进行说明,先说一下Drawable类: 关于 ...
- 虚拟机开机提示:This virtual machine appears to be in use
[原因]:由于电脑非正常关机导致,重新启动虚拟机就会出现This virtual machine appears to be in use的提示.[解决方法]:到虚拟机的安装目录下删除所有.lck的目 ...
- poj 3237 Tree 树链剖分+线段树
Description You are given a tree with N nodes. The tree’s nodes are numbered 1 through N and its edg ...