提供生成静态页核心代码

Code
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;

namespace Zxq.Common
{
    
//郑希强
    
//www.cnblogs.com/zhengxiqiang
    
//生成静态页操作
    
//2009.2
    public class ToHtml
    {
        
#region 读取模板
        
/// <summary>
        
/// 读取模板
        
/// </summary>
        
/// <param name="templateUrl">模板地址</param>
        
/// <param name="coding">编码</param>
        
/// <returns>模板内容</returns>
        public string ReadTemplate(string templateUrl, Encoding code)
        {
            
string tlPath = System.Web.HttpContext.Current.Server.MapPath(templateUrl);
            StreamReader sr 
= null;
            
string str = null;
            
//读取模板内容
            try
            {
                sr 
= new StreamReader(tlPath, code);
                str 
= sr.ReadToEnd();
            }
            
catch (Exception ex)
            {
                
throw ex;
            }
            
finally
            {
                sr.Close();
            }
            
return str;
        }
        
#endregion

        
#region 生成文件
        
/// <summary>
        
/// 生成文件
        
/// </summary>
        
/// <param name="str">文件内容</param>
        
/// <param name="htmlFile">文件存放地址</param>
        
/// <param name="fileName">文件名</param>
        
/// <param name="coding">编码</param>
        
/// <returns>文件名</returns>
        public bool CreateHtml(string str, string htmlFile, string fileName, Encoding code)
        {
            StreamWriter sw 
= null;
            
bool a = false;
            
//写入生成
            try
            {
                htmlFile 
= System.Web.HttpContext.Current.Server.MapPath(htmlFile);
                
this.FolderCreate(htmlFile);
                sw 
= new StreamWriter(htmlFile + fileName, false, code);
                sw.Write(str);
                sw.Flush();
                a 
= FileExists(htmlFile + fileName);
            }
            
catch (Exception ex)
            {
                
throw ex;
            }
            
finally
            {
                sw.Close();
            }
            
return a;
        }
        
#endregion

        
#region 判断文件是否存在
        
/// <summary>
        
/// 判断文件是否存在
        
/// </summary>
        
/// <param name="FilePath">文件路径</param>
        
/// <returns></returns>
        public bool FileExists(string FilePath)
        {
            
if (System.IO.File.Exists(FilePath))
                
return true;
            
else
                
return false;
        }
        
#endregion

        
#region 创建目录
        
/// <summary>
        
/// 创建目录
        
/// </summary>
        
/// <param name="Path"></param>
        
/// <returns></returns>
        public bool FolderCreate(string Path)
        {
            
// 判断目标目录是否存在如果不存在则新建之
            if (!FolderExists(Path))
                Directory.CreateDirectory(Path);
            
return FolderExists(Path);
        }
        
#endregion

        
#region 判断目录是否存在
        
/// <summary>
        
/// 判断目录是否存在
        
/// </summary>
        
/// <param name="Path">路径</param>
        
/// <returns></returns>
        public bool FolderExists(string Path)
        {
            
if (Directory.Exists(Path))
                
return true;
            
else
                
return false;
        }
        
#endregion

        
#region 静态列表页分页
        
/// <summary>
        
/// 静态列表页分页
        
/// </summary>
        
/// <param name="pageCount">总页数</param>
        
/// <param name="currentPage">当前页</param>
        
/// <param name="prefix">如:list</param>
        
/// <param name="suffix">如:.shtml</param>
        
/// <returns></returns>
        public string GetHtmlPager(int pageCount, int currentPage, string prefix, string suffix)
        {
            
int stepNum = 4;
            
int pageRoot = 1;
            pageCount 
= pageCount == 0 ? 1 : pageCount;
            currentPage 
= currentPage == 0 ? 1 : currentPage;
            StringBuilder sb 
= new StringBuilder();
            sb.Append(
"<ul>");
            sb.Append(
"<li class=pagerTitle>&nbsp;分页&nbsp;" + currentPage.ToString() + "/" + pageCount.ToString() + "&nbsp;</li>\r");
            
if (currentPage - stepNum < 2)
                pageRoot 
= 1;
            
else
                pageRoot 
= currentPage - stepNum;
            
int pageFoot = pageCount;
            
if (currentPage + stepNum >= pageCount)
                pageFoot 
= pageCount;
            
else
                pageFoot 
= currentPage + stepNum;
            
if (pageRoot == 1)
            {
                
if (currentPage > 1)
                {
                    sb.Append(
"<li>&nbsp;<a href='" + prefix + "1" + suffix + "' title='首页'>首页</a>&nbsp;</li>\r");
                    sb.Append(
"<li>&nbsp;<a href='" + prefix + Convert.ToString(currentPage - 1+ suffix + "' title='上页'>上页</a>&nbsp;</li>\r");
                }
            }
            
else
            {
                sb.Append(
"<li>&nbsp;<a href='" + prefix + "1" + suffix + "' title='首页'>首页</a>&nbsp;</li>");
                sb.Append(
"<li>&nbsp;<a href='" + prefix + Convert.ToString(currentPage - 1+ suffix + "' title='上页'>上页</a>&nbsp;</li>\r");
            }
            
for (int i = pageRoot; i <= pageFoot; i++)
            {
                
if (i == currentPage)
                {
                    sb.Append(
"<li class='current'>&nbsp;" + i.ToString() + "&nbsp;</li>\r");
                }
                
else
                {
                    sb.Append(
"<li>&nbsp;<a href='" + prefix + i.ToString() + suffix + "' title='第" + i.ToString() + "页'>" + i.ToString() + "</a>&nbsp;</li>\r");
                }
                
if (i == pageCount)
                    
break;
            }
            
if (pageFoot == pageCount)
            {
                
if (pageCount > currentPage)
                {
                    sb.Append(
"<li>&nbsp;<a href='" + prefix + Convert.ToString(currentPage + 1+ suffix + "' title='下页'>下页</a>&nbsp;</li>\r");
                    sb.Append(
"<li>&nbsp;<a href='" + prefix + pageCount.ToString() + suffix + "' title='尾页'>尾页</a>&nbsp;</li>\r");
                }
            }
            
else
            {
                sb.Append(
"<li>&nbsp;<a href='" + prefix + Convert.ToString(currentPage + 1+ suffix + "' title='下页'>下页</a>&nbsp;</li>\r");
                sb.Append(
"<li>&nbsp;<a href='" + prefix + pageCount.ToString() + suffix + "' title='尾页'>尾页</a>&nbsp;</li>\r");
            }
            sb.Append(
"</ul>");
            
return sb.ToString();
        }
        
#endregion

        
#region 压缩Html文件
        
/// <summary>
        
/// 压缩Html文件
        
/// </summary>
        
/// <param name="html">Html文件</param>
        
/// <returns></returns>
        public string ZipHtml(string Html)
        {
            Html 
= Regex.Replace(Html, @">\s+?<""><");//去除Html中的空白字符.
            Html = Regex.Replace(Html, @"\r\n\s*""");
            Html 
= Regex.Replace(Html, @"<body([\s|\S]*?)>([\s|\S]*?)</body>"@"<body$1>$2</body>", RegexOptions.IgnoreCase);
            
return Html;
        }
        
#endregion

        
#region 从HTML中获取文本,保留br,p,img
        
/// <summary>
        
/// 从HTML中获取文本,保留br,p,img
        
/// </summary>
        
/// <param name="Html">文本内容</param>
        
/// <returns></returns>
        public string GetTextFromHtml(string Html)
        {
            Regex regEx 
= new Regex(@"</?(?!br|/?p|img)[^>]*>", RegexOptions.IgnoreCase);
            
return regEx.Replace(Html, "");
        }
        
#endregion
    }
}
1
0
(请您对文章做出评价)
« 上一篇:提供网站采集核心代码
» 下一篇:C#多线程的自动管理(定时器) -转载系列
posted @ 2009-07-04 10:27 郑希强 阅读(4044) 评论(56)  编辑 收藏 所属分类: ASP.NET

  回复  引用    
#1楼2009-07-04 11:03 | 毁于随
Mark
  回复  引用    
#2楼2009-07-04 11:04 | aaaaaaaaa[未注册用户]
额~~~

内容和标题好像不符合。。

  回复  引用    
#3楼2009-07-04 11:36 | Dreampufs[未注册用户]
压缩html还需要多一点判断...比如<pre标记..
  回复  引用  查看    
#4楼2009-07-04 11:47 | Jeffrey Zhao      
谁说生成静态页能够利于搜索引擎啊,懂一点技术的就知道这是很明显的误导啊。
  回复  引用  查看    
#5楼2009-07-04 12:01 | 秋叶抚风      
给个例子啊
  回复  引用  查看    
#6楼2009-07-04 12:08 | 二德子      
公司系统一直用生成html页面,使用时间长了就会发现问题多的不是就那几点。


  回复  引用  查看    
#7楼2009-07-04 12:14 | 沉默杨仔      
楼主所列的只是涉及到怎么生成一个静态实体文件以及分页代码
前几天做了一个生成静态页的CMS,由于初级接触生成静态页,遇到诸多问题.一直不得其解,最后感觉实在很糟,改伪静态了.问题如下:
1.生成文件不难.重要的模板内的标签管理.. dedecms无奈是PHP,一直没太搞懂里面的标签原理(例如在模板标签内定义列表数.列表方式)
2.一触而动全身(比如添加分类.那么内容页必须全部更新才能同步).感觉没有URL重写来得爽. //当然这点似乎所有以静态页发布的CMS都必须这样..
3.关于"有利于搜索引擎"这点来说.这跟服务器响应速度是有很大关系的.比如请求同一页面.如果response end时间过长.这页被引擎索引的机率确实会相对小.如果用静态页.相对来说.晌应时间要稍短..所以...这个"有利于"是相对的.

<<<楼主如果有兴趣的话写写第一问里面的内容!!继续关注你>>>

  回复  引用  查看    
#8楼[楼主]2009-07-04 12:15 | 郑希强      
--引用--------------------------------------------------
Jeffrey Zhao: 谁说生成静态页能够利于搜索引擎啊,懂一点技术的就知道这是很明显的误导啊。
--------------------------------------------------------

静态页是容易被搜索引擎收录的啊!学习下SEO这方面知识都能知道的啊

  回复  引用  查看    
#9楼2009-07-04 12:16 | kiler      
@二德子
新浪搜狐都是用的静态页技术也没啥问题,网站要是做大了,静态页技术是必须的。

  回复  引用    
#10楼2009-07-04 12:18 | john.geng[未注册用户]
想问下博主像Shopping Cart这种需要Session或Cookies的如何处理呢?
  回复  引用  查看    
#11楼2009-07-04 13:09 | Ray Wu      
--引用--------------------------------------------------
郑希强: --引用--------------------------------------------------
Jeffrey Zhao: 谁说生成静态页能够利于搜索引擎啊,懂一点技术的就知道这是很明显的误导啊。
--------------------------------------------------------

静态页是容易被搜索引擎收录的啊!学习下SEO这方面知识都能知道的啊
--------------------------------------------------------
呵呵,那都是相当旧的观点了,静态页从本质上讲跟动态的并没有区别,尤其是对搜索引擎来说

  回复  引用  查看    
#12楼2009-07-04 13:43 | Sam Lin      
是静态URL是有利于SEO的,但权重很少。
要做好SEO,关键是Meta信息,标题h1,标题title,和关键字分布频率

  回复  引用  查看    
#13楼2009-07-04 14:09 | Dove.Net      
--引用--------------------------------------------------
Ray Wu: --引用--------------------------------------------------
郑希强: --引用--------------------------------------------------
Jeffrey Zhao: 谁说生成静态页能够利于搜索引擎啊,懂一点技术的就知道这是很明显的误导啊。
--------------------------------------------------------

静态页是容易被搜索引擎收录的啊!学习下SEO这方面知识都能知道的啊
--------------------------------------------------------
呵呵,那都是相当旧的观点了,静态页从本质上讲跟动态的并没有区别,尤其是对搜索引擎来说

--------------------------------------------------------
确实,老赵说的也没错,动态、静态现在本质上已经没区别了,只是相对而言静态比动态请求响应要稍快,无论是对用户还是SE来说友好度要高一些,所以还是有一定好处,但只要动态请求响应不是太慢,实际所所占权重确实较小。

  回复  引用  查看    
#14楼[楼主]2009-07-04 14:12 | 郑希强      
@Sam Lin
要权重高的话:最好是原创内容和Pr值高的外链
感觉搜索引擎对meta 的关键词和内容 都忽略了

  回复  引用  查看    
#15楼2009-07-04 14:36 | 温景良(Jason)      
u
p

  回复  引用    
#16楼2009-07-04 15:11 | xixixi[未注册用户]
这年头还做生成静态,汗。
page.aspx?id=888 只是参数不利于搜索。
现在都是 url 重写就OK了。
如: page/888.htm

生成静态,简直就是硬盘杀手。
10条记录就是10万个文件?
维护上面呢?网站界面更新呢?

  回复  引用  查看    
#17楼2009-07-04 15:18 | Freedom~Jun      
@xixixi
“10条记录就是10万个文件?”
为什么这样说呢?

  回复  引用  查看    
#18楼2009-07-04 15:45 | 缘易姿姿      
@郑希强
--引用--------------------------------------------------
Jeffrey Zhao: 谁说生成静态页能够利于搜索引擎啊,懂一点技术的就知道这是很明显的误导啊。
--------------------------------------------------------

静态页是容易被搜索引擎收录的啊!学习下SEO这方面知识都能知道的啊

-------------------
老兄,对于搜索引擎来说,不管你是动态还是静态服务器返回给蜘蛛的结果都是一样的!
还是搞技术的,别说这样的话吧,你还嫩得很!

  回复  引用  查看    
#19楼[楼主]2009-07-04 15:51 | 郑希强      
@缘易姿姿
我一直都是以为静态页容易收录!错了可以改了喽

  回复  引用  查看    
#20楼2009-07-04 16:11 | 无为而为      
引用Jeffrey Zhao:谁说生成静态页能够利于搜索引擎啊,懂一点技术的就知道这是很明显的误导啊。

懂点技术的未必就知道,标榜正义未必就是正确的。稍微有点SEO经验的都晓得,有些站生成静态页的好处比伪静态确实要好,比如小说站。
其实url的优化只是一点而已,静态,伪静态的取舍要看实际情况,访问量大,变化较小的页面生成静态,内页数据更新频率高的用伪静态。看老赵,还有 缘易姿姿 这种苛刻的语气很不舒服,顶楼主。

  回复  引用  查看    
#21楼2009-07-04 16:30 | 钧梓昊逑      
楼上说的是优化网站,不是优化搜索

注意问题的焦点

  回复  引用  查看    
#22楼2009-07-04 16:31 | 斯克迪亚      
引用毁于随:--引用--------------------------------------------------

Jeffrey Zhao: 谁说生成静态页能够利于搜索引擎啊,懂一点技术的就知道这是很明显的误导啊。

--------------------------------------------------------



静态页是容易被搜索引擎收录的啊!学习下SEO这方面知识都能知道的啊

那是上个世纪的事了,本世纪如果搜索引擎不能完美支持动态网站,那就可以直接下线了。

  回复  引用  查看    
#23楼2009-07-04 17:08 | AK47      
不错!
  回复  引用  查看    
#24楼2009-07-04 17:17 | Showker      
晕了,还没自己做生成静态页面。不过应该还是有好处的吧,关键还是看网站内容,内容为王嘛。
上海吉祥航空订票电话
  回复  引用  查看    
#26楼2009-07-04 18:45 | 不若相忘于江湖      
楼主精神可嘉。


  回复  引用    
#27楼2009-07-04 21:32 | john55[未注册用户]
看代码好熟悉,看自己的ToHtml发现居然很多相同的
  回复  引用  查看    
#28楼2009-07-04 22:10 | Jeffrey Zhao      
看来这个问题有混淆的人还是不少,我完整地写一篇文章吧。
  回复  引用  查看    
#29楼2009-07-04 22:14 | 私家侦探      
引用斯克迪亚:<FIELDSET class=comment_quote><LEGEND>引用</LEGEND>毁于随:--引用--------------------------------------------------

Jeffrey Zhao: 谁说生成静态页能够利于搜索引擎啊,懂一点技术的就知道这是很明显的误导啊。

--------------------------------------------------------



静态页是容易被搜索引擎收录的啊!学习下SEO这方面知识都能知道的啊</FIELDSET>
那是上个世纪的事了,本世纪如果搜索引擎不能完美支持动态网站,那就可以直接下线了。

--------
不可能完美。动态页面再牛都不如静态页面对搜索引擎友好

  回复  引用  查看    
#30楼2009-07-04 22:16 | DiggingDeeply      
蜘蛛分得清动静吗?
  回复  引用  查看    
#31楼2009-07-04 22:31 | 私家侦探      
引用DiggingDeeply:蜘蛛分得清动静吗?

是分不清,但是动态页面乱糟糟的参数,蜘蛛有点讨厌。

  回复  引用  查看    
#32楼2009-07-04 22:41 | Jeffrey Zhao      
@私家侦探
看来还是需要解释一下不可了,你把两个不同的概念混淆起来了。

  回复  引用  查看    
#33楼2009-07-04 22:55 | 私家侦探      
对于搜索引擎收录,静态页面更容易被收录吧。第一静态页面返回快,蜘蛛喜欢。第二静态页面url中的关键字容易做得好(特别是英文站),蜘蛛也喜欢。
虽然现在动态页面可以做伪url,但毕竟还不如纯静态强悍吧,就返回速度和url中的关键字来说

  回复  引用  查看    
#34楼[楼主]2009-07-04 22:55 | 郑希强      
  回复  引用  查看    
#35楼2009-07-04 22:57 | 私家侦探      
当然是不是被收录还有其它很多原因,比如内容以及内容中的关键字安排。但是我们现在谈的是url关键字优化和返回速度。
  回复  引用  查看    
#36楼2009-07-04 22:58 | Jeffrey Zhao      
@郑希强
你觉得你现在做的,和这些文章说的是一回事情吗?
你把两个概念混淆了啊。

  回复  引用  查看    
#37楼2009-07-04 23:51 | dewin      
老赵,你直接写篇文章阐述这两个概念。光说混淆,没人能接受,要给人理解,心服。
  回复  引用    
#39楼2009-07-05 02:26 | xhtml[未注册用户]
传说:"动态网址不能被抓取。"
事实:我们可以抓取动态网址并且解释不同的参数。如果您为了让网址看起来像是静态的,而隐藏那些可以给谷歌提供有价值信息的参数,这样做反而会给该网址的抓取和排名带来麻烦。我们的建议是:请不要将一个动态网址改换格式以使其看起来是静态的。尽可能地使用静态网址来显示静态内容是可取的,但在您决定展示动态内容的情况下,请不要将参数隐藏起来从而使他们看起来像是静态的,因为这样做会删除掉那些有助于我们分析网址的有用信息。

传说:"动态网址的参数要少于3个。"
事实:对于参数的数量是没有限制的。但是,一个好的经验是不要让您的网址太长(这个适用于所有的网址,不论是静态的还是动态的)。您可以去掉一些对于 Googlebot 来说不重要的参数,给用户一个好看一点的动态网址。如果您不能确定可以去掉哪些参数,我们建议您将动态网址中所有的参数都提供给我们,我们的系统会弄明白哪一些是不重要的。将参数隐藏起来会影响我们正确地分析您的网址,我们也就不能识别这些参数,一些重要信息可能也因此丢失了。

  回复  引用  查看    
#40楼2009-07-05 07:52 | Keep Walking      
我最近的测试中静态链接要明显好于动态页面,即使gg官方说动态静态无区别,奉劝各位做互联网的还是要静态,至少看起来像静态,在接触的一些专职SEOER中,也是强烈建议静态化
  回复  引用  查看    
#41楼2009-07-05 09:09 | 淘者天下2      
楼上说的是优化网站,不是优化搜索

注意问题的焦点

  回复  引用  查看    
#42楼2009-07-05 15:46 | Jeffrey Zhao      
@Keep Walking
SEO是一个实践性的活,我见过太多扯蛋的专业SEOer了。
是否专业,唯一考察的结果就是SEO效果。
顺便发布一个广告:现在想找个SEOer对我的blog进行SEO优化……自然不会是无偿的。

  回复  引用  查看    
#43楼2009-07-05 16:45 | Keep Walking      
@Jeffrey Zhao
呵呵,也许吧,it168和赶集都花大笔钱养些废物?

我的站点动态页面收录和排名明显比静态页面要低很多,你可以长期观察观察


  回复  引用  查看    
#44楼2009-07-05 16:48 | Jeffrey Zhao      
@Keep Walking
你咋就对号入座了?我又没有说谁,我也不认识赶集阿it168什么的,我只是说我见过很多扯蛋的SEOer。
至于你的站点是什么?影响SEO排名的因素有很多,你为什么说是静态地址和动态地址的原因呢?

  回复  引用    
#45楼2009-07-05 16:49 | seoer[未注册用户]

Jeffrey Zhao
别怪别人扯蛋,只怪自己无知

  回复  引用  查看    
#46楼2009-07-05 18:12 | Jeffrey Zhao      
@seoer
说不定seoer的名声就是被你这样的seoer搞臭的,嘿嘿。
具体表现为:就只是讲一些人人明白的大道理,但是没有办法通过自己的成果展现出来。
概括起来就是“光会耍嘴皮子”。

  回复  引用  查看    
#47楼2009-07-06 09:47 | 游侠_1      
Keep Walking

it168的技术怎么就成废物呢,
您可得好好说说

  回复  引用    
#48楼2009-07-06 11:42 | Big Yello Bee[未注册用户]
静态页相对于动态页是没有什么大的优势的,请看这篇google的官方说法:
http://googlechinablog.com/2008/10/blog-post_20.html

  回复  引用    
#49楼2009-07-07 09:25 | 李华顺[未注册用户]
引用郑希强:--引用--------------------------------------------------
<br/>Jeffrey Zhao: 谁说生成静态页能够利于搜索引擎啊,懂一点技术的就知道这是很明显的误导啊。
<br/>--------------------------------------------------------
<br/>
<br/>静态页是容易被搜索引擎收录的啊!学习下SEO这方面知识都能知道的啊

扯淡,谁说的静态页是容易被搜索引擎收录的啊!


  回复  引用    
#50楼2009-07-07 09:27 | 李华顺[未注册用户]
引用Sam Lin:是静态URL是有利于SEO的,但权重很少。
<br/>要做好SEO,关键是Meta信息,标题h1,标题title,和关键字分布频率

现在Meta信息也不是很重要了

  回复  引用    
#51楼2009-07-07 09:39 | 李华顺[未注册用户]
说实话,这种生成静态页面的方式很过时!这种只能满足整页面缓存,如果我只是一小部分数据变动又得重新生成页面,如 访问量/评论数 相关文章等信息(别说用iframe看起来不爽)。这样一来静态页面实际上没有多大意义了,根本无法满足实际的需求。另外维护特别不方便,某天需要更改url规则你怎么办?些url重写规则?
建议楼主看一下这篇Ruby on Rails的缓存介绍

http://guides.rubyonrails.org/caching_with_rails.html

  回复  引用  查看    
#52楼2009-07-08 09:21 | Flying Fox      
引用李华顺:
说实话,这种生成静态页面的方式很过时!这种只能满足整页面缓存,如果我只是一小部分数据变动又得重新生成页面,如 访问量/评论数 相关文章等信息(别说用iframe看起来不爽)。这样一来静态页面实际上没有多大意义了,根本无法满足实际的需求。另外维护特别不方便,某天需要更改url规则你怎么办?些url重写规则?
建议楼主看一下这篇Ruby on Rails的缓存介绍

http://guides.rubyonrails.org/caching_with_rails.html


生成是必要的。不管是否利于搜索体验。

但是,如果对于小站,生成静态页面和使用带问号的动态页面的收录效果相差是非常大的。

况且,生成静态的页面也许对磁盘 IO 是有影响,但是对于大站什么来说,这是最基本的。特别是页面里很多地方需要读取数据库的情况下。

呵呵,还有你说的几个问题,我觉得你并没有做大站的经验。

  回复  引用  查看    
#53楼2009-09-25 09:26 | @萧浪      
可以采用伪静态与页面缓存
  回复  引用    
#54楼2009-10-31 18:38 | 过客1[未注册用户]
博主:
你好! 我是初学.net的 刚才看了你的“生成静态页核心代码 ” 有点迷迷糊糊的 你能不能把完整的实例发下给我啊? 我邮箱是zhu871209@163.com 非常感谢!

  回复  引用    
#55楼2009-11-24 13:29 | 娃娃脸[未注册用户]
楼主可以提供完整的示例吗,多谢了~
  回复  引用    
#56楼2009-11-24 13:29 | 娃娃脸[未注册用户]
楼主可以提供完整的示例代码吗,急用,谢谢了,我邮箱是hushenhaowoaini@hotmail.com