Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2491|回复: 5
打印 上一主题 下一主题

读信页--原

[复制链接]

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
跳转到指定楼层
楼主
发表于 2016-4-20 23:26:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
mail.showCondensedAddresses   浓缩的地址  只显示名字
mailnews.headers.showReferences  引用
mailnews.headers.minNumHeaders   邮件头显示行数
mail.show_headers = 2 显示所有邮件头信息  #define VIEW_ALL_HEADERS 2
mailnews.headers.extraExpandedHeaders  这里设置其它要显示的邮件头信息,如 received  以空格分隔
mail.inline_attachments  改为false表示: txt、图片等附件不在邮件内容中显示。 --对应菜单项  查看-->查看直接插入的附件
这里的txt是全部显示文本内容

mailnews.display.html_as --对应菜单项  查看-->邮件体为-->原始Html 0  简单Html 3  纯文本 1
mailnews.attachments.display.view;  附件图标及文字显示方案   var views = ["small", "large", "tile"];
mailnews.attachments.display.start_expanded;   true 附件加载时默认为折叠展开   膨胀时自动调整到适当高度(1 / 4信息窗格或更小)  即附件过多时,会出现滚动条


  1. // If the attachments box takes up too much of the message pane, downsize:
  2.     var maxAttachmentHeight = document.getElementById("messagepanebox")
  3.                                       .boxObject.height / 4;

  4.     attachmentView.setAttribute("height", Math.min(attachmentHeight,
  5.                                                    maxAttachmentHeight));
  6.     attachmentView.setAttribute("maxheight", attachmentHeight);
复制代码
mail.spam.manualMark 当我将消息标记为垃圾邮件时: 是否启用下面操作
mail.spam.manualMarkMode  0 移到垃圾邮件夹  1 删除他们      -----上面两项起作用后,再执行相应右键菜单中的 为垃圾或非垃圾则对应的执行上面的操作

mailnews.ui.junk.manualMarkAsJunkMarksRead
mail.spam.markAsReadOnSpam  将垃圾消息自动标记为已读
mail.spam.display.sanitize


msgHdrViewOverlay.js


var gExpandedHeaderList = [
  { name: "subject" },
  { name: "from", useToggle:true, outputFunction: OutputEmailAddresses },
  { name: "reply-to", useToggle:true, outputFunction: OutputEmailAddresses },
  { name: "to", useToggle:true, outputFunction: OutputEmailAddresses },
  { name: "cc", useToggle:true, outputFunction: OutputEmailAddresses },
  { name: "bcc", useToggle:true, outputFunction: OutputEmailAddresses },
  { name: "newsgroups", outputFunction: OutputNewsgroups },
  { name: "references", outputFunction: OutputMessageIds },
  { name: "followup-to", outputFunction: OutputNewsgroups },
  { name: "content-base" },
  { name: "tags" } ];

UpdateExpandedMessageHeaders()

flagged 星标
回复

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
沙发
 楼主| 发表于 2016-4-20 23:26:30 | 只看该作者
document.getElementById("mailContext").openPopup(document.getElementById("curmailflag"), "after_start", 0, 0, true); 左键单击打开右键菜单
回复 支持 反对

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
板凳
 楼主| 发表于 2016-4-20 23:26:57 | 只看该作者
  1. x-mozilla-localizeddate在nsMimeHtmlEmitter.cpp中添加
  2. if (!PL_strcasecmp("Date", headerInfo->name))
  3.     {
  4.       headerNameEnumerator->Append("X-Mozilla-LocalizedDate");
  5.       GenerateDateString(headerValue, convertedDateString, false);
  6.       headerValueEnumerator->Append(convertedDateString);
  7.     }


  8. Received: from localhost.localdomain (unknown[121.15.167.239]) by rmsmtp-host002-12002 (RichMail) with SMTP id 2ee25326b3230c1-0e0d5; Mon, 17 Mar 2014 16:32:37 +0800 (CST)
  9. Date: Mon, 17 Mar 2014 16:40:43 +0800 (CST)
复制代码
回复 支持 反对

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
地板
 楼主| 发表于 2016-4-20 23:27:16 | 只看该作者
本帖最后由 hechengjin 于 2014-5-13 11:54 编辑


内嵌窗口于主窗口messenger.xul的读信页
<vbox id="singlemessage" flex="1">
                      <hbox id="msgHeaderView"/>
                      <hbox id="editMessageBox" hidden="true"/>
                      <vbox id="attachmentView"/>
                      <deck id="msgNotificationBar"/>
                      <!-- The messagepanewrapper hbox exists to allow
                           extensions to add sidebars to the message. -->
                      <hbox id="messagepanewrapper" flex="1">
                        <browser id="messagepane" context="mailContext"
                                 autofind="false" minheight="1" flex="1"
                                 name="messagepane" tooltip="aHTMLTooltip"
                                 disablehistory="true" type="content-primary"
                                 src="about:blank"
                                 onresize="return messagePaneOnResize(event);"
                                 disablesecurity="true"
                                 onclick="return contentAreaClick(event);"/>
                      </hbox>
                      <splitter id="attachment-splitter" collapse="after"
                                resizebefore="closest" resizeafter="closest"
                                collapsed="true" hidden="true"/>

                      <findbar id="FindToolbar" browserid="messagepane"/>
                    </vbox>
                  </vbox>


独立页窗口
messageWindow.xulmessageWindow.js
function OnLoadMessageWindow()
{
setTimeout(delayedOnLoadMessageWindow, 0);
}
function delayedOnLoadMessageWindow()
{

setTimeout(actuallyLoadMessage, 0);
}

function actuallyLoadMessage()
{//主要用于显示邮件的代码
gFolderDisplay.cloneView(originViewWrapper);

gFolderDisplay.selectMessage(msgHdr);
}

回复 支持 反对

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
5#
 楼主| 发表于 2016-4-20 23:28:07 | 只看该作者
  1. nsInputStreamPump::OnInputStreamReady(nsIAsyncInputStream *stream)
  2. nsDocumentOpenInfo::OnDataAvailable(nsIRequest *request, nsISupports * aCtxt,
  3. nsImapCacheStreamListener::OnDataAvailable(nsIRequest *request, nsISupports * aCtxt, nsIInputStream * aInStream, uint32_t aSourceOffset, uint32_t aCount)
  4. nsresult nsStreamConverter::OnDataAvailable(nsIRequest     *request,
  5. D:\svn\Client\ThinkMail_ClientWin_2013\trunk\src\thinkmail\mailnews\mime\src\mimei.cppMimeObject *
  6. mime_new (MimeObjectClass *clazz, MimeHeaders *hdrs, const char *override_content_type)
  7. {
  8. }

  9. d:\svn\Client\ThinkMail_ClientWin_2013\trunk\src\thinkmail\mailnews\mime\src\mimemoz2.cpp
  10. extern "C" void  *
  11. mime_bridge_create_display_stream(
  12.                           nsIMimeEmitter      *newEmitter,
  13.                           nsStreamConverter   *newPluginObj2,
  14.                           nsIURI              *uri,
  15.                           nsMimeOutputType    format_out,
  16.                           uint32_t            whattodo,
  17.                           nsIChannel          *aChannel)
  18. {
  19.   MimeObject                *obj;
  20.   mime_stream_data   *msd;
  21.   nsMIMESession             *stream = 0;


  22. obj = mime_new ((MimeObjectClass *)&mimeMessageClass, (MimeHeaders *) NULL, MESSAGE_RFC822);
  23. }
  24. extern "C" int
  25. mime_display_stream_write (nsMIMESession *stream,
  26.                            const char* buf,  ///所有网络流源码数据都在这个buf里
  27.                            int32_t size){
  28. mime_stream_data *msd = (mime_stream_data *) ((nsMIMESession *)stream)->data_object;
  29.   MimeObject *obj = (msd ? msd->obj : 0);

  30. return obj->clazz->parse_buffer((char *) buf, size, obj);
  31. }
  32. d:\svn\Client\ThinkMail_ClientWin_2013\trunk\src\thinkmail\mailnews\mime\src\mimeobj.cpp
  33. MimeObject_parse_buffer (const char *buffer, int32_t size, MimeObject *obj)
  34. {
  35. return mime_LineBuffer (buffer, size,
  36.              &obj->ibuffer, &obj->ibuffer_size, &obj->ibuffer_fp,
  37.              true,
  38.              ((int (*) (char *, int32_t, void *))
  39.               /* This cast is to turn void into MimeObject */
  40.               obj->clazz->parse_line),
  41.              obj);

  42. }
  43. d:\svn\Client\ThinkMail_ClientWin_2013\trunk\src\thinkmail\mailnews\mime\src\mimebuf.cpp
  44. extern "C" int mime_LineBuffer (const char *net_buffer, int32_t net_buffer_size,        char **bufferP, int32_t *buffer_sizeP, uint32_t *buffer_fpP,
  45.         bool convert_newlines_p,
  46.         int32_t (* per_line_fn) (char *line, uint32_t line_length,
  47.                     void *closure),
  48.         void *closure)
  49. {
  50.   while (net_buffer_size > 0) //循环解析每个字符  {
  51.      for (s = net_buffer; s < net_buffer_end; s++) //过虑得到一行字符
  52.     //得到的一行字符放bufferP中
  53. status = convert_and_send_buffer(*bufferP, *buffer_fpP,
  54.                        convert_newlines_p,
  55.                        per_line_fn, closure);

  56.   }
  57. }

  58. convert_and_send_buffer(char* buf, int length, bool convert_newlines_p,
  59.               int32_t (* per_line_fn) (char *line,
  60.                           uint32_t line_length,
  61.                           void *closure),
  62.               void *closure)
  63. {
  64.   return (*per_line_fn)(buf, length, closure);
  65. }

  66. d:\svn\Client\ThinkMail_ClientWin_2013\trunk\src\thinkmail\mailnews\mime\src\mimemsg.cpp
  67. MimeMessage_parse_line (const char *aLine, int32_t aLength, MimeObject *obj) //解析消息中的每行数据
  68. {//////////////先完成头部分获取///////////////////
  69.   MimeMessage *msg = (MimeMessage *) obj;
  70. msg->hdrs = MimeHeaders_new(); //创建消息头
  71. status = MimeHeaders_parse_line(line, length, msg->hdrs);//解析消息头
  72. status = MimeMessage_close_headers(obj);//完成消息头解析
  73. //////有子项的再调用///即已经解析出新的节点(Multipart/report;)了,后面的内容就是在此基础上进行解析
  74. if (msg->container.nchildren)
  75. {
  76.    if (nl)
  77.     return kid->clazz->parse_buffer (line, length, kid);//重新递归解析这个子节点
  78. }

  79. }

  80. static int MimeMessage_close_headers (MimeObject *obj)//获取完整头部后的操作
  81. {
  82. MimeMessage *msg = (MimeMessage *) obj;
  83.   int status = 0;
  84.   char *ct = 0;      /* Content-Type header */

  85.       status = MimeMessage_write_headers_html(obj); //写入头信息


  86. body = mime_create(ct, msg->hdrs, obj->options);

  87. status = ((MimeContainerClass *) obj->clazz)->add_child (obj, body);  //在原来默认的父节点(Multipart/rfc8233)上加入新的节点(Multipart/report;)


  88. status = body->clazz->parse_begin(body);
  89. mimeEmitterStartBody(obj->options, (obj->options->headers == MimeHeadersNone), msgID, outCharset);


  90. }

  91.   
  92. D:\svn\Client\ThinkMail_ClientWin_2013\trunk\src\thinkmail\mailnews\mime\src\mimei.cppmime_create (const char *content_type, MimeHeaders *hdrs,
  93.        MimeDisplayOptions *opts, bool forceInline /* = false */)
  94. {
  95. clazz = mime_find_class(content_type, hdrs, opts, false); //获取子类型 这里是Multipart/report; 由于report不支持默认为 mimeMultipartMixedClass
  96. }

  97. MimeObjectClass *
  98. mime_find_class (const char *content_type, MimeHeaders *hdrs,
  99.          MimeDisplayOptions *opts, bool exact_match_p)
  100. {
  101.   bool basic_formatting = (html_as == 4) ||
  102.         (opts && opts->format_out == nsMimeOutput::nsMimeMessageAttach);
  103.       if      (!PL_strcasecmp(content_type+10,  "alternative"))
  104.         clazz = basic_formatting ? (MimeObjectClass *)&mimeMultipartMixedClass :
  105.           (MimeObjectClass *)&mimeMultipartAlternativeClass;
  106.       else if (!PL_strcasecmp(content_type+10,  "related"))


  107. }
  108. d:\svn\Client\ThinkMail_ClientWin_2013\trunk\src\thinkmail\mailnews\mime\src\mimemult.cpp
  109. static int
  110. MimeMultipart_parse_line (const char *line, int32_t length, MimeObject *obj)
  111. {
  112.    mult->state = MimeMultipartHeaders; //新段开始mult->hdrs = MimeHeaders_new();

  113.   status = ((MimeMultipartClass *) obj->clazz)->create_child(obj);  //段中出现空行时,创建新节点  ---MimeMultipart_create_child

  114.    status = ((MimeMultipartClass *) obj->clazz)->create_child(obj);
  115. }
  116. d:\svn\Client\ThinkMail_ClientWin_2013\trunk\src\thinkmail\mailnews\mime\src\mimemult.cpp
  117. MimeMultipart_create_child(MimeObject *obj)
  118. {
  119.   char *ct = (mult->hdrs
  120.         ? MimeHeaders_get (mult->hdrs, HEADER_CONTENT_TYPE,
  121.                  true, false)
  122.         : 0);

  123. }
复制代码
回复 支持 反对

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
6#
 楼主| 发表于 2016-4-20 23:28:30 | 只看该作者
CR+NULL+LF
mailnews.display.show_all_body_parts_menu
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-26 01:49 , Processed in 0.062231 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表