2015年1月24日星期六

SmtpClientˇ

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
SmtpClientˇ  阅读原文»

SmtpClient发送邮件时附件名称乱码

在用户环境发现一个现象,使用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居然是这样的:

wKioL1TAk2HxTQVDAALo43KZJXY016.jpg

这个怪异的name导致了在邮件客户端里显示乱码。换不同的机器测试,有些机器是正常的,说明与软件环境有关。正常的邮件应该是这样的:

wKiom1TAkzPTByU1AALE4lxTXVw257.jpg

研究了一下,发现是.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);  

此时收到的邮件是这样的,注意划红线部分:

wKiom1TAmEbAA5K4AAKvKFT83aQ416.jpg

本文出自 "兔子窝" 博客,请务必保留此出处http://boytnt.blog.51cto.com/966121/1606985

分享至 一键收藏,随时查看,分享好友!
昵称:
登录快速注册
内容:

HP Gen8ˇ�÷¨Raid(there are no physical disks attached)  阅读原文»

用户名:yishuizhao
文章数:32
评论数:16
访问量:7243无忧币:873博客积分:386博客等级:3 注册日期:2010-04-07

HP Gen8服务器创建Raid(there are no physical disks attached)

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,让服务器能识别硬盘。

wKioL1TAdaLgOghiAAFE-6kADu0106.jpg

我们重新启动服务器,在进行到如下图界面,按F5,以进入到ACU配置视图

wKiom1TAdNGj5SyGAAPpOkZEogM295.jpg

这是按了F5的画面

wKiom1TAdNrhGJklAAVJN1rQXmk333.jpg

等待数分钟之后,进入到ACU界面,我们没看到任何的可用Raid信息,可以确认没配置Raid了

wKioL1TAdbeyF2vZAARXDPlWDqo673.jpg

这里有个警告信息,我们来看一下,选中"array controller"下的"dynamic smart array B120i RAID"阵列卡

wKioL1TAdbqQtTUnAAH26_1yN_A318.jpg

看右边的"warning",提示阵列卡支持写的缓存,但是我们没有创建阵列,也没有使用,所以警示,所以这里可以忽略

wKiom1TAdOfRE9mvAAIkyaQ_Juo590.jpg

好了,开始配置阵列,选中"array controller"下的"dynamic smart array B120i RAID"阵列卡,单击中间的"configure"选项

wKioL1TAdcPg8pZtAAL-EdiAWL8844.jpg

然后在新窗口中间,选择"create array"开始创建阵列

wKiom1TAdPKzM3ylAAO2J7rjDlU484.jpg

以下是我服务器的两块硬盘,勾选"select all"前面的复选框

wKiom1TAdPWTQLmSAAI7izSyLlw092.jpg

选中后,如图显示

wKioL1TAdc7AA0zqAAGZpTV-a14644.jpg

我们做raid1,其他根据自己需求选择,我这里没有需求,一律默认,下一步

wKioL1TAddGDp8oiAAIEzjbTz-M396.jpg

这里是汇总信息,如确认无误,则单击"finish"完成

wKioL1TAddPyQxJTAAGS7HexVJA838.jpg

回到了开始的界面,但是在阵列卡下面已经有了阵列信息,说明此时raid1已经创建OK,而且也可以被服务器识别了。

wKiom1TAdQKjolqAAAQEkRRVRl0111.jpg

单击"arrays"选择看看,有了一个做完raid1之后的逻辑磁盘,还可以看到本地的两块500G的本地磁盘。

wKioL1TAddvCfKhxAAGEz7r-9fA621.jpg

至此,磁盘阵列Raid已经创建完成,重启之后使用F10来开始引导安装操作系统吧。

本文出自 "天魂永恒" 博客,请务必保留此出处http://tianhunyongheng.blog.51cto.com/1446947/1606948

阅读更多内容

没有评论:

发表评论