首頁 php教程 PHP源码 分享个发邮件API 便于不支持smtp的虚拟空间使用

分享个发邮件API 便于不支持smtp的虚拟空间使用

May 25, 2016 pm 05:04 PM

分享个发邮件API 便于不支持smtp的虚拟空间使用 

<?php
class email
{
     
//通过sock发送e_mail,不支持附件,
//-------------------------------------------------------------------------------------------------------
	function email_sock($host,$port,$errno,$errstr,$timeout,$auth,$user,$pass,$from)//构造函数
	{
		$this->host    = $host;
		$this->port    = $port;
		$this->errno   = $errno;
		$this->errstr  = $errstr;
		$this->timeout = $timeout;
		$this->auth    = $auth;
		$this->user    = $user;
		$this->pass    = $pass;
		$this->from    = $from;
	}
	
	function send_mail_sock($subject,$message,$to,$from_name,$mailformat=0)//邮件标题,邮件内容,收件地址,邮件格式1=text|0=html,默认为0
	{
	   $host    = $this->host;
	   $port    = $this->port;
	   $errno   = $this->errno;
	   $errstr  = $this->errstr;
	   $timeout = $this->timeout;
	   $auth    = $this->auth;
	   $user    = $this->user;
	   $pass    = $this->pass;
	   $from    = $this->from;
	   	   
	   /*
	   1.创建sock,并打开连接
	   2.设置为阻塞模式
	   3.测试smtp应答码是否为220,220代表邮件服务就绪
	   4.发送用户身份验证,由用户设置
	       1=EHLO Host Domain \r\n
		   0=HELO Host Domain \r\n
	   ?.读取服务器端发送给客户端的返回数据
	     smtp.163.com 发送的数据为:
		    250-PIPELINING//流水命令,告诉客户端可以一次发送多个命令来提高速度,在这里PHP
			                并没有使用,因为PHP单个文件的运行还是单线程的
		    250-AUTH LOGIN PLAIN
		    250-AUTH=LOGIN PLAIN
			250 8BITMIME//得到这一行也就是smtp服务器发送结束了,等待客户端发送命令
	   5.发送AUTH LOGIN命令
	   6.发送用户名
	   7.发送密码
	   ?.身份验证过成功后后,
	   8.向服务器添加from
	   9.向服务器添加to
	   10.发送DATA命令,开始输入email数据,以"."号结束
	   11.书写邮件内容
	   12.将邮件内容发送到smtp服务器
	   13.发送QUIT命令,结束会话
	   */  
	   	   $fp = fsockopen($host,$port,$errno,$errstr,$timeout);//打开sock的网络连接
		   if(!$fp){return &#39;1.没有设置好smtp服务&#39;;}
		   		   
		   stream_set_blocking($fp, true);//设置为阻塞模式,此模式读不到数据则会停止在那
		   
		   $mail_return=fgets($fp, 512);//读取512字节内容
		   if(substr($mail_return, 0, 3) != &#39;220&#39;)
		   {return $host.&#39;-2.返回应答码为&#39;.substr($mail_return, 0, 3);}//返回应答码所代表意思请参考&#39;smtp协议.txt&#39;
		   		   
		   
		   fputs($fp, ($auth ? &#39;EHLO&#39; : &#39;HELO&#39;)." ".$host."\r\n");//服务器标识用户身份 1=身份验证的标识,0=不需要身份验证的标识
	       $mail_return = fgets($fp, 512);
		   if(substr($mail_return, 0, 3) != 220 && substr($mail_return, 0, 3) != 250)
		   {return $host.&#39;-3.返回应答码为&#39;.substr($mail_return, 0, 3);}
		   
		   while(true)
		   {
            $mail_return = fgets($fp, 512);
				if(substr($mail_return, 3, 1) != &#39;-&#39; || empty($mail_return))
		        {break;}
	       }	   		
		   
		   
		   if($auth)
		   {
		      fputs($fp, "AUTH LOGIN\r\n");
			  $mail_return = fgets($fp, 512);
			    if(substr($mail_return, 0, 3) != 334) 
				{return $host.&#39;-5.返回应答码为&#39;.substr($mail_return, 0, 3);}
				
			  fputs($fp, base64_encode($user)."\r\n");
			  $mail_return = fgets($fp, 512);
			    if(substr($mail_return, 0, 3) != 334) 
				{return $host.&#39;-6.返回应答码为&#39;.substr($mail_return, 0, 3).&#39;user=&#39;.$user;}
				
			  fputs($fp, base64_encode($pass)."\r\n");
			  $mail_return=fgets($fp, 512);
			    if(substr($mail_return, 0, 3) != 235)
		        {return $host.&#39;-7.用户验证失败,应答码为&#39;.substr($mail_return, 0, 3);}
		   }
		   
//向服务器添加FROM and TO
//------------------------------------------------------------------------------------------------------------------------
		        fputs($fp, "MAIL FROM: ".$from."\r\n");//有两种格式,MAIL FROM:xxx@xx.com和MAIL FROM: <xxx@xx.com>
		       	$mail_return = fgets($fp, 512);
			   	if(substr($mail_return, 0, 3) != 250)
				{
		       	   	fputs($fp, "MAIL FROM: <".$from.">\r\n");
		          	$mail_return = fgets($fp, 512);
		   	      	if(substr($mail_return, 0, 3) != 250)
					{return $host.&#39;-8.返回应答码为&#39;.substr($mail_return, 0, 3);}
		       	}
								
				foreach(explode(&#39;,&#39;, $to) as $mailto)
				{
					$mailto = trim($mailto);
					if($mailto)
					{
						fputs($fp, "RCPT TO: ".$mailto."\r\n");
						$mail_return = fgets($fp, 512);
						if(substr($mail_return, 0, 3) != 250)
						{
							fputs($fp, "RCPT TO: <".$mailto.">\r\n");
							$mail_return = fgets($fp, 512);
							  if(substr($mail_return, 0, 3) != 250)
					          {return $host.&#39;-9.返回应答码为&#39;.substr($mail_return, 0, 3);}
						}
					}
					
				}
//------------------------------------------------------------------------------------------------------------------------
        	fputs($fp, "DATA\r\n");//开始输入email数据,以"."号结束
        	$mail_return = fgets($fp, 512);
			if(substr($mail_return, 0, 3) != 354)
			{return $host.&#39;-10.返回应答码为&#39;.substr($mail_return, 0, 3);}
	
			//邮件内容
			//-----------------------------------------------------------
			     $mail_message           = "From:".$from_name.&#39;<&#39;.$from.">\r\n"; 
			     $mail_message          .= "To:".$to."\r\n"; 
			     $mail_message          .= "Subject:".str_replace("\n",&#39; &#39;,$subject)."\r\n"; 
			     if($mailformat==1)
				{$mail_message          .= "Content-Type: text/html;\r\n"; }
			     else
				{$mail_message          .= "Content-Type: text/plain;\r\n";} 
        // $mail_message          .= "charset=gb2312\r\n\r\n"; 
			     $mail_message          .= $message; 
				 $mail_message          .= "\r\n.\r\n"; 
		    //-----------------------------------------------------------
			
			fputs($fp,$mail_message);
			fputs($fp,"QUIT\r\n");
			
			return 1;
	}
}

?>
登入後複製

 以上就是分享个发邮件API 便于不支持smtp的虚拟空间使用的内容,更多相关内容请关注PHP中文网(www.php.cn)!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理? 如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理? Sep 05, 2023 am 08:41 AM

如何在PHP專案中透過呼叫API介面來實現資料的爬取與處理?一、介紹在PHP專案中,我們經常需要爬取其他網站的數據,並對這些數據進行處理。而許多網站提供了API接口,我們可以透過呼叫這些接口來取得資料。本文將介紹如何使用PHP來呼叫API接口,實現資料的爬取與處理。二、取得API介面的URL和參數在開始之前,我們需要先取得目標API介面的URL以及所需的

如何處理Laravel API報錯問題 如何處理Laravel API報錯問題 Mar 06, 2024 pm 05:18 PM

標題:如何處理LaravelAPI報錯問題,需要具體程式碼範例在進行Laravel開發時,常會遇到API報錯的情況。這些報錯可​​能來自於程式碼邏輯錯誤、資料庫查詢問題或是外部API請求失敗等多種原因。如何處理這些報錯是一個關鍵的問題,本文將透過具體的程式碼範例來示範如何有效處理LaravelAPI報錯問題。 1.錯誤處理在Laravel

React API呼叫指南:如何與後端API互動和資料傳輸 React API呼叫指南:如何與後端API互動和資料傳輸 Sep 26, 2023 am 10:19 AM

ReactAPI呼叫指南:如何與後端API進行互動和資料傳輸概述:在現代的Web開發中,與後端API進行互動和資料傳輸是一個常見的需求。 React作為一個流行的前端框架,提供了一些強大的工具和功能來簡化這個過程。本文將介紹如何使用React來呼叫後端API,包括基本的GET和POST請求,並提供具體的程式碼範例。安裝所需的依賴:首先,確保在專案中安裝了Axi

Oracle API使用指南:探索資料介面技術 Oracle API使用指南:探索資料介面技術 Mar 07, 2024 am 11:12 AM

Oracle是一家全球知名的資料庫管理系統供應商,其API(ApplicationProgrammingInterface,應用程式介面)是一種強大的工具,可協助開發人員輕鬆地與Oracle資料庫互動和整合。在本文中,我們將深入探討OracleAPI的使用指南,向讀者展示如何在開發過程中利用資料介面技術,同時提供具體的程式碼範例。 1.Oracle

Oracle API整合策略解析:實現系統間無縫通信 Oracle API整合策略解析:實現系統間無縫通信 Mar 07, 2024 pm 10:09 PM

OracleAPI整合策略解析:實現系統間無縫通信,需要具體程式碼範例在當今數位化時代,企業內部系統之間需要相互通信和資料共享,而OracleAPI就是幫助實現系統間無縫通信的重要工具之一。本文將從OracleAPI的基本概念和原則入手,探討API整合的策略,最終給出具體的程式碼範例幫助讀者更好地理解和應用OracleAPI。一、OracleAPI基本

使用Python將API資料儲存為CSV格式 使用Python將API資料儲存為CSV格式 Aug 31, 2023 pm 09:09 PM

在資料驅動的應用程式和分析領域,API(應用程式介面)在從各種來源檢索資料方面發揮著至關重要的作用。使用API​​資料時,通常需要以易於存取和操作的格式儲存資料。其中一種格式是CSV(逗號分隔值),它允許有效地組織和儲存表格資料。本文將探討使用強大的程式語言Python將API資料儲存為CSV格式的過程。透過遵循本指南中概述的步驟,我們將學習如何從API中檢索資料、提取相關資訊並將其儲存在CSV檔案中以供進一步分析和處理。讓我們深入了解使用Python進行API資料處理的世界,並釋放CSV格式的潛

開發建議:如何利用ThinkPHP框架進行API開發 開發建議:如何利用ThinkPHP框架進行API開發 Nov 22, 2023 pm 05:18 PM

開發建議:如何利用ThinkPHP框架進行API開發隨著網際網路的不斷發展,API(ApplicationProgrammingInterface)的重要性也日益凸顯。 API是不同應用程式之間進行通訊的橋樑,它可以實現資料共享、功能呼叫等操作,為開發者提供了相對簡單且快速的開發方式。而ThinkPHP框架作為一款優秀的PHP開發框架,具有高效能、可擴展且易用

如何使用MongoDB開發一個簡單的 CRUD API 如何使用MongoDB開發一個簡單的 CRUD API Sep 19, 2023 pm 12:32 PM

如何使用MongoDB開發一個簡單的CRUDAPI在現代的網路應用程式開發中,CRUD(增刪改查)操作是非常常見且重要的功能之一。在本文中,我們將介紹如何使用MongoDB資料庫開發一個簡單的CRUDAPI,並提供具體的程式碼範例。 MongoDB是一個開源的NoSQL資料庫,它以文件的形式儲存資料。與傳統的關聯式資料庫不同,MongoDB沒有預先定義的模式

See all articles