欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php发送邮件二种方法 php使用smtp发送邮件

程序员文章站 2024-01-28 13:10:58
...
原文:http://www.jbxue.com/php/25502.html
本文介绍了php发送邮件的两种方法,分别是使用PHP内置的mail()函数发送邮件,使用封装SMTP协议的邮件类发送邮件,推荐使用smtp协议封装的邮件类实现邮件发送。

php如何发送邮件呢?方法有很多,但用的最多的还是使用smtp协议来发送邮件,一起来学习下吧。
专题推荐:php发邮件代码大全

一、使用php内置的mail()函数

复制代码 代码示例:

$to = "test@163.com"; //收件人
$subject = "Test"; //主题
$message = "This is a test mail!"; //正文
mail($to,$subject,$message);

直接报错:
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() inD:/www/Zend/email/email.php on line 10

本地需要有smtp服务器,代码修改为:

复制代码 代码示例:

$to = "test@163.com";//收件人
$subject = "Test";//邮件主题
$message = "This is a test mail!";//邮件正文
ini_set('SMTP','smtp.163.com');//发件SMTP服务器
ini_set('smtp_port',25);//发件SMTP服务器端口
ini_set('sendmail_from',"admin@163.com");//发件人邮箱
mail($to,$subject,$message);

继续错误:
Warning: mail() [function.mail]: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S2 1301220947 inD:/www/Zend/email/email.php on line 9

需要验证信息,怎么写验证信息呢?在哪里配置呢?

使用mail()函数发送邮件就必须要有一台无需SMTP验证就可以发信的邮件服务器。但现在的SMTP邮件服务器基本上都是需要验证的,所以要想使用它发邮件就只能自己在本地搭一个不需要验证的SMTP服务器。
结论:使用mail()函数发送邮件,就必须要有一台不需要验证的SMTP服务器。

二、使用封装SMTP协议的邮件类
建议使用SMTP协议来发送邮件。

比较推荐使用PEAR扩展中的Mail类,功能强大:可以支持纯文本、HTML格式的邮件;各字段都可设置编码,正确配置不会出现中文乱码情况;可以支持附件等等。

在服务器可以使用 pear install Mail 命令快速安装,没有足够服务器权限的同学也可以直接下载类的PHP源码包含进来就可以了。

注:Mail类依赖 Net/SMTP.php 和 Mail/mime.php ,要一块下载,使用时一块包含进来。

详细安装方法可以在官网查看,http://pear.php.net/package/Mail。

例子,Mail类发送邮件的方法。

复制代码 代码示例:

// Pear Mail 扩展
require_once('Mail.php');
require_once('Mail/mime.php');
require_once('Net/SMTP.php');

$smtpinfo = array();
$smtpinfo["host"] = "smtp.163.com";//SMTP服务器
$smtpinfo["port"] = "25"; //SMTP服务器端口
$smtpinfo["username"] = "username@163.com"; //发件人邮箱
$smtpinfo["password"] = "password";//发件人邮箱密码
$smtpinfo["timeout"] = 10;//网络超时时间,秒
$smtpinfo["auth"] = true;//登录验证
//$smtpinfo["debug"] = true;//调试模式

// 收件人列表
$mailAddr = array('receiver@163.com');

// 发件人显示信息
$from = "Name ";

// 收件人显示信息
$to = implode(',',$mailAddr);

// 邮件标题
$subject = "这是一封测试邮件";

// 邮件正文
$content = "

随便写点什么

";

// 邮件正文类型,格式和编码
$contentType = "text/html; charset=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 = array();
$headers["From"] = $from;
$headers["To"] = $to;
$headers["Subject"] = $subject;
$headers["Content-Type"] = $contentType;
$headers = $mime->headers($headers);

$smtp =& Mail::factory("smtp", $smtpinfo);


$mail = $smtp->send($mailAddr, $headers, $body);
$smtp->disconnect();

if (PEAR::isError($mail)) {
//发送失败
echo 'Email sending failed: ' . $mail->getMessage()."\n";
}
else{
//发送成功
echo "success!\n";
}

以上就介绍了php发送邮件二种方法 php使用smtp发送邮件,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。