0 前言
0.1 简介
发送邮件有两种不同的方式。
1、是直接通过php中的mail()函数进行发信,
需要程序所在服务器的支持,通常linux服务器大多有这项服务。比如之前我用的Godaddy主机就可以进行发信,但是国内主机服务商则基本不带这个函数的支持。因为在这个垃圾邮件横行霸道的年代,服务器提供商则索性关闭这个函数的使用,所以大家很难可以调用mail()进行发信。具体测试大家可以调用<? php phpinfo(); ?>来查看自己的服务器是否支持这个函数。
2、是通过写一些程序来通过stmp服务来进行发信。
虽然可以实现发邮件这个功能,但是需要自己写相关程序带调用stmp服务器的使用。网上也有相关现成的程序可以直接拿来用。但是毕竟没有mail()函数来的直接,来的快。虚拟主机用户还是选择stmp来进行发邮件的操作。如果是vps或者服务器主机用户则推荐使用第一种方式。
0.2 我的系统配置
系统版本:windows11我的Apache版本是 2.4.39php 我试过,5.3.29nts 和 8.2.12,都可以运行成功,所以你要是运行失败,不是php的锅
1 sendmail下载:
官网:https://www.glob.com.au/sendmail/
备份地址:http://pan.baidu.com/s/1eRC43aM ( 密码:6hci )
如果地址均已失效,可以去下载一个xampp,安装好以后里面自带sendmail文件夹,把它复制出来即可
xampp下载地址链接:https://pan.baidu.com/s/17f0jtvbFx71R_91uaOhNPg?pwd=sk5z
提取码:sk5z
下载以后解压,然后随便放在一个目录下,比如我放在:D:\xampp 文件夹下
2 配置
2.1 配置 php.ini
[mail function] SMTP=localhost smtp_port=25 sendmail_path = ""D:\xampp\sendmail\sendmail.exe" -t"
mail.add_x_header=Off mail.mixed_lf_and_crlf=Off
将sendmail_path改成你的地址
其实只要一行就可以了,其他的都可以屏蔽掉,我后来又在phpstudy里按以下写法测试过,
[mail function]
sendmail_path = "D:\sendmail\sendmail.exe -t -i" ;你的sendmail安装的位置
2.2 配置 sendmail.ini
qq邮箱采用auth_password方式:配置过outlook的都知道怎么获得授权码,不明白自行百度:qq邮箱、授权码 、outlook配置等关键词
[sendmail] smtp_server=smtp.qq.com smtp_port=465 ;端口号不是默认的25,qq邮箱是465,其他邮箱我不没测试过不知道。网上的资料都说是25,其实还是要去qq邮箱查看才行。 smtp_ssl=auto error_logfile=error.log auth_username=22222@qq.com ;这里写你的QQ邮箱 auth_password=xxxxxxx ; 注意,这里填写的不是你邮箱的密码,而是授权码!授权码也是在QQ设置里面可以获得,这里我就不截图了 force_sender=22222@qq.com ;同样,这里也是写你的QQ邮箱
配置完要重启你的服务器
3 emial函数,发一个简单的邮件试试看
$to = "111111@qq.com"; $subject = '你的标题'; $body = '你的内容'; $from_name = 'ttt';//你的邮箱昵称 可以瞎写一个 但不能没有 $from_email = '222222@qq.com'; //你用来发邮件的邮箱,即你刚刚在sendmail.ini中填写的邮箱 //qq邮箱From行必须要有,且必须按照 昵称 <你的邮箱> 的格式,不然会报错 $headers = "From: $from_name <$from_email>" . "\r\n"; //Reply-To 可以省略 //$headers .= "Reply-To: $to" . "\r\n" ; //MIME-Version 可以省略 //$headers .= 'MIME-Version: 1.0' . "\r\n"; //CC行可省略 //$headers .= "CC: 3333333@qq.com"."\r\n" ; //Content-type: 行可省略 //$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //X-Mailer 行可省略 //$headers .= 'X-Mailer: PHP/' . phpversion(); if (mail($to, $subject, $body,$headers)) { echo '发送成功!'; } else { echo '发送失败,去 D:\xampp\apache\logs\error.log文件中查找错误原因'; }
参考
Windows系统XAMPP通过sendmail.exe发送邮件设置,以163&QQ邮箱为例。 https://www.jianshu.com/p/a59c240e614c
在windows下配置sendmail服务器 https://www.jianshu.com/p/2bdc4c60ae40
https://blog.csdn.net/chengjianghao/article/details/103933784
https://blog.csdn.net/zjy1125/article/details/123598563
Windows下面配置sendmail邮件服务器 https://blog.csdn.net/zhezhebie/article/details/56495950