使用PHP发送邮件的两种方法

转载 2016年08月30日 21:36:52

http://blog.csdn.net/rainday0310/article/details/6281936


今天研究了一下使用PHP来发送电子邮件,总结了一下,有这么两种方法:

 

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

看了一下手册,就直接开始写代码了,如下

 

[php] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <?php  
  2. $to = "test@163.com"//收件人  
  3. $subject = "Test"//主题  
  4. $message = "This is a test mail!"//正文  
  5. 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服务器,那就使用别人的试试吧,又改了下代码:

[php] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <?php  
  2. $to = "test@163.com";//收件人  
  3. $subject = "Test";//邮件主题  
  4. $message = "This is a test mail!";//邮件正文  
  5. ini_set('SMTP','smtp.163.com');//发件SMTP服务器  
  6. ini_set('smtp_port',25);//发件SMTP服务器端口  
  7. ini_set('sendmail_from',"admin@163.com");//发件人邮箱  
  8. 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 line9

 

看来是需要验证信息,怎么写验证信息呢?在哪里配置呢?上网找了半天也没找出个所以然,最后看了别人一些技术文章后得出结论(由于对SMTP邮件什么的不是非常了解,所以也不知道这个结论是否是正确的):使用mail()函数发送邮件就必须要有一台无需SMTP验证就可以发信的邮件服务器。但现在的SMTP邮件服务器基本上都是需要验证的,所以要想使用它发邮件就只能自己在本地搭一个不需要验证的SMTP服务器。这就比较麻烦了,我是不想整,有兴趣的同学可以自己试试搭一个,用windows自带的IIS就可以,或者从网上下载其他的SMTP服务器软件,我就不多说。

 

结论:使用mail()函数发送邮件,就必须要有一台不需要验证的SMTP服务器。

这样的话配置工作会多一点,但是使用的时候就比较省事了,几行代码就可以。

 

 

二、使用封装SMTP协议的邮件类

 

这种方法就比较常见了,尤其对于广大自己没有服务器,从网上购买虚拟主机的同学,

第一种方法不现实,所以还是自己使用SMTP协议来发送邮件吧。

不过要完成这项工作的话,就需要你对SMTP协议有一定的了解,喜欢事必躬亲的同学可以自己动手写一个,喜欢拿来主义的同学就可以从网上下载了,有很多。

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

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

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

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


下面我举例说明一下在Mail类发送邮件的方法吧,网上其他SMTP邮件类使用方法一块也类似,可以参考:

[php] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <?php  
  2.   
  3. // Pear Mail 扩展  
  4. require_once('Mail.php');  
  5. require_once('Mail/mime.php');  
  6. require_once('Net/SMTP.php');  
  7.   
  8. $smtpinfo = array();  
  9. $smtpinfo["host"] = "smtp.163.com";//SMTP服务器  
  10. $smtpinfo["port"] = "25"//SMTP服务器端口  
  11. $smtpinfo["username"] = "username@163.com"//发件人邮箱  
  12. $smtpinfo["password"] = "password";//发件人邮箱密码  
  13. $smtpinfo["timeout"] = 10;//网络超时时间,秒  
  14. $smtpinfo["auth"] = true;//登录验证  
  15. //$smtpinfo["debug"] = true;//调试模式  
  16.   
  17. // 收件人列表  
  18. $mailAddr = array('receiver@163.com');  
  19.   
  20. // 发件人显示信息  
  21. $from = "Name <username@163.com>";  
  22.   
  23. // 收件人显示信息  
  24. $to = implode(',',$mailAddr);  
  25.   
  26. // 邮件标题  
  27. $subject = "这是一封测试邮件";  
  28.   
  29. // 邮件正文  
  30. $content = "<h3>随便写点什么</h3>";  
  31.   
  32. // 邮件正文类型,格式和编码  
  33. $contentType = "text/html; charset=utf-8";  
  34.   
  35. //换行符号 Linux: \n  Windows: \r\n  
  36. $crlf = "\n";  
  37. $mime = new Mail_mime($crlf);  
  38. $mime->setHTMLBody($content);  
  39.   
  40. $param['text_charset'] = 'utf-8';  
  41. $param['html_charset'] = 'utf-8';  
  42. $param['head_charset'] = 'utf-8';  
  43. $body = $mime->get($param);  
  44.   
  45. $headers = array();  
  46. $headers["From"] = $from;  
  47. $headers["To"] = $to;  
  48. $headers["Subject"] = $subject;  
  49. $headers["Content-Type"] = $contentType;  
  50. $headers = $mime->headers($headers);  
  51.   
  52. $smtp =& Mail::factory("smtp"$smtpinfo);  
  53.   
  54.   
  55. $mail = $smtp->send($mailAddr$headers$body);  
  56. $smtp->disconnect();  
  57.   
  58. if (PEAR::isError($mail)) {  
  59.     //发送失败  
  60.     echo 'Email sending failed: ' . $mail->getMessage()."\n";  
  61. }  
  62. else{  
  63.     //发送成功  
  64.     echo "success!\n";  
  65. }  

如果从网上找的SMTP类都是高度封装的,所以使用起来比上面会更简单,但使用方法都是比较相似的。

 

结论:这种方式发送邮件无需装任何软件,只需要包含进来一个PHP类,然后多写几行配置代码,就可以了。并且网上有很多示例的代码,很多时候只要复制过来然后修改个别的几个参数就可以用了,所以会很方便,推荐使用此方法。


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

1. 使用 mail() 函数没什么好讲的,就是使用系统自带的smtp系统来发送,一般是使用sendmail来发。这个按照各个系统不同而定。使用参考手册。2. 使用管道的形式昨天刚测试成功,使用本地的...
  • heiyeshuwu
  • heiyeshuwu
  • 2005年08月18日 18:05
  • 23503

关于PHP发送邮件的两个类(找了好久......)

需要用PHP发送邮件,不想要PHPmailer那么复杂,找来找去,总算找到了一个好用的,分享出来,PHP邮件发送类,一共包含两个文件.代码如下: sent_mail.php ...
  • qq_16542775
  • qq_16542775
  • 2015年08月20日 22:51
  • 4037

PHPMailer实现邮件发送

很多时候,我们都需要发送邮件给我们的会员,比如注册激活、活动推送等等。 在PHP中实现邮件发送的方法有很多,比如比较新的Swift Mailer 、还有PHPMailer等。在这主要介绍一下PHPMa...
  • zhoulei1995
  • zhoulei1995
  • 2016年07月02日 21:55
  • 1364

PHPMailer模拟队列发送邮件

  • u014114109
  • u014114109
  • 2017年11月16日 15:35
  • 65

调试php没法使用smtp发送邮件的问题

把开发平台转移到ubuntu后,本地开发时遇到了一个问题,magento默认的发邮件方式是用匿名smtp,在window下架匿名smtp服务器很简单,可以使用Mail_Direct_Pro这个软件,简...
  • newjueqi
  • newjueqi
  • 2011年12月22日 15:30
  • 5360

Php-Redis 邮件队列实现总结

Php-Redis 邮件队列实现总结
  • wjc19911118
  • wjc19911118
  • 2016年02月27日 11:29
  • 3348

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

原文:http://www.jbxue.com/php/25502.html 本文介绍了php发送邮件的两种方法,分别是使用PHP内置的mail()函数发送邮件,使用封装SMTP协议的邮件类发送...
  • lorielei
  • lorielei
  • 2015年08月11日 13:55
  • 1359

PHP使用Pear发送邮件-Windows环境

1、PEAR安装 参考该文章:Windows下安装PHP Pear 2、安装Mail,Mail_Mine,Net_SMTP 第一步:在cmd中进入到PHP的运行目录,也就是php.exe。 ...
  • q547550831
  • q547550831
  • 2015年09月06日 12:02
  • 2785

php常量及变量定义方法

1.定义常量define("CONSTANT", "Hello world.");  常量只能包含标量数据(boolean,integer,float 和 string)。  调用常量时,只需要简...
  • u012384954
  • u012384954
  • 2014年04月15日 22:05
  • 1895

PHP发送邮件原理

网站应用中向客户发送邮件是常见的一个功能。SMTP协议貌似简单,而且资料繁多,但要彻底搞清楚客户端服务器之间的身份和关系处理,也不是件容易的事。本文简明扼要对smtp交换过程中身份和条件进行说明,使初...
  • Aryang
  • Aryang
  • 2007年07月03日 17:05
  • 5860
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用PHP发送邮件的两种方法
举报原因:
原因补充:

(最多只允许输入30个字)