`
willeager
  • 浏览: 95192 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

使用SMTP发送邮件

    博客分类:
  • PHP
阅读更多
$params = array (
	'SmtpServer' => 'mail.XXX.com',
	'SmtpAuth' => '1',
	'SmtpUser' => 'system@XXX.com',
	'SmtpPassword' => 'XXX',
	'SystemMailer' => 'Cor Inc.',
	'SystemMailAddress' => 'system@XXX.com',
);
define("MAIL_SMTP_SERVER", $params['SmtpServer']);
define("MAIL_AUTH", $params['SmtpAuth']);
define("MAIL_USERNAME", $params['SmtpUser']);
define("MAIL_PASSWORD", $params['SmtpPassword']);
define('SYSTEM_MAILER', $params['SystemMailer']);
define("SUPPORT_EMAIL",$params['SystemMailAddress']);

/**
 * 通过SMTP发送邮件
 *
 * @param array $to 
 * 例 array("will"=>"will@126.com") 数组key值为收件人姓名,数组value值为收件人邮件地址, 可同时多个收件人;
 * @param string $from_name 发件人姓名
 * @param string $from 发件人邮件地址
 * @param string $subject 邮件主题
 * @param string $message 邮件内容 注:支持HTML
 * @param string $charset 邮件编码 默认指定为gbk
 * @return int
 * 返回值 0 为发送成功, 非0时为发送失败.
 */
function SendMail($to, $from_name,$from, $subject, $message , $charset="gbk")
{
	//发送邮件
    if(!$from_name) $from_name = SYSTEM_MAILER;
    if(!$from) $from = SUPPORT_EMAIL;
	if( SYSTEM_MAILER && function_exists('mail'))//使用sendmail组件发送邮件
	{
		$message = str_replace("\r", '', $message);	
		if(!is_array($to))  return -7;
		foreach($to as $key=>$email)
		{   
			if($email)
			{
				@mail($email, $subject, $message, "From: $from");						
			}           			
		}
		
	}
	else //使用SMTP发送邮件
	{	
		//return SmtpSendMail($tmp, $from_name,$from, $subject, $message, $charset);
		//大量邮件群发
		if(is_array($to)){
			foreach($to as $key=>$value){
				$tmp[$key]=$value;
				if(count($tmp)==10){
					$result[]=SmtpSendMail($tmp, $from_name,$from, $subject, $message, $charset);
					$tmp="";
				}				
			}
			if($tmp){
				return SmtpSendMail($tmp, $from_name,$from, $subject, $message, $charset);
			}else{
				return array_pop($result);
			}
		}else{
			return -7;
		}
	}		
 	return 0;
}
function SmtpSendMail($to, $from_name,$from, $subject, $message, $charset="gbk")
{
	$smtp = explode(":",MAIL_SMTP_SERVER);
	$check = MAIL_AUTH;

    $smtp_host = $smtp[0];
    $smtp_port = $smtp[1] ? $smtp[1] : 25;

    $mail_debug = $GLOBALS['queue_debug'];

	if ($check) {
		$username = MAIL_USERNAME;
		$password = MAIL_PASSWORD;
	}
	
	$s_from = SUPPORT_EMAIL;

  	$fp = @fsockopen ($smtp_host, $smtp_port, $errno, $errstr, 10); 

 	if (!$fp ) return -1;

    if(function_exists("stream_set_blocking")){
        stream_set_blocking($fp, true);
    } else {
        set_socket_blocking($fp, true ); 
    }

    stream_set_timeout($fp,10);
 	
	$lastmessage=fgets($fp,512);
    
    //调式信息
    if($mail_debug){
        echo $lastmessage."\r\n";
    }

	if ( substr($lastmessage,0,3) != 220 ) return -1; 

 	$yourname = "YOURNAME";
 	if($check == "1") $lastact="HELO ".$yourname."\r\n";
	else $lastact="HELO ".$yourname."\r\n";
	
	fputs($fp, $lastact);
	$lastmessage == fgets($fp,512);

    //调式信息
    if($mail_debug){
        echo $lastact;
        echo $lastmessage;
    }

	if (substr($lastmessage,0,3) != 220 ) return -2;

	if ($check=="1") {
		$lastact="AUTH LOGIN"."\r\n";
		fputs( $fp, $lastact);
		$lastmessage = fgets ($fp,512);

        //调式信息
        if($mail_debug){
            echo $lastact;
            echo $lastmessage;
        }

		if (substr($lastmessage,0,3) != 334) return -3; 
		$lastact=base64_encode($username)."\r\n";
		fputs( $fp, $lastact);
		$lastmessage = fgets ($fp,512);

                //调式信息
        if($mail_debug){
            echo $lastact;
            echo $lastmessage;
        }

		if (substr($lastmessage,0,3) != 334) return -4;
		$lastact=base64_encode($password)."\r\n";
		fputs( $fp, $lastact);
		$lastmessage = fgets ($fp,512);

                //调式信息
        if($mail_debug){
            echo $lastact;
            echo $lastmessage;
        }

		if (substr($lastmessage,0,3) != "235") return -5;
	}
	
	$lastact="MAIL FROM: <$s_from>\r\n"; 
	fputs( $fp, $lastact);
	$lastmessage = fgets ($fp,512);

        //调式信息
    if($mail_debug){
        echo $lastact;
        echo $lastmessage;
    }

	if (substr($lastmessage,0,3) != 250) return -6;
	$i=0;
	if(is_array($to)){
		foreach($to as $key=>$email){
			if($email){
                $lastact = "RCPT TO: <$email>\r\n";
				fputs( $fp, $lastact);
				$lastmessage = fgets ($fp,512);

                //调式信息
                if($mail_debug){
                    echo $lastact;
                    echo $lastmessage;
                }

				if (substr($lastmessage,0,3) == 250){
					//return -7;
					$i++;
				}
				$tomails[]="$key<$email>";
			}
		}
		if($i<1) return -7;
	}
	else{
		return -7;
	}
	$lastact="DATA\r\n";
	fputs($fp, $lastact);
	$lastmessage = fgets ($fp,512);

    //调式信息
    if($mail_debug){
        echo $lastact;
        echo $lastmessage;
    }

	if (substr($lastmessage,0,3) != 354) return -8;

    $head    .=    "MIME-Version: 1.0\r\n";
    $head    .=    "Content-type: text/html; charset=$charset\r\n";	
 	$head    .=    "Subject: $subject\r\n"; 
	$message = $head."\r\n".$message; 
 	 
 
  	$head="From: \"".$from_name."\" <$from>\r\n"; 
	$message = $head.$message; 
  
  	//$head="To: \"".$to_name."\" <$to>\r\n";
  	$head="To: ".implode(",",$tomails)."\r\n";
 	$message = $head.$message;
 	 
   	$message .= "\r\n.\r\n";
 	
  	fputs($fp, $message); 

        //调式信息
    if($mail_debug){
        $lastmessage = fgets ($fp,512);
        echo $head;
        echo $lastmessage;
    }

 	$lastact="QUIT\r\n"; 
	
	fputs($fp,$lastace); 
 	fclose($fp); 
 	return 0;
} 
分享到:
评论

相关推荐

    c#使用smtp发送邮件

    总结来说,C#中使用SMTP发送邮件主要涉及创建`SmtpClient`和`MailMessage`对象,配置服务器连接信息,设置邮件内容和属性,然后通过`SmtpClient`的`Send`方法完成发送。这个过程需要注意正确配置SMTP服务器参数,...

    非MVC项目使用SMTP发送邮件需要的程序集.zip

    "非MVC项目使用SMTP发送邮件需要的程序集.zip"这个压缩包提供的程序集是为了帮助开发者在非MVC架构下实现邮件发送功能。下面将详细解释如何使用这些程序集以及邮件发送的基本原理。 1. SMTP(Simple Mail Transfer ...

    在asp.NET中使用SMTP发送邮件的实现代码共8页.p

    这8页的PDF文档可能包含了详细的步骤、示例代码以及可能遇到的问题和解决方案,对于学习和理解如何在ASP.NET中使用SMTP发送邮件是非常有价值的资源。为了进一步提升邮件功能,你还可以研究如何添加附件、设置邮件...

    SMTP发送操作实例

    ### SMTP发送操作实例详解 #### SMTP简介 简单邮件传输协议(Simple Mail Transfer ...理解这些命令对于使用SMTP发送邮件非常重要。同时,通过这种方式,我们也可以了解到SMTP协议如何确保邮件在互联网上的准确传输。

    C#中使用smtp发送邮件

    在C#编程中,使用SMTP(Simple Mail Transfer Protocol)发送邮件是常见的任务,尤其是在开发Web应用、自动化脚本或服务时。SMTP服务器是用于在互联网上传输电子邮件的标准协议。在这个场景下,开发者可能会遇到不同...

    PHP使用SMTP发送邮件Demo

    PHP中的SMTP发送邮件功能通常通过创建自定义类或者使用现有的库来完成。本示例提供了封装好的SMTP邮件类,适用于PHP 5.3及以上版本。 首先,`smtp.php`文件很可能是这个邮件类的实现。在这个文件中,可能包含了连接...

    ios smtp 发送邮件

    描述中提到了一个sample,这可能是一个简单的示例项目,演示如何集成和使用SMTP发送邮件。在这个名为"MailComposer"的子文件中,可能包含了实现邮件发送的主要代码。通常,这样的示例会包含以下步骤: 1. **安装库*...

    使用PHP通过SMTP发送邮件

    【使用PHP通过SMTP发送邮件】知识点详解 在PHP中,虽然内置了`mail()`函数用于发送邮件,但由于其灵活性不足,且不支持SMTP验证,在某些情况下可能无法正常工作,因此对于需要更高级功能的场景,如SMTP验证或通过...

    JAVA100例之实例45 使用SMTP协议发送邮件

    下面将详细阐述如何在Java中使用SMTP发送邮件。 首先,你需要包含必要的库。JavaMail API是一个广泛使用的库,提供了处理邮件所需的功能。为了使用它,你需要添加以下依赖到你的项目中: ```xml &lt;groupId&gt;...

    c++ 使用SMTP 发送 QQ邮件。

    在C++中,实现SMTP发送邮件通常需要一个库来处理网络通信和SMTP协议细节。在这个案例中,文件名"CSMTP_SSL"可能是一个C++库,用于支持SSL/TLS加密的安全SMTP通信。SSL(Secure Sockets Layer)和其继任者TLS...

    使用smtp实现Java发送邮件源码

    下面是一个简单的使用SMTP发送邮件的Java代码示例: ```java import javax.mail.*; import javax.mail.internet.*; public class EmailSender { public static void main(String[] args) throws Exception { // ...

    C++ SMTP发送邮件

    4. **发送邮件**:使用SMTP命令“MAIL FROM:”指定发件人地址,“RCPT TO:”指定收件人地址,然后使用“DATA”命令发送邮件头和正文。完成后,发送“.”作为数据结束标记。 5. **断开连接**:发送“QUIT”命令以...

    java smtp发送邮件

    Java SMTP 发送邮件是Java开发中常见的功能,用于在应用程序中...总的来说,Java SMTP发送邮件涉及JavaMail API的使用,SMTP服务器的配置,以及邮件内容的构建。理解这些知识点,就能轻松地在Java项目中实现邮件功能。

    PHP SMTP 邮件发送类

    // 使用SMTP发送邮件 $mail-&gt;Host = 'smtp.example.com'; // 设置SMTP服务器地址 $mail-&gt;SMTPAuth = true; // 开启SMTP验证 $mail-&gt;Username = 'your_email@example.com'; // SMTP用户名 $mail-&gt;Password = 'your_...

    smtp发送邮件 163 邮箱

    SMTP(Simple Mail Transfer Protocol)是一种用于在互联网上传输电子邮件的标准协议。...以上就是关于使用SMTP发送邮件,特别是与163邮箱相关的知识。理解这些概念和技术有助于你在实际项目中实现邮件发送功能。

    基于smtp协议的邮件发送程序

    在使用SMTP发送邮件时,确保连接是加密的非常重要。 10. **错误处理**: SMTP服务器可能会返回各种错误代码,如临时错误(如网络问题)或永久错误(如无效的邮件地址)。程序需要能够识别并适当地处理这些错误,以...

    安卓SMTP 发送邮件jar包

    需要注意的是,由于Android的安全策略,直接使用SMTP发送邮件可能需要处理权限问题和网络连接问题。在某些设备上,可能需要在应用的清单文件中声明`INTERNET`权限,并处理运行时权限请求。此外,如果SMTP服务器要求...

    SMTP测试邮件发送工具

    SMTP测试工具是用于验证计算机是否能够通过SMTP服务器成功发送邮件的应用程序。这样的工具对于排查邮件发送问题、配置验证以及诊断网络连接问题非常有用。 SMTP测试邮件发送工具的核心功能包括: 1. **服务器配置...

    C#使用163的SMTP服务器发送邮件.docx

    C# 使用 163 的 SMTP 服务器发送邮件 在本文中,我们将介绍如何使用 C# 语言通过 163 的 SMTP 服务器发送邮件。首先,我们需要了解 System.Net.Mail.SmtpClient 类,它是 C# 中专门用来请求 SMTP 服务器发送邮件的...

    SMTP发送邮件程序(支持SSL和TLS)

    在这个“SMTP发送邮件程序”中,支持SSL和TLS意味着它能确保邮件传输过程的安全性,防止中间人攻击和数据泄露。 SMTP本身并不支持加密,因此在传输敏感信息如密码或私人邮件时,使用SSL或TLS加密是必要的。SSL已经...

Global site tag (gtag.js) - Google Analytics