当前位置: 主页 > IT教程 > PHP >

uchome 使用hotmail发送Email

时间:2009-09-02 21:15来源:未知 作者:Felix 点击:
uchome中使用hotmail邮箱发送邮件
  

[本站原创,转载请注明出处 www.ifree2008.com]
uchome可以发送邀请邮件,使用自己的邮件账号或国内免费邮箱很用户可能收不到邮件,因为想163,126邮箱常被用来发垃圾邮件,所以会被很多国外邮件服务器屏蔽。自己架设的邮件服务器也可能存在这个问题。所以最好用国际性邮件账号。相对来说hotmail比google要成熟一些,原来不可以使用客户端收发邮件,近年来,虽然官方并未公开,但是确实可以使用smtp发送邮件。其需要设置的参数如下:

安全协议:tls

smtp服务器:smtp.live.com

端口:587

需要安全验证:你的完整email 作为用户名

就uchome1.5不支持安全协议tls,对于ssl在服务器地址类似 ssl://stmp.live.com,当然前提是开启openssl功能。如果php是isapi,除了在php/ini设置外,还要拷贝php安装目录下的libeay32.dll,ssleay32.dll到系统的system32目录。并重启iis.

下面是修改 /source/function_sendmail.php代码,需要修改配置文件/data/data_mail.php增加 'secure'=>'tls',‘helo'=>'yousite.com',选项 

<?php
/*
 [UCenter Home] (C) 2007-2008 Comsenz Inc.
 $Id: function_sendmail.php 10075 2008-11-25 02:13:17Z liguode $
Fixed by www.ifree2008.com Felix at 2009-9
*/

if(!defined('IN_UCHOME')) {
 exit('Access Denied');
}
function getlines($fp) {
    $data = "";
    while($str = @fgets($fp,515)) {
      $data .= $str;
      if(substr($str,3,1) == " ") { break; }
    }
    return $data;
 }
function sendmail($toemail, $subject, $message, $from='') {
 global $_SC, $_SCONFIG, $_SGLOBAL, $space, $_SN;
 
 $_SCONFIG['linkguide'] = 0;
 
 include template('sendmail');
 $message = ob_get_contents();
 obclean();
 
 include_once(S_ROOT.'./data/data_mail.php');
 $mail = $_SGLOBAL['mail'];

 //邮件头的分隔符
 $maildelimiter = $mail['maildelimiter'] == 1 ? "\r\n" : ($mail['maildelimiter'] == 2 ? "\r" : "\n");
 //收件人地址中包含用户名
 $mailusername = isset($mail['mailusername']) ? $mail['mailusername'] : 1;
 //端口
 $mail['port'] = $mail['port'] ? $mail['port'] : 25;
 $mail['mailsend'] = $mail['mailsend'] ? $mail['mailsend'] : 1;
 
 //发信者
 if($mail['mailsend'] == 3) {
  $email_from = empty($from) ? $_SCONFIG['adminemail'] : $from;
 } else {
  $email_from = $from == '' ? '=?'.$_SC['charset'].'?B?'.base64_encode($_SCONFIG['sitename'])."?= <".$_SCONFIG['adminemail'].">" : (preg_match('/^(.+?) \<(.+?)\>$/',$from, $mats) ? '=?'.$_SC['charset'].'?B?'.base64_encode($mats[1])."?= <$mats[2]>" : $from);
 }
 
 $email_to = preg_match('/^(.+?) \<(.+?)\>$/',$toemail, $mats) ? ($mailusername ? '=?'.$_SC['charset'].'?B?'.base64_encode($mats[1])."?= <$mats[2]>" : $mats[2]) : $toemail;;
 
 $email_subject = '=?'.$_SC['charset'].'?B?'.base64_encode(preg_replace("/[\r|\n]/", '', '['.$_SCONFIG['sitename'].'] '.$subject)).'?=';
 $email_message = chunk_split(base64_encode(str_replace("\n", "\r\n", str_replace("\r", "\n", str_replace("\r\n", "\n", str_replace("\n\r", "\r", $message))))));
 
 $headers = "From: $email_from{$maildelimiter}X-Priority: 3{$maildelimiter}X-Mailer: UCENTER_HOME ".X_VER."{$maildelimiter}MIME-Version: 1.0{$maildelimiter}Content-type: text/html; charset=$_SC[charset]{$maildelimiter}Content-Transfer-Encoding: base64{$maildelimiter}";
  
 if($mail['mailsend'] == 1) {
  if(function_exists('mail') && @mail($email_to, $email_subject, $email_message, $headers)) {
   return true;
  }
  return false;
  
 } elseif($mail['mailsend'] == 2) {
  if($mail['secure']=='ssl') $mail['server'] = 'ssl://'.$mail['server'];
  if(!$fp = fsockopen($mail['server'], $mail['port'], $errno, $errstr, 30)) {
   runlog('SMTP', "($mail[server]:$mail[port]) CONNECT - Unable to connect to the SMTP server", 0);
   return false;
  }
   stream_set_blocking($fp, true);
 
  $lastmessage = getlines($fp);
  if(substr($lastmessage, 0, 3) != '220') {
   runlog('SMTP', "$mail[server]:$mail[port] CONNECT - $lastmessage", 0);
   return false;
  }
  fputs($fp, ($mail['auth'] ? 'EHLO' : 'HELO')." ".$mail['helo']."\r\n");
  $lastmessage = getlines($fp);
  if(substr($lastmessage, 0, 3) != 250) {
   runlog('SMTP', "($mail[server]:$mail[port]) HELO/EHLO - $lastmessage", 0);
   return false;
  }
  
  if($mail['auth']) {
   if($mail['secure']=='tls') {
    fputs($fp, "STARTTLS\r\n");
    $lastmessage = getlines($fp);
    if(substr($lastmessage, 0, 3) !=220) {
     runlog('SMTP', "($mail[server]:$mail[port]) TLS - $lastmessage", 0);
     return false;
    }
    if(!stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
     runlog('SMTP','CALL crypto function failed',0);
     return false;
    }
    fputs($fp, ($mail['auth'] ? 'EHLO' : 'HELO')." ".$mail['helo']."\r\n");
    $lastmessage = getlines($fp);
    if(substr($lastmessage, 0, 3) != 250) {
     runlog('SMTP', "($mail[server]:$mail[port]) HELO/EHLO after STARTTLS - $lastmessage", 0);
     return false;
    }
   }
   fputs($fp, "AUTH LOGIN\r\n");
   $lastmessage = getlines($fp);
   if(substr($lastmessage, 0, 3) != 334) {
    runlog('SMTP', "($mail[server]:$mail[port]) AUTH LOGIN - $lastmessage", 0);
    return false;
   }
 
   fputs($fp, base64_encode($mail['auth_username'])."\r\n");
   $lastmessage = getlines($fp);
   if(substr($lastmessage, 0, 3) != 334) {
    runlog('SMTP', "($mail[server]:$mail[port]) USERNAME - $lastmessage", 0);
    return false;
   }
 
   fputs($fp, base64_encode($mail['auth_password'])."\r\n");
   $lastmessage = getlines($fp);
   if(substr($lastmessage, 0, 3) != 235) {
    runlog('SMTP', "($mail[server]:$mail[port]) PASSWORD - $lastmessage", 0);
    return false;
   }
 
   $email_from = $mail['from'];
  }
 
  fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n");
  $lastmessage = getlines($fp);
  if(substr($lastmessage, 0, 3) != 250) {
   fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n");
   $lastmessage = getlines($fp);
   if(substr($lastmessage, 0, 3) != 250) {
    runlog('SMTP', "($mail[server]:$mail[port]) MAIL FROM - $lastmessage", 0);
    return false;
   }
  }
 
  fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $toemail).">\r\n");
  $lastmessage = getlines($fp);
  if(substr($lastmessage, 0, 3) != 250) {
   fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $toemail).">\r\n");
   $lastmessage = getlines($fp);
   runlog('SMTP', "($mail[server]:$mail[port]) RCPT TO - $lastmessage", 0);
   return false;
  }
 
  fputs($fp, "DATA\r\n");
  $lastmessage = getlines($fp);
  if(substr($lastmessage, 0, 3) != 354) {
   runlog('SMTP', "($mail[server]:$mail[port]) DATA - $lastmessage", 0);
   return false;
  }
 
  $headers .= 'Message-ID: <'.gmdate('YmdHs').'.'.substr(md5($email_message.microtime()), 0, 6).rand(100000, 999999).'@'.$_SERVER['HTTP_HOST'].">{$maildelimiter}";
 
  fputs($fp, "Date: ".gmdate('r')."\r\n");
  fputs($fp, "To: ".$email_to."\r\n");
  fputs($fp, "Subject: ".$email_subject."\r\n");
  fputs($fp, $headers."\r\n");
  fputs($fp, "\r\n\r\n");
  fputs($fp, "$email_message\r\n.\r\n");
  $lastmessage = getlines($fp);
  if(substr($lastmessage, 0, 3) != 250) {
   runlog('SMTP', "($mail[server]:$mail[port]) END - $lastmessage", 0);
  }
  fputs($fp, "QUIT\r\n");
  
  return true;

 } elseif($mail['mailsend'] == 3) {

  ini_set('SMTP', $mail['server']);
  ini_set('smtp_port', $mail['port']);
  ini_set('sendmail_from', $email_from);
 
  if(function_exists('mail') && @mail($email_to, $email_subject, $email_message, $headers)) {
   return true;
  }
  return false;
 }
}

?>

顶一下
(46)
100%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容