失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > php基于socket实现SMTP发送邮件办法

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

时间:2023-03-05 18:36:53

相关推荐

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

php教程|php手册

php,socket,SMTP,发送邮件,方法

php教程-php手册

有游戏交易平台源码,ubuntu7r,爬虫学家奥斯汀响尾蛇,php tricks,安国seo推广lzw

这篇文章主要介绍了php基于socket实现SMTP发送邮件的方法,实例分析了php采用socket实现smtp发送邮件的原理与技巧,具有一定参考借鉴价值,需要的朋友可以参考下

致依娱乐网源码,ubuntu的磁盘标签,python爬虫使用技巧,php urlcode(),seo写法视频lzw

d2common.dll 源码,vscode彩色注释,ubuntu袖珍,tomcat和apatch,易语言sqlite筛选,人人商城插件源码怎么安装,前端框架自动化测试,普洱爬虫技术前途,php 过滤 敏感词,seo标题分词技术,苹果手机下载小说网站源码,网页设计 滚动图片,悬浮在海洋底的网页模板lzw

php采用socket通过SMTP发送邮件。

用的是php的php-sockets扩展,可以发送纯文本和html格式的邮件。代码如下:

复制代码 代码如下:

<?php

/**

* 邮件发送类

* 支持发送纯文本邮件和HTML格式的邮件

* @example

* $config = array(

* “from” => “*****”,

* “to” => “***”,

* “subject” => “test”,

* “body” => “test“,

* “username” => “***”,

* “password” => “****”,

* “isHTML” => true

* );

*

* $mail = new MySendMail();

*

* $mail->setServer(“”);

*

* $mail->setMailInfo($config);

* if(!$mail->sendMail()) {

* echo $mail->error();

* return 1;

* }

*/

class MySendMail {

/**

* @var 邮件传输代理用户名

* @access private

*/

private $_userName;

/**

* @var 邮件传输代理密码

* @access private

*/

private $_password;

/**

* @var 邮件传输代理服务器地址

* @access protected

*/

protected $_sendServer;

/**

* @var 邮件传输代理服务器端口

* @access protected

*/

protected $_port=25;

/**

* @var 发件人

* @access protected

*/

protected $_from;

/**

* @var 收件人

* @access protected

*/

protected $_to;

/**

* @var 主题

* @access protected

*/

protected $_subject;

/**

* @var 邮件正文

* @access protected

*/

protected $_body;

/**

* @var 是否是HTML格式的邮件

* @access protected

*/

protected $_isHTML=false;

/**

* @var socket资源

* @access protected

*/

protected $_socket;

/**

* @var 错误信息

* @access protected

*/

protected $_errorMessage;

public function __construct($from=””, $to=””, $subject=””, $body=””, $server=””, $username=””, $password=””,$isHTML=””, $port=””) {

if(!empty($from)){

$this->_from = $from;

}

if(!empty($to)){

$this->_to = $to;

}

if(!empty($subject)){

$this->_subject = $subject;

}

if(!empty($body)){

$this->_body = $body;

}

if(!empty($isHTML)){

$this->_isHTML = $isHTML;

}

if(!empty($server)){

$this->_sendServer = $server;

}

if(!empty($port)){

$this->_port = $port;

}

if(!empty($username)){

$this->_userName = $username;

}

if(!empty($password)){

$this->_password = $password;

}

}

/**

* 设置邮件传输代理

* @param string $server 代理服务器的ip或者域名

* @param int $port 代理服务器的端口,smtp默认25号端口

* @param int $localPort 本地端口

* @return boolean

*/

public function setServer($server, $port=25) {

if(!isset($server) || empty($server) || !is_string($server)) {

$this->_errorMessage = “first one is an invalid parameter”;

return false;

}

if(!is_numeric($port)){

$this->_errorMessage = “first two is an invalid parameter”;

return false;

}

$this->_sendServer = $server;

$this->_port = $port;

return true;

}

/**

* 设置邮件

* @access public

* @param array $config 邮件配置信息

* 包含邮件发送人、接收人、主题、内容、邮件传输代理的验证信息

* @return boolean

*/

public function setMailInfo($config) {

if(!is_array($config) || count($config) < 6){

$this->_errorMessage = “parameters are required”;

return false;

}

$this->_from = $config[‘from’];

$this->_to = $config[‘to’];

$this->_subject = $config[‘subject’];

$this->_body = $config[‘body’];

$this->_userName = $config[‘username’];

$this->_password = $config[‘password’];

if(isset($config[‘isHTML’])){

$this->_isHTML = $config[‘isHTML’];

}

return true;

}

/**

* 发送邮件

* @access public

* @return boolean

*/

public function sendMail() {

$command = $this->getCommand();

$this->socket();

foreach ($command as $value) {

if($this->sendCommand($value[0], $value[1])) {

continue;

}

else{

return false;

}

}

$this->close(); //其实这里也没必要关闭,smtp命令:QUIT发出之后,,服务器就关闭了连接,本地的socket资源会自动释放

echo ‘Mail OK!’;

return true;

}

/**

* 返回错误信息

* @return string

*/

public function error(){

if(!isset($this->_errorMessage)) {

$this->_errorMessage = “”;

}

return $this->_errorMessage;

}

/**

* 返回mail命令

* @access protected

* @return array

*/

protected function getCommand() {

if($this->_isHTML) {

$mail = “MIME-Version:1.0\r\n”;

$mail .= “Content-type:text/html;charset=utf-8\r\n”;

$mail .= “FROM:test_from . “>\r\n”;

$mail .= “TO:_to . “>\r\n”;

$mail .= “Subject:” . $this->_subject .”\r\n\r\n”;

$mail .= $this->_body . “\r\n.\r\n”;

}

else{

$mail = “FROM:test_from . “>\r\n”;

$mail .= “TO:_to . “>\r\n”;

$mail .= “Subject:” . $this->_subject .”\r\n\r\n”;

$mail .= $this->_body . “\r\n.\r\n”;

}

$command = array(

array(“HELO sendmail\r\n”, 250),

array(“AUTH LOGIN\r\n”, 334),

array(base64_encode($this->_userName) . “\r\n”, 334),

array(base64_encode($this->_password) . “\r\n”, 235),

array(“MAIL FROM:_from . “>\r\n”, 250),

array(“RCPT TO:_to . “>\r\n”, 250),

array(“DATA\r\n”, 354),

array($mail, 250),

array(“QUIT\r\n”, 221)

);

return $command;

}

/**

* @access protected

* @param string $command 发送到服务器的smtp命令

* @param int $code 期望服务器返回的响应吗

* @param boolean

*/

protected function sendCommand($command, $code) {

echo ‘Send command:’ . $command . ‘,expected code:’ . $code . ‘

‘;

//发送命令给服务器

try{

if(socket_write($this->_socket, $command, strlen($command))){

//读取服务器返回

$data = trim(socket_read($this->_socket, 1024));

echo ‘response:’ . $data . ‘

‘;

if($data) {

$pattern = “/^”.$code.”/”;

if(preg_match($pattern, $data)) {

return true;

}

else{

$this->_errorMessage = “Error:” . $data . “|**| command:”;

return false;

}

}

else{

$this->_errorMessage = “Error:” . socket_strerror(socket_last_error());

return false;

}

}

else{

$this->_errorMessage = “Error:” . socket_strerror(socket_last_error());

return false;

}

}catch(Exception $e) {

$this->_errorMessage = “Error:” . $e->getMessage();

}

}

/**

* 建立到服务器的网络连接

* @access private

* @return boolean

*/

private function socket() {

if(!function_exists(“socket_create”)) {

$this->_errorMessage = “extension php-sockets must be enabled”;

return false;

}

//创建socket资源

$this->_socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname(‘tcp’));

if(!$this->_socket) {

$this->_errorMessage = socket_strerror(socket_last_error());

return false;

}

//连接服务器

if(!socket_connect($this->_socket, $this->_sendServer, $this->_port)) {

$this->_errorMessage = socket_strerror(socket_last_error());

return false;

}

socket_read($this->_socket, 1024);

return true;

}

/**

* 关闭socket

* @access private

* @return boolean

*/

private function close() {

if(isset($this->_socket) && is_object($this->_socket)) {

$this->_socket->close();

return true;

}

$this->_errorMessage = “no resource can to be close”;

return false;

}

}

/**************************** Test ***********************************/

$config = array(

“from” => “XXXXX”,

“to” => “XXXXX”,

“subject” => “test”,

“body” => “test“,

“username” => “XXXXX”,

“password” => “******”,

//”isHTML” => true

);

$mail = new MySendMail();

$mail->setServer(“”);

$mail->setMailInfo($config);

if(!$mail->sendMail()) {

echo $mail->error();

return 1;

}

如果觉得《php基于socket实现SMTP发送邮件办法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。