在用户环境发现一个现象,使用System.Net.Mail.SmtpClient发送邮件,当附件名包含中文且长度较长时,最终的邮件里附件名会乱掉,写个简单的测试程序:
var mail = new MailMessage("from@test.com", "to@test.com"); mail.Subject = "测试邮件乱码"; var atta = new Attachment(@"C:\测试邮件中文出现乱码20150115.rar"); mail.Attachments.Add(atta); var smtp = new SmtpClient(); smtp.Host = "test.com"; smtp.Credentials = new NetworkCredential("from", "test"); smtp.Send(mail);
使用Foxmail接收邮件,然后查看邮件原始信息,发现附件部分的MIME居然是这样的:
这个怪异的name导致了在邮件客户端里显示乱码。换不同的机器测试,有些机器是正常的,说明与软件环境有关。正常的邮件应该是这样的:
研究了一下,发现是.Net Framework的BUG,详见微软网站:http://support.microsoft.com/kb/2402064,当附件名超过41个utf8 byte时,会错误的进行2次编码导致的。 补丁见https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=31723。
如果服务器未升级,可以暂时修改程序来避开这个BUG,主要是手工指定附件的名称:
var mail = new MailMessage("from@test.com", "to@test.com"); mail.Subject = "测试邮件乱码"; string file = @"C:\测试邮件中文出现乱码20150115.rar"; var atta = new Attachment(file); string name = Path.GetFileName(file); string base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(name)); atta.ContentDisposition.FileName = string.Format("=?utf-8?B?{0}?=", base64); //指定附件的filename atta.Name = "attachment"; //指定MimePart的Name,不包含中文,这样就不会被BUG影响 atta.NameEncoding = Encoding.UTF8; mail.Attachments.Add(atta); var smtp = new SmtpClient(); smtp.Host = "test.com"; smtp.Credentials = new NetworkCredential("from", "test"); smtp.Send(mail);
此时收到的邮件是这样的,注意划红线部分:
本文出自 "兔子窝" 博客,请务必保留此出处http://boytnt.blog.51cto.com/966121/1606985
HP最新的X86服务器是Gen8系列,这个系列使用了ACU工具来创建Raid,这是图形化界面,可以说是更友好了。
本来通常情况下如果是买了一台新的服务器,标配了两块硬盘,那么默认是做好了Raid1的,但是也有意外,由于本次PC server量大,出了不少这种情况,需要自己来手动配置Raid,这里使用我拍照的照片来讲解。
PC Server跟一般的PC不一样,如果不做raid,服务器是无法识别硬盘的,所以我们批量安装操作系统,报如下错误的(there are no physical disks attached-you will need to attach a supported drive to continue)便是没有做raid,然后开始做raid,再安装操作系统。
好了废话不多少,看图说话。
以下,是使用F10引导安装操作系统时,报找不到可用的物理磁盘,无法继续安装操作系统,所以要先做raid,让服务器能识别硬盘。
我们重新启动服务器,在进行到如下图界面,按F5,以进入到ACU配置视图
这是按了F5的画面
等待数分钟之后,进入到ACU界面,我们没看到任何的可用Raid信息,可以确认没配置Raid了
这里有个警告信息,我们来看一下,选中"array controller"下的"dynamic smart array B120i RAID"阵列卡
看右边的"warning",提示阵列卡支持写的缓存,但是我们没有创建阵列,也没有使用,所以警示,所以这里可以忽略
好了,开始配置阵列,选中"array controller"下的"dynamic smart array B120i RAID"阵列卡,单击中间的"configure"选项
然后在新窗口中间,选择"create array"开始创建阵列
以下是我服务器的两块硬盘,勾选"select all"前面的复选框
选中后,如图显示
我们做raid1,其他根据自己需求选择,我这里没有需求,一律默认,下一步
这里是汇总信息,如确认无误,则单击"finish"完成
回到了开始的界面,但是在阵列卡下面已经有了阵列信息,说明此时raid1已经创建OK,而且也可以被服务器识别了。
单击"arrays"选择看看,有了一个做完raid1之后的逻辑磁盘,还可以看到本地的两块500G的本地磁盘。
至此,磁盘阵列Raid已经创建完成,重启之后使用F10来开始引导安装操作系统吧。
本文出自 "天魂永恒" 博客,请务必保留此出处http://tianhunyongheng.blog.51cto.com/1446947/1606948
没有评论:
发表评论