使用PHP发送电子邮件的两种方法及常见错误解决方案
本文研究的主要内容是使用PHP发送电子邮件,总结为以下两种方法:

1.使用PHP内置的mail()函数
$to = "test@163.com"; //接受者
$subject = "测试"; //主题
$message = "这是一封测试邮件!"; //文本
邮件($收件人,$主题,$消息);
结果直接报错,如下:
警告:mail() [function.mail]:无法连接到“localhost”端口 25 处的邮件服务器,请验证 php.ini 中的“SMTP”和“smtp_port”设置或使用 ini_set() inD:/www/Zend/email /email.php 第 10 行
分析原因:需要本地SMTP服务器,修改代码:
$to = "test@163.com";//收件人
$subject = "Test";//邮件主题
$message = "这是一封测试邮件!";//邮件正文
ini_set('SMTP','smtp.163.com');//发送SMTP服务器
ini_set('smtp_port',25);//发送SMTP服务器端口
ini_set('sendmail_from',"admin@163.com");//发件人邮箱地址
邮件($收件人,$主题,$消息);
结果还是错误:
警告:mail() [function.mail]:SMTP 服务器响应:需要 553 身份验证,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S2 1301220947 inD:/www/Zend/email/email.php 第 9 行
分析原因:需要验证信息。验证信息怎么写?在哪里配置呢?带着这些疑问查阅了一些技术文章后,我得出的结论是,使用mail()函数发送电子邮件需要一个无需SMTP认证即可发送信件的邮件服务器。但现在的SMTP邮件服务器基本上都需要身份验证,所以如果你想用它来发送电子邮件,只能在本地架设一个不需要身份验证的SMTP服务器。如何搭建:使用Windows自带的IIS即可,或者从网上下载其他SMTP服务器软件。
结论:要使用mail()函数发送电子邮件,您必须有一个不需要身份验证的SMTP服务器。这样的话配置工作会多一点,但是使用起来会更方便,就几行代码。
2.使用封装SMTP协议的邮件类
这种方法比较常见,尤其是对于广大没有服务器、从网上购买虚拟主机的同学来说。第一种方法不太实用,所以最好使用SMTP协议来发送电子邮件。
不过,要完成这项工作,您需要对 SMTP 协议有一定的了解。喜欢自己动手的同学可以自己写一个,喜欢拿来当工具的同学可以从网上下载。有许多。
不过,我更喜欢使用 PEAR 扩展中的 Mail 类。功能强大:支持纯文本和HTML格式的电子邮件;每个字段都可以设置编码,正确配置不会出现中文乱码;它可以支持附件等。
您可以在服务器上使用 pear install Mail 命令来快速安装。没有足够服务器权限的同学也可以直接下载该课程的PHP源代码并包含它。
注意:Mail类依赖于Net/SMTP.php和Mail/mime.php,使用时需要一起下载并包含在一起。
让我举一个例子来说明如何在 Mail 类中发送电子邮件。使用Internet上其他SMTP邮件类的方法类似。您可以参考:
// Pear 邮件扩展
require_once('Mail.php');
require_once('Mail/mime.php');
require_once('Net/SMTP.php');
$smtpinfo = 数组();
$smtpinfo["host"] = "smtp.163.com";//SMTP服务器
$smtpinfo["端口"] = "25"; //SMTP服务器端口
$smtpinfo["用户名"] = "用户名@163.com"; //发件人邮箱地址
$smtpinfo["password"] = "password";//发件人邮箱密码
$smtpinfo["timeout"] = 10;//网络超时时间,秒
$smtpinfo["auth"] = true;//登录验证
//$smtpinfo["debug"] = true;//调试模式
//接收者列表
$mailAddr = array('receiver@163.com');
//发送方显示信息
$from = "姓名";
//接收者显示信息
$to = implode(',',$mailAddr);
// 邮件标题
$subject = "这是一封测试电子邮件";
// 电子邮件文本
$内容=“
只是写点东西”;
// 电子邮件正文类型、格式和编码
$contentType = "text/html; 字符集=utf-8";
//换行符 Linux: \n Windows: \r\n
$crlf = "\n";
$mime = new Mail_mime($crlf);
$mime->setHTMLBody($content);
$param['text_charset'] = 'utf-8';
$param['html_charset'] = 'utf-8';
$param['head_charset'] = 'utf-8';
$body = $mime->get($param);
$标头=数组();
$headers["来自"] = $from;
$headers["To"] = $to;
$headers["主题"] = $主题;
$headers["内容类型"] = $contentType;
$headers = $mime->headers($headers);
$smtp =& Mail::factory("smtp", $smtpinfo);
$mail = $smtp->send($mailAddr, $headers, $body);
$smtp->断开连接();
如果 (PEAR::isError($mail)) {
//发送失败
echo '邮件发送失败:' . $mail->getMessage()."\n";
别的{
//发送成功
echo "成功!\n";
如果你在网上找到了SMTP类,它们的封装程度很高,所以使用起来会比上面的简单一些,但是使用方法都比较相似。
结论:您不需要安装任何软件就可以通过这种方式发送电子邮件。你只需要包含一个PHP类并多写几行配置代码。并且网上有很多示例代码。很多时候只需要复制它们并修改几个参数就可以使用它们,所以非常方便,推荐使用这种方法。
以上是使用PHP发送电子邮件的两种方法。我有自己的思考过程,希望对大家的学习有所帮助。