<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>最优良人 &#187; email</title>
	<atom:link href="http://www.zui88.com/view-tag/email/feed" rel="self" type="application/rss+xml" />
	<link>http://www.zui88.com/blog</link>
	<description>中山php&#124;最优网络</description>
	<lastBuildDate>Mon, 13 May 2013 04:56:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>php在windows主机或虚拟空间利用socket在线发送邮件</title>
		<link>http://www.zui88.com/blog/view-167.html</link>
		<comments>http://www.zui88.com/blog/view-167.html#comments</comments>
		<pubDate>Wed, 24 Aug 2011 15:53:25 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[后端程序]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=167</guid>
		<description><![CDATA[在linux虚拟主机下一般可以利用php的mail函数直接发邮件 bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] ) 但是在windows虚拟主机下则不能直接使用mail函数，可以通过socket了，采用邮箱的smtp服务在线发送邮件（现在的163免费邮箱一注册就可以免费使用这个服务，并且默认开通的）,比较成熟的在线发送邮件类有php_mailer，功能很强大，不过下面介绍的是一个比较简单的socket邮件发送类，应付一般的需求足够了。 使用方法是： require_once (dirname(__FILE__).'/email.class.php');//该类的代码附在文章后面 //########################################## $smtpserver = "smtp.163.com";//SMTP服务器 $smtpserverport =25;//SMTP服务器端口 $smtpusermail = "XXX@163.com";//SMTP服务器的用户邮箱 $smtpemailto = "XXXXX@qq.com";//发送给谁 $smtpuser = "s_XXX";//SMTP服务器的用户帐号 $smtppass = "aaa123456";//SMTP服务器的用户密码 $mailsubject = "收到用户的产品询价";//邮件主题 $mailbody = "用户提交了产品询价，请登录网站后台查看!";//邮件内容 $mailtype = "HTML";//邮件格式（HTML/TXT）,TXT为文本邮件 //########################################## $smtp = new [...]]]></description>
			<content:encoded><![CDATA[<p>在linux虚拟主机下一般可以利用php的mail函数直接发邮件<br />
<span class="type">bool</span> <span class="methodname"><strong>mail</strong></span> ( <span class="methodparam"><span class="type">string</span> <tt class="parameter"><span style="font-family: Courier New; font-size: small;">$to</span></tt></span> , <span class="methodparam"><span class="type">string</span> <tt class="parameter"><span style="font-family: Courier New; font-size: small;">$subject</span></tt></span> , <span class="methodparam"><span class="type">string</span> <tt class="parameter"><span style="font-family: Courier New; font-size: small;">$message</span></tt></span> [, <span class="methodparam"><span class="type">string</span> <tt class="parameter"><span style="font-family: Courier New; font-size: small;">$additional_headers</span></tt></span> [, <span class="methodparam"><span class="type">string</span> <tt class="parameter"><span style="font-family: Courier New; font-size: small;">$additional_parameters</span></tt></span> ]] )</p>
<p>但是在windows虚拟主机下则不能直接使用mail函数，可以通过socket了，采用邮箱的smtp服务在线发送邮件（现在的163免费邮箱一注册就可以免费使用这个服务，并且默认开通的）,比较成熟的在线发送邮件类有php_mailer，功能很强大，不过下面介绍的是一个比较简单的socket邮件发送类，应付一般的需求足够了。</p>
<p>使用方法是：</p>
<p>  require_once (dirname(__FILE__).'/email.class.php');//该类的代码附在文章后面<br />
//##########################################<br />
$smtpserver = "smtp.163.com";//SMTP服务器<br />
$smtpserverport =25;//SMTP服务器端口<br />
$smtpusermail = "<span style="color: #ff4b33;">XXX</span>@163.com";//SMTP服务器的用户邮箱<br />
$smtpemailto = "XXXXX@<span style="color: #ff4b33;">qq</span>.com";//发送给谁<br />
$smtpuser = "s_XXX";//SMTP服务器的用户帐号<br />
$smtppass = "aaa123456";//SMTP服务器的用户密码<br />
$mailsubject = "收到用户的产品询价";//邮件主题<br />
$mailbody = "用户提交了产品询价，请登录网站后台查看!";//邮件内容<br />
$mailtype = "HTML";//邮件格式（HTML/TXT）,TXT为文本邮件<br />
//##########################################<br />
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//这里面的一个true是表示使用身份验证,否则不使用身份验证.<br />
$smtp-&gt;debug = false;//是否显示发送的调试信息<br />
$smtp-&gt;sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype);</p>
<p>附简单的邮件发送类代码</p>
<p>&lt;?<br />
class smtp<br />
{<br />
/* Public Variables */<br />
var $smtp_port;<br />
var $time_out;<br />
var $host_name;<br />
var $log_file;<br />
var $relay_host;<br />
var $debug;<br />
var $auth;<br />
var $user;<br />
var $pass;</p>
<p>/* Private Variables */<br />
var $sock;</p>
<p>/* Constractor */<br />
function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass)<br />
{<br />
$this-&gt;debug = FALSE;<br />
$this-&gt;smtp_port = $smtp_port;<br />
$this-&gt;relay_host = $relay_host;<br />
$this-&gt;time_out = 30; //is used in fsockopen()<br />
#<br />
$this-&gt;auth = $auth;//auth<br />
$this-&gt;user = $user;<br />
$this-&gt;pass = $pass;<br />
#<br />
$this-&gt;host_name = "localhost"; //is used in HELO command<br />
$this-&gt;log_file ="";</p>
<p>$this-&gt;sock = FALSE;<br />
}</p>
<p>/* Main Function */<br />
function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")<br />
{<br />
$mail_from = $this-&gt;get_address($this-&gt;strip_comment($from));<br />
$body = ereg_replace("(^|(\r\n))(\\.)", "\\1.\\3", $body);<br />
$header .= "MIME-Version:1.0\r\n";<br />
if($mailtype=="HTML"){<br />
$header .= "Content-Type:text/html\r\n";<br />
}<br />
$header .= "To: ".$to."\r\n";<br />
if ($cc != "") {<br />
$header .= "Cc: ".$cc."\r\n";<br />
}<br />
$header .= "From: $from&lt;".$from."&gt;\r\n";<br />
$header .= "Subject: ".$subject."\r\n";<br />
$header .= $additional_headers;<br />
$header .= "Date: ".date("r")."\r\n";<br />
$header .= "X-Mailer:By Redhat (PHP/".phpversion().")\r\n";<br />
list($msec, $sec) = explode(" ", microtime());<br />
$header .= "Message-ID: &lt;".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from."&gt;\r\n";<br />
$TO = explode(",", $this-&gt;strip_comment($to));</p>
<p>if ($cc != "") {<br />
$TO = array_merge($TO, explode(",", $this-&gt;strip_comment($cc)));<br />
}</p>
<p>if ($bcc != "") {<br />
$TO = array_merge($TO, explode(",", $this-&gt;strip_comment($bcc)));<br />
}</p>
<p>$sent = TRUE;<br />
foreach ($TO as $rcpt_to) {<br />
$rcpt_to = $this-&gt;get_address($rcpt_to);<br />
if (!$this-&gt;smtp_sockopen($rcpt_to)) {<br />
$this-&gt;log_write("Error: Cannot send email to ".$rcpt_to."\n");<br />
$sent = FALSE;<br />
continue;<br />
}<br />
if ($this-&gt;smtp_send($this-&gt;host_name, $mail_from, $rcpt_to, $header, $body)) {<br />
$this-&gt;log_write("E-mail has been sent to &lt;".$rcpt_to."&gt;\n");<br />
} else {<br />
$this-&gt;log_write("Error: Cannot send email to &lt;".$rcpt_to."&gt;\n");<br />
$sent = FALSE;<br />
}<br />
fclose($this-&gt;sock);<br />
$this-&gt;log_write("Disconnected from remote host\n");<br />
}<br />
//echo "&lt;br&gt;";<br />
//echo $header;<br />
return $sent;<br />
}</p>
<p>/* Private Functions */</p>
<p>function smtp_send($helo, $from, $to, $header, $body = "")<br />
{<br />
if (!$this-&gt;smtp_putcmd("HELO", $helo)) {<br />
return $this-&gt;smtp_error("sending HELO command");<br />
}<br />
#auth<br />
if($this-&gt;auth){<br />
if (!$this-&gt;smtp_putcmd("AUTH LOGIN", base64_encode($this-&gt;user))) {<br />
return $this-&gt;smtp_error("sending HELO command");<br />
}</p>
<p>if (!$this-&gt;smtp_putcmd("", base64_encode($this-&gt;pass))) {<br />
return $this-&gt;smtp_error("sending HELO command");<br />
}<br />
}<br />
#<br />
if (!$this-&gt;smtp_putcmd("MAIL", "FROM:&lt;".$from."&gt;")) {<br />
return $this-&gt;smtp_error("sending MAIL FROM command");<br />
}</p>
<p>if (!$this-&gt;smtp_putcmd("RCPT", "TO:&lt;".$to."&gt;")) {<br />
return $this-&gt;smtp_error("sending RCPT TO command");<br />
}</p>
<p>if (!$this-&gt;smtp_putcmd("DATA")) {<br />
return $this-&gt;smtp_error("sending DATA command");<br />
}</p>
<p>if (!$this-&gt;smtp_message($header, $body)) {<br />
return $this-&gt;smtp_error("sending message");<br />
}</p>
<p>if (!$this-&gt;smtp_eom()) {<br />
return $this-&gt;smtp_error("sending &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt; [EOM]");<br />
}</p>
<p>if (!$this-&gt;smtp_putcmd("QUIT")) {<br />
return $this-&gt;smtp_error("sending QUIT command");<br />
}</p>
<p>return TRUE;<br />
}</p>
<p>function smtp_sockopen($address)<br />
{<br />
if ($this-&gt;relay_host == "") {<br />
return $this-&gt;smtp_sockopen_mx($address);<br />
} else {<br />
return $this-&gt;smtp_sockopen_relay();<br />
}<br />
}</p>
<p>function smtp_sockopen_relay()<br />
{<br />
$this-&gt;log_write("Trying to ".$this-&gt;relay_host.":".$this-&gt;smtp_port."\n");<br />
$this-&gt;sock = @fsockopen($this-&gt;relay_host, $this-&gt;smtp_port, $errno, $errstr, $this-&gt;time_out);<br />
if (!($this-&gt;sock &amp;&amp; $this-&gt;smtp_ok())) {<br />
$this-&gt;log_write("Error: Cannot connenct to relay host ".$this-&gt;relay_host."\n");<br />
$this-&gt;log_write("Error: ".$errstr." (".$errno.")\n");<br />
return FALSE;<br />
}<br />
$this-&gt;log_write("Connected to relay host ".$this-&gt;relay_host."\n");<br />
return TRUE;;<br />
}</p>
<p>function smtp_sockopen_mx($address)<br />
{<br />
$domain = ereg_replace("^.+@([^@]+)$", "\\1", $address);<br />
if (!@getmxrr($domain, $MXHOSTS)) {<br />
$this-&gt;log_write("Error: Cannot resolve MX \"".$domain."\"\n");<br />
return FALSE;<br />
}<br />
foreach ($MXHOSTS as $host) {<br />
$this-&gt;log_write("Trying to ".$host.":".$this-&gt;smtp_port."\n");<br />
$this-&gt;sock = @fsockopen($host, $this-&gt;smtp_port, $errno, $errstr, $this-&gt;time_out);<br />
if (!($this-&gt;sock &amp;&amp; $this-&gt;smtp_ok())) {<br />
$this-&gt;log_write("Warning: Cannot connect to mx host ".$host."\n");<br />
$this-&gt;log_write("Error: ".$errstr." (".$errno.")\n");<br />
continue;<br />
}<br />
$this-&gt;log_write("Connected to mx host ".$host."\n");<br />
return TRUE;<br />
}<br />
$this-&gt;log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")\n");<br />
return FALSE;<br />
}</p>
<p>function smtp_message($header, $body)<br />
{<br />
fputs($this-&gt;sock, $header."\r\n".$body);<br />
$this-&gt;smtp_debug("&gt; ".str_replace("\r\n", "\n"."&gt; ", $header."\n&gt; ".$body."\n&gt; "));</p>
<p>return TRUE;<br />
}</p>
<p>function smtp_eom()<br />
{<br />
fputs($this-&gt;sock, "\r\n.\r\n");<br />
$this-&gt;smtp_debug(". [EOM]\n");</p>
<p>return $this-&gt;smtp_ok();<br />
}</p>
<p>function smtp_ok()<br />
{<br />
$response = str_replace("\r\n", "", fgets($this-&gt;sock, 512));<br />
$this-&gt;smtp_debug($response."\n");</p>
<p>if (!ereg("^[23]", $response)) {<br />
fputs($this-&gt;sock, "QUIT\r\n");<br />
fgets($this-&gt;sock, 512);<br />
$this-&gt;log_write("Error: Remote host returned \"".$response."\"\n");<br />
return FALSE;<br />
}<br />
return TRUE;<br />
}</p>
<p>function smtp_putcmd($cmd, $arg = "")<br />
{<br />
if ($arg != "") {<br />
if($cmd=="") $cmd = $arg;<br />
else $cmd = $cmd." ".$arg;<br />
}</p>
<p>fputs($this-&gt;sock, $cmd."\r\n");<br />
$this-&gt;smtp_debug("&gt; ".$cmd."\n");</p>
<p>return $this-&gt;smtp_ok();<br />
}</p>
<p>function smtp_error($string)<br />
{<br />
$this-&gt;log_write("Error: Error occurred while ".$string.".\n");<br />
return FALSE;<br />
}</p>
<p>function log_write($message)<br />
{<br />
$this-&gt;smtp_debug($message);</p>
<p>if ($this-&gt;log_file == "") {<br />
return TRUE;<br />
}</p>
<p>$message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;<br />
if (!@file_exists($this-&gt;log_file) || !($fp = @fopen($this-&gt;log_file, "a"))) {<br />
$this-&gt;smtp_debug("Warning: Cannot open log file \"".$this-&gt;log_file."\"\n");<br />
return FALSE;<br />
}<br />
flock($fp, LOCK_EX);<br />
fputs($fp, $message);<br />
fclose($fp);</p>
<p>return TRUE;<br />
}</p>
<p>function strip_comment($address)<br />
{<br />
$comment = "\\([^()]*\\)";<br />
while (ereg($comment, $address)) {<br />
$address = ereg_replace($comment, "", $address);<br />
}</p>
<p>return $address;<br />
}</p>
<p>function get_address($address)<br />
{<br />
$address = ereg_replace("([ \t\r\n])+", "", $address);<br />
$address = ereg_replace("^.*&lt;(.+)&gt;.*$", "\\1", $address);</p>
<p>return $address;<br />
}</p>
<p>function smtp_debug($message)<br />
{<br />
if ($this-&gt;debug) {<br />
echo $message."&lt;br&gt;";<br />
}<br />
}</p>
<p>function get_attach_type($image_tag) { //</p>
<p>$filedata = array();</p>
<p>$img_file_con=fopen($image_tag,"r");<br />
unset($image_data);<br />
while ($tem_buffer=AddSlashes(fread($img_file_con,filesize($image_tag))))<br />
$image_data.=$tem_buffer;<br />
fclose($img_file_con);</p>
<p>$filedata['context'] = $image_data;<br />
$filedata['filename']= basename($image_tag);<br />
$extension=substr($image_tag,strrpos($image_tag,"."),strlen($image_tag)-strrpos($image_tag,"."));<br />
switch($extension){<br />
case ".gif":<br />
$filedata['type'] = "image/gif";<br />
break;<br />
case ".gz":<br />
$filedata['type'] = "application/x-gzip";<br />
break;<br />
case ".htm":<br />
$filedata['type'] = "text/html";<br />
break;<br />
case ".html":<br />
$filedata['type'] = "text/html";<br />
break;<br />
case ".jpg":<br />
$filedata['type'] = "image/jpeg";<br />
break;<br />
case ".tar":<br />
$filedata['type'] = "application/x-tar";<br />
break;<br />
case ".txt":<br />
$filedata['type'] = "text/plain";<br />
break;<br />
case ".zip":<br />
$filedata['type'] = "application/zip";<br />
break;<br />
default:<br />
$filedata['type'] = "application/octet-stream";<br />
break;<br />
}<br />
return $filedata;<br />
}</p>
<p>}<br />
?&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-167.html/feed</wfw:commentRss>
		<slash:comments>2688</slash:comments>
		</item>
	</channel>
</rss>
