MIME详解

2017-04-18 08:51:55 16703

MIME,英文全称为“Multipurpose Internet Mail Extensions”,即多用途互联网邮件扩展,是目前互联网电子邮件普遍遵循的邮件技术规范。在MIME出现之前,互联网电子邮件主要遵循由RFC 822所制定的标准,电子邮件一般只用来传递基本的ASCII码文本信息,MIME在 RFC 822的基础上对电子邮件规范做了大量的扩展,引入了新的格式规范和编码方式,在MIME的支持下,图像、声音、动画等二进制文件都可方便的通过电子邮件来进行传递,极大地丰富了电子邮件的功能。目前互联网上使用的基本都是遵循MIME规范的电子邮件。

    电子邮件的分析和读取一般都通过专用的邮件软件来实现,比如Outlook、Foxmail,但这种第三方软件无法和开发者自己的系统整合,通过对MIME邮件格式的分析,我们可以在自己的应用程序中实现对MIME邮件所含信息的读取。

1  MIME邮件格式分析

    MIME技术规范的完整内容由RFC 2045-2049定义,包括了信息格式、媒体类型、编码方式等各方面的内容,这里我们只介绍其中的一些关键的格式和规范,通过了解这些格式规范,我们就可以实现以编程的方式从MIME邮件中提取基本的邮件信息。

1.1 域

    MIME邮件的基本信息、格式信息、编码方式等重要内容都记录在邮件内的各种域中,域的基本格式:{域名}:{内容},域由域名后面跟“:”再加上域的信息内容构成,一条域在邮件中占一行或者多行,域的首行左侧不能有空白字符,比如空格或者制表符,占用多行的域其后续行则必须以空白字符开头。域的信息内容中还可以包含属性,属性之间以“;”分隔,属性的格式如下:{属性名称}=”{属性值}”。

    表1是一封示例邮件的内容,其中行1-5、行8都是单行的域,行6-7则是一个多行的域,并带有一个名为charset的属性,属性值为us-ascii。

 

表1 示例电子邮件

行1 From: ”suntao”

行2 To:

行3 Subject: hello world

行4 Date: Mon, 9 Oct 2006 16:51:34 +0800

行5 MIME-Version: 1.0

行6 Content-Type: text/plain;

行7            charset="us-ascii"

行8 Date: Mon, 9 Oct 2006 16:48:25 +0800

行9

行10 Hello world

行11

    邮件规范中定义了大量域,分别用来存储同邮件相关的各种信息,比如发件人的名字和邮件地址信息存储在From域中,收件人的邮件地址信息存储在To域中,开发人员可通过查询RFC文档得到完整的邮件域定义列表。

1.2  Content-Type域

    Content-Type域定义了邮件中所含各种内容的类型以及相关属性。邮件所含的文本、超文本、附件等信息都按照对应Content-Type域所指定的媒体类型、存储位置、编码方式等信息存储在邮件中。Content-Type域基本格式:Content-Type:{主类型}/{子类型}。

示例邮件中的行6-7就是一个Content-Type域,主类型为text,子类型为plain,字符集属性为us-ascii。

表2:MIME邮件中常见的主类型

主类型常见属性参数含义
textcharset文本信息所使用的字符集
imagename图像的名称
applicationname应用程序的名称
multipartboundary邮件分段边界标识

1.3  multipart类型

    MIME邮件中各种不同类型的内容是分段存储的,各个段的排列方式、位置信息都通过Content-Type域的multipart类型来定义。multipart类型主要有三种子类型:mixed、alternative、related。

1.3.1  multipart类型基本格式

    ●  multipart/mixed类型

    如果一封邮件中含有附件,那邮件的Content-Type域中必须定义multipart/mixed类型,邮件通过multipart/mixed类型中定义的boundary标识将附件内容同邮件其它内容分成不同的段。基本格式如下:

Content-Type: multipart/mixed;

                   boundary="{分段标识}"

    ●  multipart/alternative类型

    MIME邮件可以传送超文本内容,但出于兼容性的考虑,一般在发送超文本格式内容的同时会同时发送一个纯文本内容的副本,如果邮件中同时存在纯文本和超文本内容,则邮件需要在Content-Type域中定义multipart/alternative类型,邮件通过其boundary中的分段标识将纯文本、超文本和邮件的其它内容分成不同的段。基本格式如下:

Content-Type: multipart/alternative;

                   boundary="{分段标识}"

    ●  multipart/related类型

    MIME邮件中除了可以携带各种附件外,还可以将其它内容以内嵌资源的方式存储在邮件中。比如我们在发送html格式的邮件内容时,可能使用图像作为html的背景,html文本会被存储在alternative段中,而作为背景的图像则会存储在multipart/related类型定义的段中。基本格式如下:

Content-Type: multipart/related;

                   type="multipart/alternative";

                   boundary="{分段标识}"

1.3.2  multipart类型的boundary属性

    multipart的子类型中都定义了各自的boundary属性,邮件使用这些boundary中定义的字符串作为标识,将邮件内容分成不同的段,段体内的每个子段以“--”+boundary行开始,父段则以“--”+boundary+“--”行结束,不同段之间用空行分隔。

1.3.3  multipart类型的层次关系

表3:multipart子类型之间的层次关系

Multipart/mixed

Multipart/relatedMultipart/alternative纯文本正文超文本正文内嵌资源

附件

    MIME邮件通过多个Content-Type域的multipart类型将内容分成不同的段,这些段在邮件中不是线形顺序排列的,而是存在一个互相包含的层次关系,multipart子类型之间的层次关系结构如表3。

1.4  Content-Transfer-Encoding域

    MIME邮件可以传送图像、声音、视频以及附件,这些非ASCII码的数据都是通过一定的编码规则进行转换后附着在邮件中进行传递的。编码方式存储在邮件的Content-Transfer-Encoding域中,一封邮件中可能有多个Content-Transfer-Encoding域,分别对应邮件不同部分内容的编码方式。目前MIME邮件中的数据编码普遍采用Base64编码或Quoted-printable编码来实现。

1.4.1  Base64编码

    Base64编码的目的是将输入的数据全部转换成由64个指定ASCII字符组成的字符序列, 这64个字符由{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}构成。编码时将需要转换的数据每次取出6bit,然后将其转换成十进制数字,这个数字的范围最小为0,最大为63,然后查询{'A'-'Z', 'a'-'z', '0'-'9', '+', '/'}构成的字典表,输出对应位置的ASCII码字符,这样每3个字节的数据内容会被转换成4个字典中的ASCII码字符,当转换到数据末尾不足3个字节时,则用“=”来填充。

1.4.2  Quoted-printable编码

    Quoted-printable编码的目的也是将输入的信息转换成可打印的ASCII码字符,但它是根据信息的内容来决定是否进行编码,如果读入的字节处于33-60、62-126范围内的,这些都是可直接打印的ASCII字符,则直接输出,如果不是,则将该字节分为两个4bit,每个用一个16进制数字来表示,然后在前面加“=”,这样每个需要编码的字节会被转换成三个字符来表示。

2  MIME邮件信息提取

    从上面的分析可以看出,MIME邮件传递的实际是一个经过特殊编码并以约定格式排列的字符序列,我们只需要提取存储在邮件各种域中的格式、位置和编码信息,按照根据这些信息从字符序列中提取出对应的字符内容并对其进行反向解码,就可以得到我们需要的有关内容。

下面给出.Net环境下,利用C#结合正则表达式从邮件中提取相关信息的基本思路和部分代码。

2.1 收件人/发件人/邮件主题的提取

    收件人、发件人、邮件主题是一封邮件的基本组成信息,分别存邮件的From域、To域、Subject域中。开发中只需要通过正则表达式来匹配这些指定的域,然后从匹配结果中取出相关信息即可。

    示例代码:提取邮件主题

string emailContent = “……”;//emailContent中存储的是邮件内容

pat = @"^Subject:\s*(?.*)\s*\r\n";</p><p>myMatches = Regex.Matches(emailContent,pat,RegexOptions.Multiline);</p><p>foreach(Match nextMatch in myMatches)</p><p>{</p><p>         GroupCollection myGroup = nextMatch.Groups;</p><p>         string title = myGroup["title"].ToString();//title变量存储From域的内容</p><p>         ……</p><p>}</p><p><strong>    </strong>需要注意的是上面的代码提取的是跟随在Subject:后面的字符串,如果邮件的主题内容是中文或者其它需要编码的地区文字,则还需要对其进行解码。比如,如果邮件的Subject域中的信息是“你好”,那么提取出来的字符串会是这种形式:=?gb2312?B?xOO6ww==?=,第一个?同第二个?之间的gb2312代表标题内容所使用的字符集,第二个?和第三个?之间的B代表这部分内容采用的是base64编码方式,如果采用Quoted-printabel编码方式则显示Q,第三个?和第四个?之间则是“你好”经过base64编码后的字符串。</p><h2 style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); white-space: normal; background-color: rgb(255, 255, 255);"><a style="color: rgb(51, 102, 153);" name="t7"></a><span style="font-size: 13px;">2.2  multipart分段信息的提取</span></h2><p><strong>    </strong>邮件通过multipart类型将内容分隔成不同的段,各段之间的边界标识由对应multipart类型的boundary属性定义。要从邮件中提取出需要的内容,首先需要提取出邮件中的分段信息。下面的代码从一封邮件中提取出所有的multipart类型的名称和boundary属性。</p><p>示例代码:提取multipart信息</p><p>string emailContent = “……”;//emailContent中存储的是邮件内容</p><p>string pat = @"\bContent-Type:\s*(?<type>\w+/\w+);\s+(type=\S(?<subtype>\S+)\S)?\s+boundary=""(?<flag>\S+)""";</p><p>MatchCollection myMatches = Regex.Matches(emailContent,pat);</p><p>foreach(Match nextMatch in myMatches)</p><p>{</p><p>         GroupCollection myGroup = nextMatch.Groups;</p><p>         string type = myGroup["type"].ToString();//type变量存储multipart类型的名称</p><p>         string flag = myGroup["flag"].ToString();//flag变量存储multipart类型的boundary属性</p><p>         ……</p><p>}</p><h2 style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); white-space: normal; background-color: rgb(255, 255, 255);"><a style="color: rgb(51, 102, 153);" name="t8"></a><span style="font-size: 13px;">2.3  邮件附件的提取</span></h2><p><strong>    </strong>邮件中的附件信息由对应的Content-Type域、Content-Transfer-Encoding域、Content-Disposition域和multipart/mixed类型定义,前三个域定义附件的类型、名称和编码方式,multipart/mixed则定义附件同邮件其它内容的分段标识。基本格式如下:</p><table cellspacing="0" cellpadding="0"><tbody><tr class="firstRow"><td valign="top" width="211" style="line-height: 19px;"><p>--boundary分段标识</p><p>Content-Type: application/msword;</p><p>         name="readme.doc"</p><p>Content-Transfer-Encoding: base64</p><p>Content-Disposition: attachment;</p><p>         filename=" readme.doc "</p><p>……</p><p>文件内容的Base64编码</p><p>……</p><p>--boundary分段标识</p></td></tr></tbody></table><p><strong>    </strong>示例代码:提取邮件附件</p><p>//boundaryMixed代表已经提取出的multipart/mixed类型的boundary标识</p><p>//DecodeBase64为自定义的base64解码函数</p><p>//DecodeQuotedPrintable为自定义的quoted-printable解码函数</p><p>string emailContent = “……”;//emailContent中存储的是邮件内容</p><p>string pat = @"\r\nContent-Type:\s*(?<filetype>\S*);\s*name=""(?<name>\S*)""\s*Content-Transfer-Encoding:\s*(?<encoding>\S*)\s*Content-Disposition:\s*attachment;\s*filename=""(?<filename>\S+)""\s+(?<content>[\S|\r\n]+)" + "--" + boundaryMixed;</p><p>MatchCollection myMatches = Regex.Matches(emailContent,pat,RegexOptions.Singleline);   </p><p>foreach(Match nextMatch in myMatches)</p><p>{</p><p>         //提取附件的类型、编码方式、文件名、内容信息</p><p>         GroupCollection myGroup = nextMatch.Groups;</p><p>         string fileType = myGroup["filetype"].ToString();</p><p>         string encoding = myGroup["encoding"].ToString();</p><p>         string fileName = myGroup["filename"].ToString();</p><p>         string content = myGroup["content"].ToString().Trim();</p><p>         byte[] attachFile;</p><p>         //根据附件的编码方式对提取出的附件内容进行解码</p><p>         if(encoding == “base64”)</p><p>         {</p><p>                   attachFile = DecodeBase64 (content);</p><p>}</p><p>if(encoding == “quoted-printable”)</p><p>{</p><p>                   attachFile = DecodeQuotedPrintable (content);</p><p>}</p><p>//将解码后的内容写入磁盘</p><p><span style="color: rgb(51, 51, 51); background-color: rgb(255, 255, 255);">         FileStream fs = new FileStream("c:\\" + fileName,</span></p><p>FileMode.CreateNew);</p><p>         BinaryWriter bw = new BinaryWriter(fs);</p><p>         bw.Write(attachFile);</p><p>         bw.Close();</p><p>         fs.Close();</p><p>}</p><p><strong>    </strong>上面的程序从邮件原文中提取出附件信息,并根据附件采用的编码类型进行解码,然后将解码后的内容按照原文件名存储到C盘根目录。同样,如果附件的文件名是中文或者其它需要编码的文字,则首先需要对文件名进行解码。</p><p><br/></p></div> <!--反馈中心--> <div class="help-feedback"> <!--反馈中心--> <style> .layui-rate{padding:0 !important; height: 20px} </style> <form method="post" class="news-from ld-form" action="/index/help/feedback.html" data-success="solvedfail" id="dataForm" > <div class="solved-info"> <div id="submit-success"><p>提交成功!非常感谢您的反馈,我们会继续努力做到更好!</p> <a href="javascript:" class="yes more-suggest" style="display: none">更多建议</a> </div> <div id="solved-btn" style="overflow: hidden"> <p>这条文档是否有帮助解决问题?</p> <div id="star"></div> <a href="javascript:" class="no btn-cry" style="display: none">没有帮助</a> <a href="javascript:" class="yes btn-smile2 " data-ajaxurl="/index/help/feedback.html?type=1" style="display: none">有帮助</a> </div> </div> <div class="solved-no"> <h4>非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:</h4> <h5>在文档使用中是否遇到以下问题:</h5> <div class="solved-question"> <input name="id" type="hidden" value="6402" > <label class="checkbox"><input name="option[]" value="1" type="checkbox">内容错误</label> <label class="checkbox"><input name="option[]" value="2" type="checkbox">更新不及时</label> <label class="checkbox"><input name="option[]" value="3" type="checkbox">链接错误</label> <label class="checkbox"><input name="option[]" value="4" type="checkbox">缺少代码/图片示例</label> <label class="checkbox"><input name="option[]" value="5" type="checkbox">太简单/步骤待完善</label> <label class="checkbox"><input name="option[]" value="6" type="checkbox">其他</label> </div> <textarea rows="5" name="msg" placeholder="您可以在这里输入更多意见和建议(限200字以内)"></textarea> <input type="submit" class="solved-btn ld-btn1" id="ld-btn" value="提交反馈"> <input type="hidden" name="referer" value="" /> <input type="hidden" name="star" value="" /> <input type="hidden" id="url" value="/index/help/feedback.html?type=0" /> <input type="button" class="solved-btn ld-reset" value="取消"> </div> </form> <!--登录弹框--> <style type="text/css"> #login-ewm{width: 520px; height: 420px; position: fixed; left: 50%; top: 50%; margin: -210px 0 0 -260px;z-index: 111111111;} #login-ewm .cloumn{ height:60px; padding:0 20px 0 40px; line-height:60px; color:#fff; font-size:18px; background:#015bfe; overflow:hidden;} #login-ewm .close{width:55px;height:56px;position: absolute;right: 0;top: 0;background: url("/statics/images/public/ico/float-close.png") center no-repeat;cursor:pointer;} #login-ewm .register{margin: 0 85px;border-top: 1px solid #ddd;line-height: 50px;text-align: right;overflow: hidden} #login-ewm .register a,#login-ewm .register span{cursor: pointer;color: #015BFE} #wx_login_img_show{width: 300px; height: 300px; margin: 0 auto} #wx_login_img_show iframe {height: 275px !important;margin-top: 15px;} #verifyCodeBtn{ display: block; width: 110px;height: 36px;cursor: pointer;border: 0;background: #015BFE;text-align: center;color: #fff; margin: 25px auto 0} </style> <div id="login-box" style="display:none"> <div class="pop-login" id="pop-form" data-accountUrl="https://account.console.landui.com"> <div class="account-login" style="display: none;"> <div class="cloumn">会员登录<a onclick="closeAll()"><i ></i></a></div> <span class="errorInfo"></span> <div id="account-login"> <div id="login_form"> <!-- 账号登录 --> <div class="acc_num" style="display: none;"> <div class="group name"><input type="text" id="username" data-regex="username" placeholder="用户名/邮箱"></div> <div class="group pwd"><input type="password" id="password" minlength="6" placeholder="登录密码"></div> </div> <!-- 手机登录 --> <div class="phone"> <div class="group tel"> <span class="ico">+86(中国大陆)</span> <input type="text" id="phone" data-regex="username" placeholder="手机号码"> </div> <div class="group code"> <input type="text" id="code" minlength="6" placeholder="验证码"> <button type="button" id="sendSmsCode">短信验证码</button> </div> </div> <div class="go-reg"> <a href="javascript:void(0)" id="login-way">账号或邮箱登录</a> <p>还没有账号?立即 <a href="" class="btn-register">免费注册</a></p> </div> <!--多账号--> <div class="check-account" style="display: none"> <h4>请选择找回账号<span id="repwdBack" class="back">返回></span></h4> <ul></ul> </div> <input type="button" id="layer_submit" value="登录"> </div> <div class="other">其他账户快捷登录: <span class="qq" id="qqChange"></span> <a onclick="shoEwm()" class="weixin" id="wxChange"></a> <a style=" float: right;color: #015bfe;" href="" class="btn-repwd">忘记密码?</a> </div> </div> <!--验证码弹框--> <div id="validate-code" style="display: none"> <div class="input-group"> <img src="" class="captcha" id="captcha" alt="验证码" title="点击刷新" style="cursor:pointer;"> </div> <div class="input-group"> <input type="text" id="verify_code" value="" placeholder="请输入验证码" style="display:block;width: 320px; margin: 0 auto"> <input type="hidden" name="captcha_id" value="" /> </div> <div class="input-group"> <input type="button" id="verifyCodeBtn" value="确定"> </div> </div> <input type="hidden" id="login_type" value="phone" /> <input type="hidden" id="captcha_id" value="" /> <input type="hidden" id="multipleFlag" value="false" /> <input type="hidden" id="token" value="" /> </div> <!--微信登录--> <div id="login-ewm"> <div class="cloumn">会员登录<span class="close" onclick="closeAll()"></span></div> <div id="wx_login_img_show"></div> <p class="register"><span style="float:left;" id="typeChange">账号登录</span>还没有账号?<a href="" class="btn-register">立即注册</a></p> </div> </div> </div> <script src="//static.landui.com/statics/js/common/wxLogin.js"></script> <!--登录弹框 end--> <script> LD.validater.initValidate(); //初始化表单 /* 弹框账号登录和二维码登录切换*/ var accountUrl = $('#pop-form').attr('data-accountUrl'); var accountReg = accountUrl+'/register'; var accountRepwd = accountUrl+'/repwd'; $('.btn-register').attr('href',accountReg); $('.btn-repwd').attr('href',accountRepwd); // 微信扫码登录 wxLoginF(); function shoEwm () { wxLoginF(); } function wxLoginF() { var curUrl = window.location.href $.get(accountUrl+'/api/users/wechat/oauth?reurl='+curUrl, function (res) { // 当前页面地址写入cookie,微信QQ扫码登录成功后跳转到此页面 setCookie('landuiWxQxReUrl', window.location.href, 1, '.landui.com'); new WxLogin({ id: "wx_login_img_show", appid: res.data.appid, scope: "snsapi_login", redirect_uri: res.data.redirect_uri, state: res.data.state, style: '', href: 'https://static.landui.com/statics/css/front/wxLogin.css' }) }) } // 关闭弹窗 function closeAll() { $("#verify_code").val(''); // 关闭窗口时 清空验证码 LD.tip.closeAll(); } // 设置cookie function setCookie(name, value, days, domain) { let expires = ""; if (days) { const date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toUTCString(); } const domainAttribute = domain ? "; domain=" + domain : ""; document.cookie = name + "=" + (value || "") + expires + "; path=/" + domainAttribute; } </script> <link rel="stylesheet" href="/statics/sc/lib/layui/css/layui.css?v=__VERSION__" media="all"> <script src="//static.landui.com/statics/sc/lib/layui/layui.js?v=__VERSION__"></script> <script> $(function () { $('.solved-no').show(); //用户点击有帮助 $('.btn-smile2').click(function () { feedback(1); }); $(":submit[id=ld-btn]").click(function(check){ feedback(0); var blankH = $('.blank-height').height(); if (blankH - 442 <= 1109){ $('.rightBlank').css('height','1109px') } else { var blankH1 = blankH - 442 + 60; $('.rightBlank').css('height',blankH1); } return false; }); //用户点击取消提交 $('.ld-reset').click(function () { $('.solved-no').css('display','none'); $('.solved-info').css('display','none'); var blankH = $('.blank-height').height(); if (blankH - 442 <= 1109){ $('.rightBlank').css('height','1109px') } else { var blankH1 = blankH - 442; $('.rightBlank').css('height',blankH1) } }); }) layui.use('rate', function(){ var rate = layui.rate; //渲染 var ins1 = rate.render({ elem: '#star' //绑定元素 ,setText: function(value){ var arrs = { '1': '极差' ,'2': '差' ,'3': '中等' ,'4': '好' ,'5': 'very good' }; this.span.text(arrs[value] || ( value + "星")); } ,choose: function(value){ $("input[name='star']").val(value); console.log(star) // feedback(3); } }); }); // type 0:提交反馈 1:有帮助 2:小心心 function feedback(type=0) { var url = $("#url").val(); var islogin = true; var post = $("#dataForm").serialize(); LD.ajax.post(url, post, function (data) { console.log(data); if (data.info.status == "nologin") { console.log("未登录"); front.login.show(function () { });//如果没有登录则弹出登录框 return false; } if (type == 1){ $('#solved-btn').hide(); $('#submit-success').show(); } if (data.info.status == 'success'){ $('#submit-success').show(); $("#solved-btn").hide(); $('.solved-no').css('display','none'); // layer.alert('感谢您的反馈,反馈我们已经收到') } return true; }); return islogin; } </script> </div> <!-- --> <!-- <form method="post" class="news-from ld-form" action="/index/help/feedback.html" data-success="solvedfail">--> <!-- <div class="solved-info">--> <!-- <div id="submit-success"><p>提交成功!非常感谢您的反馈,我们会继续努力做到更好!</p><a href="javascript:" class="yes more-suggest">更多建议</a></div>--> <!-- <div id="solved-btn">--> <!-- <p>这条文档是否有帮助解决问题?</p>--> <!-- <a href="javascript:" class="no btn-cry">没有帮助</a>--> <!-- <a href="javascript:" class="yes btn-smile" data-ajaxurl="/index/help/feedback.html?type=1">有帮助</a>--> <!-- </div>--> <!-- </div>--> <!-- <div class="solved-no">--> <!-- <h4>非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:</h4>--> <!-- <h5>在文档使用中是否遇到以下问题:</h5>--> <!-- <div class="solved-question">--> <!-- <input name="id" type="hidden" value="6402" >--> <!-- <label class="checkbox"><input name="option[]" value="1" type="checkbox">文档内容不全面,重点不清晰</label>--> <!-- <label class="checkbox"><input name="option[]" value="2" type="checkbox">文字描述过于冗余、复杂</label>--> <!-- <label class="checkbox"><input name="option[]" value="3" type="checkbox">描述的步骤有问题</label>--> <!-- <label class="checkbox"><input name="option[]" value="4" type="checkbox">文档内容更新不及时</label>--> <!-- </div>--> <!-- <textarea rows="5" name="msg" placeholder="您可以在这里输入更多意见和建议(限200字以内)"></textarea>--> <!-- <input type="submit" class="solved-btn ld-btn" value="提交反馈">--> <!-- <input type="hidden" name="referer" value="" />--> <!-- <input type="button" class="solved-btn ld-reset" value="取消">--> <!-- </div>--> <!-- </form>--> <!-- --> <ul class="other"> <li>上一篇:<a href='/help/show-6401' title='常见的MIME类型'>常见的MIME类型</a></li><li>下一篇:<a href='/help/show-6403' title='linux里查看日志最后几行的方法'>linux里查看日志最后几行的方法</a></li> </ul> </div> </div> </div> <div class="rightBlank"></div> </div> <div class="footer"> <div class="container"> <div class="foot-tel"> <h1></h1> <a href="" class="logo"><img src="//static.landui.com/statics/images/public/foot-logo.png?v=20251112" alt="8455线路检测中心"></a> <div class="left"> <p class="tel">服务热线:<br>4006-75-4006<span>(7*24小时在线)</span></p> <p class="time">总机直拨:<br>0871-63886388(工作日9:00-18:00)</p> <p class="time">域名投诉举报:<br>电话:4006-75-4006-8<br>邮箱:kefu@landui.com</p> <h5>Copyright © 2012 - 2026 LanDui.com. All RightsReserved. 8455线路检测中心 版权所有</h5> </div> <ul> <li class="qq"> <a href="/index/index/qq.html" id="qqfoot" target="_blank"></a> </li> <li class="weixin"> <a href="javascript:void(0)"></a> <p><i></i><img src="//static.landui.com/statics/images/public/fwh.jpg?v1" width="110" height="110" alt="蓝队微信"></p> </li> <li class="weibo"> <a href="javascript:void(0)"></a> <p><i></i><img src="//static.landui.com/statics/images/public/wb.jpg?v=1" width="110" height="110" alt="蓝队微博"></p> </li> <li class="mail"> <a href="mailto:kefu@landui.com" target="_blank"></a> </li> </ul> </div> <div class="main"> <ul class="foot-menu"> <li> <h4>关于8455线路检测中心</h4> <a href="/help/aboutus.html" title="8455线路检测中心">8455线路检测中心</a> <a href="/help/course.html" title="发展历程">发展历程</a> <a href="/help/qualification.html" title="资质荣誉">资质荣誉</a> <a href="/help/notice.html" title="澳门新葡8455线路检测中心">澳门新葡8455线路检测中心</a> <a href="/help/job.html" title="诚聘英才">诚聘英才</a> <a href="/help/contact.html" title="联系我们">联系我们</a> <a href="/help/ilist-0" title="资讯中心">资讯中心</a> </li> <li> <h4>8455线路检测中心产品</h4> <a href="/cloud/" title="云服务器">云服务器</a> <a href="/hosting/" title="虚拟主机">虚拟主机</a> <a href="/server/collocation/" title="服务器托管">服务器托管</a> <a href="/server/" title="服务器租用">服务器租用</a> <a href="/ssl/" title="SSL证书">SSL证书</a> <a href="/domain/" title="域名注册">域名注册</a> </li> <li> <h4>服务与支持</h4> <a href="/docs-list-61.html" title="云服务器问题">云服务器问题</a> <a href="/docs-list-196.html" title="网站备案指南">网站备案指南</a> <a href="/help/list-39.html" title="租用管托知识">租用管托知识</a> <a href="/docs-10694.html" title="域名注册问题">域名注册问题</a> <a href="/docs-10175.html" title="SSL证书安装">SSL证书安装</a> <a href="/help/" title="技术问题索引">技术问题索引</a> </li> <li> <h4>快速通道</h4> <a href="/domain/whois/" title="域名whois查询">域名whois查询</a> <a href="/rdap/" title="域名rdap查询服务">域名rdap查询服务</a> <a href="/index/user/appeal.html" title="账号申诉" target="_blank">账号申诉</a> </li> </ul> <div class="foot-link"> <a href="/city/" target="_blank">全国域名注册</a> <a href="http://www.hf960.com/" target="_blank">航帆网</a> <a href="http://www.ip138.com/idc/" target="_blank">IDC公司大全</a> <a href="http://www.9ji.com/" target="_blank">九机网</a> </div> <ul class="foot-honor"> <li class="item1">工信部备案号 <a href="http://beian.miit.gov.cn/" target="_blank">滇ICP备05000110号-1</a></li> <li class="item2"><a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=53011102001527" target="_blank">滇公网安备53011102001527号</a></li> <li class="item1">增值电信业务经营许可证 <a href="https://static.landui.com/statics/images/about/zizhi/b14.jpg" target="_blank">B1.B2-20181647</a>、<a href="https://static.landui.com/statics/images/about/zizhi/b16.jpg?v=1" target="_blank">滇B1.B2-20190004</a></li> </ul> <ul class="foot-honor foot-text"> <li class="item3"><a href="https://www.ynnet.org.cn/cert-3.html" target="_blank">云南互联网协会理事单位</a></li> <li class="item4"><a href="https://v.yunaq.com/certificate?domain=www.landui.com" target="_blank">安全联盟认证网站身份V标记</a></li> <li>域名注册服务机构许可:<a href="https://domain.miit.gov.cn/%E5%9F%9F%E5%90%8D%E6%B3%A8%E5%86%8C%E6%9C%8D%E5%8A%A1%E6%9C%BA%E6%9E%84/%E4%BA%92%E8%81%94%E7%BD%91%E5%9F%9F%E5%90%8D/%E4%BA%91%E5%8D%97%E8%93%9D%E9%98%9F%E4%BA%91%E8%AE%A1%E7%AE%97%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8" target="_blank">滇D3-20230001</a></li> <li>代理域名注册服务机构:新网数码</li> <li style="margin-top: 4px">CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn</li> </ul> </div> </div> </div> <!--右侧咨询--> <div class="float-consult"> <ul> <li> <p class="cloumn cs1">售前咨询</p> <div class="consult preale"> <h2>售前咨询<span>服务时间:09:00-23:30</span></h2> <div class="list"> <div class="item"> <em>售前值班</em> <a href="/index/index/kefu.html?type=sq" class="ico wx" target="_blank"></a> <span class="card"><img src="//static.landui.com/statics/images/public/sq-ewm.jpg?v=1" width="89" height="89" alt="售前值班"></span> <p class="ico tel"><span class="phone">4006-75-4006</span></p> </div> <div class="tip"> <h5>咨询热线:</h5> <p><strong>4006-75-4006</strong>(09:00-23:30)<br> <strong>0871-6388 6388 (总机)</strong>(工作日 09:00-18:00)</p> </div> </div> <div class="other"> <h3>您可能遇到了下面的问题:</h3> <a href="/docs-list-61.html" target="_blank">云服务器问题</a> <a href="/docs-10843.html" target="_blank">对象存储计费</a> <a href="/docs-10694.html" target="_blank">域名注册指南</a> </div> </div> </li> <li> <p class="cloumn cs2">售后咨询</p> <div class="consult aftersale"> <h2>售后咨询<span>服务时间:00:00-24:00</span></h2> <div class="list"> <div class="item"> <em>24H值班技术</em> <a href="/index/index/kefu.html?type=sh" id="sh" class="ico wx" target="_blank"></a> <span class="card"><img src="//static.landui.com/statics/images/public/24-ewm.jpg?v=1" width="89" height="89" alt="售后咨询"></span> <p class="ico tel"><span class="phone">4006-75-4006</span></p> </div> <div class="item"> <a class="" href="/index/help/complaint.html"> <em>投诉与建议</em> <span style="margin-top: 10px; margin-top: 10px;display: inline-block;color: #8e8e8e;">最快响应10分钟</span> </a> </div> </div> <div class="other"> <h3>您可能遇到了下面的问题:</h3> <a href="/help/list-34.html" target="_blank">云服务器教程</a> <a href="/help/list-31.html" target="_blank">远程登陆问题</a> <a href="/help/list-32.html" target="_blank">FTP上传问题</a> <a href="/help/" target="_blank">其他问题查询</a> </div> </div> </li> <li> <p class="cloumn cs4">备案咨询</p> <div class="consult beian"> <h2>备案咨询<span style="display: block; margin: 5px 0 0;">服务时间:09:00-18:00(工作日)</span></h2> <div class="list"> <div class="item"> <em>备案专业客服</em> <a href="https://work.weixin.qq.com/kfid/kfce7ab42caeabf7de3" id="ba" class="ico wx" target="_blank"></a> <span class="card"><img src="//static.landui.com/statics/images/public/24-ewm.jpg?v=1" width="89" height="89" alt="备案咨询"></span> <p class="ico tel"><span class="phone">0871-6388 6388</span></p> </div> </div> <div class="other"> <h3>您可能遇到了下面的问题:</h3> <a href="/docs-10719.html" target="_blank">备案所需材料</a> <a href="/docs-10720.html" target="_blank">提交备案流程</a> <a href="/docs-10729.html" target="_blank">关于幕布申请</a> <a href="/docs-10718.html" target="_blank">备案服务指引</a> </div> </div> </li> <li style="display:none"> <p class="cloumn cs3">电话</p> <div class="service">0871-6388 6388 (总机)</div> </li> <li><a href="/user/aws/add.html" class="cloumn cs5">工单</a></li> <li> <p class="cloumn cs6">二维码</p> <div class="ewm"><img src="//static.landui.com/statics/images/public/fwh.jpg?v=1" width="110" height="110" alt="8455线路检测中心服务号二维码"></div> </li> <li class="back-top"> <p class="cloumn cs8">TOP</p> </li> </ul> </div> <!--百度统计--> <script type="text/javascript"> // 给所有img标签添加alt属性 $(document).ready(function() { $('img').each(function() { if ($(this).attr('alt') === '' || $(this).attr('alt') === undefined) { $(this).attr('alt', '8455线路检测中心'); } }); }); // 新版统计 - 8月6日更新 var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?5d4c129b1af28672d386bd1b85573c32"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); window._agl = window._agl || []; (function () { _agl.push( ['production', '_f7L2XwGXjyszb4d1e2oxPybgD'] ); (function () { var agl = document.createElement('script'); agl.type ='text/javascript'; agl.async = true; agl.src = 'https://fxgate.baidu.com/angelia/fcagl.js?production=_f7L2XwGXjyszb4d1e2oxPybgD'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(agl, s); })(); })(); </script> <script> $(function () { help.index.init(); help.index.show(); $('a').each(function() { // 获取当前链接的 href 属性值 var href = $(this).attr('href'); if (href && href.includes('http') && !href.includes('www.landui.com')) { $(this).on('click', function(event) { event.preventDefault(); }); } }); }) </script> </body><div style="clear:both;padding:10px;text-align:center;margin:5"><a href="/sitemap.xml" target="_blank">XML 地图</a> </html>