php中mail()函数和SMTP工作原理及实践

一个发送E-MAIL的脚本也许是你能够在Web 站点上找到的最普通的脚本之一了,虽然它很简单,一个邮件脚本有时会令程序员非常沮丧.PHP中有一个叫做mail()的函数,它只需要知道接收方的地址 和信件主体就可以发送邮件,但是要让mail()按你的意思运行你还需要解决一些棘手的问题.

要使mail()能够运行,你必须有一 个SMTP服务器以便PHP能够连接上去.不管这个服务器对邮件程序多么重要,大多数人对它如何运转没有一星半点的概念.在本教程中,我们将揭示SMTP 的秘密并解决一些使用PHP发送邮件的常见问题.而本文中的另一些主题将包括循环遍历一个地址列表的方法以及同时以文本和HTML格式向接收者发送一个邮 件的方法.

SMTP 是简单邮件传输协议(Simple Mail TransferProtocol)的缩写,而一个SMTP服务器是一台运行这种协议并发出邮件的计算机.运行这种协议实际上指的是运行诸如 Sendmail和Qmail的程序--如果你使用的是一台非Windows计算机的话.在Windows平台上,作为Windows NT ServicePack一部分或是内建于Windows 2000内部的SMTP服务程序就是典型的这种程序.

我并不是说SMTP软件包 就只有那些,但是它们是最普通的.如果你的Web站点使用了互联网服务提供者的主机软件包(Internet ServiceProvider's virtual hostingpackage)的一部分,那么SMTP服务程序就应该已经在这台计算机上安装了.如果你是一台位于ISP或是室内的计算机的系统管理员, 那么你很有可能已经在这台计算机上安装了某种SMTP软件,用来处理从Web服务器发送邮件的过程.

但是,如果你是一个个人用户并只有一 个开发用的Web服务程序运行在你的个人电脑上,你可能没有在自己的机器上运行SMTP软件.下面是一个非常简单但是准确的拇指定律:如果你是一个 Windows用户而从没有看见SMTP服务器这样的字眼,那么你就没有运行这个程序.如果你确实没有,那么你有两种选择:安装,配置,和维护一个 SMTP服务程序(如果你不知道那是怎么一回事的话就不推荐你使用这种方法)或是使用一个现存的SMTP服务器.

"如果一个服务器现在没 有运行的话,我又怎么使用它呢?"你可能要问.如果你的计算机是通过拨号连接(或是DSL或电缆)连到互联网的话,你可以使用你ISP的外发邮件服务器. 例如,如果你开发用的 计算机是一个Windows98的系统并使用56kbpsmodem通过EarthLink连接到互联网,那么你就可以使用 mail.earthlink.net作为你的SMTP服务器.不论你对你的外发邮件服务器使用什么样的邮件客户端(Eudora, Outlook, NetscapeMail等等),它们都将和你的PHP代码使用你的SMTP服务器的过程一样.技巧就是使PHP知道一点点事实.

在php.ini管理配置文件里,有几个条目需要被设置以便mail()函数能够正常运行.在改变它们以前,搞清楚它们都是做什么用的.你可以使用phpinfo()函数通过创建一个文件来显示系统当前的配置情况,这个文件包括:

<? phpinfo() ?>

保存这个文件,将它放置到你的Web服务程序的文件根目录,然后通过你的浏览器访问它.你应该可以看到一个被优美的格式化了的信息,显示你的配置情况.你要查看的条目如下:

SMTP

sendmail_from

sendmail_path

如果你没有使用windows,那么sendmail_path指令就是你唯一要担心的东西.如果你正在使用Windows,你就需要看看最后两个指令.

如果你使用的是Linux或是一个Unix变种,sendmail_path看起来应该象这样:

sendmail_path = /usr/sbin/sendmail

或者如果你使用Qmail:

sendmail_path = /var/qmail/bin/sendmail

在这条指令里,你还可以设置配置参数来指明队列缓冲选项或是显示的设置Return-Path头,如下所示:

sendmail_path = /usr/sbin/sendmail -t-fyou@yourdomain.com

作 为一个非Windows用户,这就是你要做的一切了.如果你使用的是Windows,你有更多的事情要做.你还需要看一看SMTP和 sendmail_from的值.不要被sendmail_from指令名字中的sendmail弄迷糊了.虽然你没有在Windows上使用名叫 Sendmail的程序,但那只是指令的名字.不要被它吓到了.

在你的phpinfo()显示的结果里,看看SMTP和sendmail_from的缺省值--它们要么是空白,要么包含了胡乱的值.你应该把它们改成有意义的值.

如果你决心在这台电脑上运行一个SMTP服务程序,你在php.ini文件中的条目就应该如下:

SMTP = localhost

但是,如果你要使用你ISP(在这个例子中是EarthLink)的外发邮件服务器,那么php.ini中的邮件看起来应该如下:

SMTP = mail.earthlink.net

你也可以使用IP地址而不是域名,因为计算机不区分这两种条目.

第二条配置指令是sendmail_from,它应该被设置成From头中的电子邮件地址.它可以在脚本里被修改但是通常作为缺省值使用.下面就是这个配置指令的示例youraddress@yourdomain.com指的是你自己的邮件地址.

sendmail_from =youraddress@yourdomain.com

时间: 2024-09-26 12:45:12

php中mail()函数和SMTP工作原理及实践的相关文章

jsp中form表单的工作原理?

问题描述 jsp中form表单的工作原理? 1.为什么form表单可以提交到下个页面并且传值? 2.在form表单jsp页面转换成servlet页面后,里面只有一堆out.print().怎么不见跳转,或者传值类的东西? 求各位大神解惑,谢谢大家 解决方案 是HTML标签,是浏览器所识别的,所以浏览器会自动识别这个东西,知道是http请求服务器的,并通过tcp/ip协议传输,和servlet没有关系,jsp是可以在html中嵌套java代码并最终生成servlet的.

lnmp中mail函数不能发送邮件2种解决办法

方法一,使用sendmail组件来发邮件 1.安装 sendmail 组件 yum install sendmail 2.使用下面的命令重启php-fpm进程 /etc/init.d/php-fpm restart 3.检测sendmail是否运行正常 /etc/init.d/sendmail status 如果显示正在运行running 就可以. 可能用到的命令 /etc/init.d/sendmail start (启动sendmail) /etc/init.d/sendmail stop 

利用php中mail函数发送带有附件的邮件

mail函数,发送邮件 语法: mail(to,subject,message,headers,parameters) to 规定邮件的接收者 subject 规定邮件的主题.该参数不能包含任何换行字符 message 规定要发送的消息 headers 规定额外的报头,比如 From, Cc 以及 Bcc parameters 规定 sendmail 程序的额外参数. 碰到的主要问题是乱码问题,刚开始是某些客户端接收邮件时好(比如QQ邮箱,估计带自动那个识别编码)的有些不foxmail.ipad

深度剖析Java中的内存原型及工作原理_java

本文主要通过分析Java内存分配的栈.堆以以及常量池详细的讲解了其的工作原理. 一.java虚拟机内存原型 寄存器:我们在程序中无法控制栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中堆:存放用new产生的数据静态域:存放在对象中用static定义的静态成员常量池:存放常量非RAM存储:硬盘等永久存储空间. 二.常量池(constant pool) 常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据.除了包含代码中所定义的各种基本类型(如int.

php中mail函数发送文件失败解决办法

之前的那台服务器转移过来后,发现网站用mail()发送邮件发不了.但是发现sendmail明明已经安装. 如果没有安装sendmail可以执行  代码如下 复制代码 yum install sendmail 对了,主机名要设置一个域名格式的.例如:sangsir.com 不然重启sendmail的时候会特别久才启动起来.(否则要等很久)    代码如下 复制代码 hostname sangsir.com 接着看看sendmail是否正常运行    代码如下 复制代码 service sendma

利用php中mail函数发送HTML邮件实例

例  代码如下 复制代码 <?php function send_mail($from, $to, $subject, $message) {     if ($from == "")     {         $from = '回忆未来 <webmaster@s135.com>';//发件人地址     }     $headers = 'MIME-Version: 1.0' . "rn";     $headers .= 'Content-t

实例分析浏览器中“JavaScript解析器”的工作原理_javascript技巧

浏览器在读取HTML文件的时候,只有当遇到<script>标签的时候,才会唤醒所谓的"JavaScript解析器"开始工作. JavaScript解析器工作步骤: 1."找一些东西": var. function. 参数:(也被称之为预解析) 备注:如果遇到重名分为以下两种情况: 遇到变量和函数重名了,只留下函数 遇到函数重名了,根据代码的上下文顺序,留下最后一个 2.逐行解读代码. 备注:表达式可以修改预解析的值 JS解析器在执行第一步预解析的时候,会

Centos中mail函数发送邮件缓慢解决办法

因为需要经常备份网站的数据,所以了解并学习了下linux下如何通过shell来发送邮件,这里以CentOS 为例,使用mail命令来进行外部邮件的发送.mail命令的语法如下:  代码如下 复制代码 Usage: mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] to-addr ...            [-- sendmail-options ...]       mail [-iInNv] -f [name]       mail

linux中mail函数不能发送邮件怎么办

没有安装或启动 sendmail 组件 1.重新安装 sendmail 组件,我用的是 CentOS ,使用下面的命令安装 yum install sendmail 2.使用下面的命令重启php-fpm进程 /etc/init.d/php-fpm restart 3.检测sendmail是否运行正常 /etc/init.d/sendmail status 如果显示正在运行running 就可以. 可能用到的命令 /etc/init.d/sendmail start (启动sendmail) /e