php socket smtp,php用Socket通地SMTP服务器发送电子邮件

php用Socket通地SMTP服务器发送电子邮件

发布于 2014-09-02 21:22:02 | 128 次阅读 | 评论: 0 | 来源: 网友投递

PHP开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php。

*  名称:用Socket发送电子邮件

*  描述:本类实现了直接使用需要验证的SMTP服务器直接发送邮件,参考文章《用Socket发送电子邮件》作者:limodou

*        此文章比较早,他是用不用验证SMTP服务器发送邮件,现在基本上SMTP服务器都需要验证了,所以这个文章里的类

意义也不是很大!同时参考了[RFC 1869]和PHP手册!!和上文还有不同的是我用的不是fsockopen()函数

具体你自己看吧!!我刚刚测试通过了,很爽!!

其实把这个类再改写一下就可以直接发送带附件的邮件了,期待。。。我过几天给大家写出来!

我刚刚调试通过,如果你不恶意去捉弄这个程序,他还是很听话的,过些日子我会对他完善加上发送附件的功能!!

即使你的虚拟主机不支持MAIL函数,现在也不怕了!快快试试这个吧!

*/

set_time_limit(120);

class smtp_mail

{

var $host;          //主机

var $port;          //端口 一般为25

var $user;          //SMTP认证的帐号

var $pass;          //认证密码

var $debug = false;   //是否显示和服务器会话信息?

var $conn;

var $result_str;      //结果

var $in;          //客户机发送的命令

var $from;          //源信箱

var $to;          //目标信箱

var $subject;         //主题

var $body;          //内容

function smtp_mail($host,$port,$user,$pass,$debug=false)

{

$this->host   = $host;

$this->port   = $port;

$this->user   = base64_encode($user);

$this->pass   = base64_encode($pass);

$this->debug  = $debug;

$this->socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);  //具体用法请参考手册

if($this->socket)

{

$this->result_str  =  "创建SOCKET:".socket_strerror(socket_last_error());

$this->debug_show($this->result_str);

}

else

{

exit("初始化失败,请检查您的网络连接和参数");

}

$this->conn = socket_connect($this->socket,$this->host,$this->port);

if($this->conn)

{

$this->result_str  =  "创建SOCKET连接:".socket_strerror(socket_last_error());

$this->debug_show($this->result_str);

}

else

{

exit("初始化失败,请检查您的网络连接和参数");

}

$this->result_str = "服务器应答:".socket_read ($this->socket, 1024)."";

$this->debug_show($this->result_str);

}

function debug_show($str)

{

if($this->debug)

{

echo $str."

rn";

}

}

function send($from,$to,$subject,$body)

{

if($from == "" || $to == "")

{

exit("请输入信箱地址");

}

if($subject == "") $sebject = "无标题";

if($body    == "") $body    = "无内容";

$this->from     =  $from;

$this->to       =  $to;

$this->subject  =  $subject;

$this->body     =  $body;

$All          = "From:".$this->from."n";

$All          .= "To:".$this->to."n";

$All          .= "Subject:".$this->subject."n";

$All          .= $this->body;

/*

如过把$All的内容再加处理,就可以实现发送MIME邮件了

不过还需要加很多程序

*/

//以下是和服务器会话

$this->in       =  "EHLO HELOrn";

$this->docommand();

$this->in       =  "AUTH LOGINrn";

$this->docommand();

$this->in       =  $this->user."rn";

$this->docommand();

$this->in       =  $this->pass."rn";

$this->docommand();

$this->in       =  "MAIL FROM:".$this->from."rn";

$this->docommand();

$this->in       =  "RCPT TO:".$this->to."rn";

$this->docommand();

$this->in       =  "DATArn";

$this->docommand();

$this->in       =  $All."rn.rn";

$this->docommand();

$this->in       =  "QUITrn";

$this->docommand();

//结束,关闭连接

}

function docommand()

{

socket_write ($this->socket, $this->in, strlen ($this->in));

$this->debug_show("客户机命令:".$this->in);

$this->result_str = "服务器应答:".socket_read ($this->socket, 1024)."";

$this->debug_show($this->result_str);

}

}

//这个是我做的测试,我用的是smtp.163.com,那你的信箱也必须是163.com的,要不人家不让你发!!

//你用这个类的时候你修改成你自己的信箱就可以了

$smtp  =   new smtp_mail("smtp.163.com","25","你的163.com的帐号","你的密码");

//如果你需要显示会话信息,请将上面的修改成

//$smtp  =   new smtp_mail("smtp.163.com","25","你的163.com的帐号","你的密码",true);

$smtp->send("你的163.com的帐号@163.com","目标地址","你好","你好");

?>

相关阅读:

php用Socket通地SMTP服务器发送电子邮件

php 用Socket技术发送邮件的函数

php用Socket发送电子邮件

PHP用Socket上传图片的方法示例

php利用smtp类实现电子邮件发送

php基于socket实现SMTP发送邮件的方法

php socket客户端及服务器端应用实例

php模拟socket一次连接,多次发送数据的实现代码

PHP实现Socket服务器的代码

用定制的PHP应用程序来获取Web服务器的状态信息

php通过Socket发送email

PHP向socket服务器收发数据的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Java Socket类与SMTP服务器通信并发送电子邮件的Servlet示例: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SendEmailServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取邮件相关信息 String toAddress = request.getParameter("toAddress"); String subject = request.getParameter("subject"); String message = request.getParameter("message"); // SMTP服务器信息 String host = "smtp.example.com"; int port = 25; // 发件人和收件人信息 String fromAddress = "sender@example.com"; String username = "sender@example.com"; String password = "password"; // 建立Socket连接 Socket socket = new Socket(host, port); // 创建输入输出流 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); // 接收服务器欢迎信息 String welcomeMsg = in.readLine(); System.out.println(welcomeMsg); // 发送EHLO命令 out.println("EHLO " + host); // 接收服务器回应 String ehloMsg = ""; while ((ehloMsg = in.readLine()) != null) { System.out.println(ehloMsg); if (ehloMsg.indexOf("250 ") == 0) { break; } } // 发送AUTH LOGIN命令 out.println("AUTH LOGIN"); // 接收服务器回应 String authMsg = in.readLine(); System.out.println(authMsg); // 发送用户名和密码 out.println(new String(Base64.getEncoder().encode(username.getBytes()))); out.println(new String(Base64.getEncoder().encode(password.getBytes()))); // 发送MAIL FROM命令 out.println("MAIL FROM: <" + fromAddress + ">"); // 接收服务器回应 String mailFromMsg = in.readLine(); System.out.println(mailFromMsg); // 发送RCPT TO命令 out.println("RCPT TO: <" + toAddress + ">"); // 接收服务器回应 String rcptToMsg = in.readLine(); System.out.println(rcptToMsg); // 发送DATA命令 out.println("DATA"); // 接收服务器回应 String dataMsg = in.readLine(); System.out.println(dataMsg); // 发送邮件内容 out.println("From: " + fromAddress); out.println("To: " + toAddress); out.println("Subject: " + subject); out.println(""); out.println(message); out.println("."); // 接收服务器回应 String sendMsg = in.readLine(); System.out.println(sendMsg); // 发送QUIT命令 out.println("QUIT"); // 关闭Socket连接 socket.close(); // 返回结果 response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h2>Email sent successfully.</h2>"); out.println("</body></html>"); } } ``` 上述代码中,我们建立了一个Socket连接到SMTP服务器,并通过输入输出流发送SMTP命令来完成邮件发送的过程。在实际应用中,我们需要将邮件相关信息从前端表单中获取并传递给Servlet来完成邮件发送的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值