PHP 利用 smtp服务器发送邮件

本文介绍如何通过开启163及QQ邮箱的POP3/SMTP服务来配置SMTP服务器,并提供了使用PHP进行邮件发送的具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 最近在开发木子1.3 版本的系统时 遇到,本来是想利用PHP 自带的 mail函数,发现不好用,于是转到用smtp服务器发邮件,也学打些东西,拿出来与大家交流一下
首先我们需要一个smtp 服务器,这里教大家申请一个smtp服务器,我自己用得是QQ的smtp服务器

一,教你怎么开启163邮箱的POP3/SMTP服务
1,登陆你的163邮箱,点击右上角的“设置”
163.jpg
2,点击“客户端设置”
163-1.jpg
3,勾选“开启POP3/SMTP服务”,保存即可
163-2.jpg
二,教你怎么开启QQ邮箱的POP3/SMTP服务
1,登陆你的QQ邮箱,点击上面的“设置”---“帐户”
qq.jpg
2,勾选“开启POP3/SMTP服务”,保存即可
qq-2.jpg



好了,按照上面的步骤,你已经有了smtp 服务器,可以开始发邮件了

php 链接服务器
$smtp = 'smtp.qq.com';
$usename = '你的邮箱用户名';
$usepass = '你的邮箱密码';
$mail_from = '123456789@qq.com';
$mail_to = '987654321@qq.com';
$fp = fsockopen($smtp,25,$error,$errstr);
fputs($fp,"HELO mzrui"."\r\n");
$message .=fgets($fp,2000);
fputs($fp,"AUTH LOGIN"."\r\n");
$message .=fgets($fp,2000);
fputs($fp,base64_encode($usename)."\r\n");
$message .=fgets($fp,2000);
fputs($fp,base64_encode($usepass )."\r\n");
$message .=fgets($fp,2000);
fputs($fp,"MAIL FROM: $mail_from"."\r\n");
$message .=fgets($fp,2000);
fputs($fp,"RCPT TO:".$mail_to."\r\n");
$message .=fgets($fp,2000);
fputs($fp,"DATA "."\r\n");
$message .=fgets($fp,2000);
fputs($fp,"From: $mail_from"."\r\n");
fputs($fp,"Subject:".$mail_sub."\r\n"); //邮件标题
fputs($fp,"To:".$mail_to."\r\n");
fputs($fp,"Date: ".date("r")."\r\n"); //邮件日期
fputs($fp,"\r\n");
fputs($fp,$mail_subj . "\r\n"); //邮件内容
fputs($fp,"." . "\r\n");
$message .=fgets($fp,2000);
$message .=fgets($fp,2000);

fputs($fp,"QUIT "."rn");
fclose($fp);


附:SMTP基本命令集:
命令       描述
——————————
HELO      向服务器标识用户身份发送者能欺骗,说谎,但一般情况下服务器都能检测到。
MAIL      初始化邮件传输
          mail form :
RCPT      标识单个的邮件接收人;常在MAIL命令后面  可有多个rcpt to:
DATA      在单个或多个RCPT命令后,表示所有的邮件接收人已标识,并初始化数据传输结束。
VRFY      用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令
EXPN      验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELP      查询服务器支持什么命令
NOOP      无操作,服务器应响应OK
QUIT      结束会话
RSET      重置会话,当前传输被取消


分析与SMTP会话的一般流程
1. HELO XXX \r\n //XXX就是自己起个名字,和服务器打个招呼
返回 250 表示成功
2. AUTH LOGIN \r\n //请求与服务器开始验证用户(登陆)
返回 334 表示成功
3. 用户名 \r\n //直接发送用户名PHP中将用户名base64_encode()下
返回 334 表示成功
4. 密码 \r\n //直接发送密码PHP中将密码base64_encode()下
返回235表示成功
5. MAIL FROM \r\n //发件人邮箱地址,一般和上面的用户名密码对应的油箱
返回 250 表示成功
6. RCPT TO \r\n //收件人地址
返回 250 表示成功
7. DATA \r\n //告诉服务器下面开始传输邮件
返回 354 表示成功
8. 传输邮件数据:可以发送邮件了,格式为
From:回信人地址 \r\n //貌似可以写别人的,嘿嘿
Subject:邮件标题 \r\n
To:收件人地址 \r\n
\r\n
正文数据 \r\n
以这个格式发送至服务器,返回250表示发送成功
9. QUIT \r\n 断开连接
返回 221 表示成功

 

原文地址:http://www.mzrui.com/forum.php?mod=viewthread&tid=165&extra=page%3D1

http://www.mzrui.com 木子建站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值