第一种方式采用PHP中的mail()函数,在发送之前需要对php.ini进行配置。找到[mail function]去掉SMTP前的分号,改为自己的采用SMTP服务器,还有下面的smtp_port,sendemail_from,sendmail_path等mail_php.ini还有需要修改的就是xampp/sendmail/sendmail.ini,[sendmail]修改smtp_server,smtp_port,将error_logfile和debug_logfile打开,auth_username填写自己在该邮箱上的账号即可,下面的auth_password密码。修改完后重启apache服务器
还有需要修改的就是xampp/sendmail/sendmail.ini,[sendmail]修改smtp_server,smtp_port,将error_logfile和debug_logfile打开,auth_username填写自己在该邮箱上的账号即可,下面的auth_password密码。修改完后重启apache服务器
用最简单的mail()函数发送,第一个参数为收件人的地址,第二个为主题,第三个为正文,当然mail()还有两个可选的参数,规定附加的标题和额外的参数。
mail("iat.net.cn@gmail.com", "Hello", "world");
这就是最简单的一行代码发邮件的例子了,当然这也是很不友好的,有没有连上服务器,有没有发送成功都不知道。
第二种方式采用CMD命令行发送,首先需要开启telnet服务,该服务在windows下是默认关闭的,具体开启的方式如下:“控制面板”?>“程序”?>“打开或关闭windows功能”,然后勾选里面的“telnet服务器”和“telnet客户端”,确认即可。接下来再CMD里输入telent就可以进入服务了。
在使用telent发送邮件之前先介绍一下SMTP协议下的连接发送过程:
(1)建立TCP连接
(2)客户端发送HELO或EHLO命令以标识发件人自己的身份
(3)使用AUTH命令登陆SMTP服务器,输入自己的用户名和密码(这里的用户名和密码是通过base64加密的,可以先用base64_encode()函数加密后将字符串复制过来)
(4)客户端发送RCPT命令,标识该电子邮件的收件方,可以用多个RCPT行,服务器以OK作为响应,表示收件方可以接收
(5)协商结束后,使用DATA命令发送
(6)以“.”表示结束,结束此次发送用QUIT命令
在具体的CMD下应该怎样使用呢?首先telnet到smtp.163.com上,加上端口号25,应为默认的是23会连不上。
接下来会打开一个新的窗口
HELO命令与服务器打个招呼,服务器返回250就代表它也回你招呼了。AUTH login后输入自己的用户名,这里的用户名是base64加密后的,服务器返回334后输入自己的密码,密码也是base64加密的(图片中没有显示),密码验证成功会返回235的Authentication successful。telnet_send接下来就是输入发送方的邮箱和接收方和的邮箱,都是250 MAIL OK后输入DATA命令,以下的就是邮件的内容了,按”.”号退出发送。上述命令并不一定会一次性成功,我试了好多遍,同样的命令上一次不对这一次就对了,服务器可能会返回错误响应,可以多次重复尝试。
第三种方式采用SOCKET发送邮件,主要用到的是fsockopen()函数,该函数的好处是把Socket绑定到一个流上,然后使用各种操作流的函数操作这个Socket连接。这是个算比较完善的类了,出错了会进行提示
|
|
测试代码如下
测试的结果
第四种方式采用开源的PHPMailer类,该类在http://sourceforge.net/projects/phpmailer/files/可以下载到,其中的功能是非常全面的,包括制定多个收件人,抄送地址,暗送地址和回复地址,支持多种邮件编码格式,支持SMTP验证,支持在邮件中嵌入图片,可在任何平台上运行等。
需要调用的是class.smtp.php类,参考网上的测试代码如下
|
|
PHP发送邮件还有其它的方法,之后补充。