【问题标题】:Problem creating an email with an attachment in Javascript在 Javascript 中创建带有附件的电子邮件时出现问题
【发布时间】:2009-02-16 14:10:27
【问题描述】:

我正在通过调用下面的代码并添加附件来启动电子邮件创建。

我希望用户能够输入收件人,并修改消息的内容,所以我不会立即发送。

为什么我在第二次调用该方法时会收到 RangeError?
(第一次正常工作。)

function NewMailItem(p_recipient, p_subject, p_body, p_file, p_attachmentname)
{
   try 
   {
     var objO = new ActiveXObject('Outlook.Application');
     var objNS = objO.GetNameSpace('MAPI');
     var mItm = objO.CreateItem(0);
     mItm.Display();
     if (p_recipient.length > 0) 
     {
       mItm.To = p_recipient;
     }
     mItm.Subject = p_subject;
     if (p_file.length > 0) 
     {
      var mAts = mItm.Attachments;
      mAts.add(p_file, 1, p_body.length + 1, p_attachmentname);
     }
     mItm.Body = p_body;
     mItm.GetInspector.WindowState = 2;
   } catch(e) 
   { 
     alert('unable to create new mail item'); 
   } 
}

错误发生在 mAts.add 行上。因此,当它尝试附加文档时,它会失败。

文件名 (p_file) 也是图像的 http 地址。

【问题讨论】:

  • 在 JavaScript 中甚至可以远程实现这一点让我感到害怕。
  • 这是一个受信任的网站,位于 Intranet 上,但我知道您的意思。
  • @scunliffe:在 JavaScript 中一切皆有可能。毕竟我是一门编程语言。在这种情况下,它是 JScript,它甚至不会在不受信任的环境中运行。

标签: javascript outlook


【解决方案1】:

无法在 IE 之外使用,用户需要在计算机上安装 Outlook 并在其上配置帐户。您确定要以这种方式发送电子邮件吗?

【讨论】:

  • 没关系,这是在受控环境中使用的,每台机器都安装了 IE 和 Outlook,很遗憾,这就是他们想要的。
  • 这就是为什么 25% 的网络使用蹩脚的 IE6,因为这样的推理。
  • 通过专门针对 IE 和 Outlook 进行编码,您参与了不道德的公司锁定策略。也许您可以忍受未来给所有 Web 开发人员和系统用户带来的痛苦和痛苦。如果我处于你的位置,我将不得不辞职。
  • 哦,拜托。下马。你会因为一小段 Javascript 而辞职吗?这甚至不是不道德的。这是公司政策。
  • 查看此主题:stackoverflow.com/questions/657893/… 了解其他一些观点。
【解决方案2】:

我正在用这个小 sn-p 尝试它,它完美无缺:

var objO = new ActiveXObject('Outlook.Application');
var mItm = objO.CreateItem(0);

var mAts   = mItm.Attachments;
var p_file = [
  "http://stackoverflow.com/content/img/vote-arrow-up.png",
  "http://stackoverflow.com/content/img/vote-arrow-down.png"
];
for (var i = 0; i < p_file.length; i++) {
  mAts.add(p_file[i]);
}

请注意,我将所有可选参数留给Attachments.Add()。该方法默认在末尾添加附件,这似乎是您想要的。

你能试试这个独立的sn-p吗?如果它适合您,请逐步将您的代码减少到这个绝对最小值,您会发现导致错误的原因。

【讨论】:

  • 对不起,我绝对可以。它第一次起作用。只是在那之后。
  • 猜想:你能把同一份文件附加两次吗?可能是第二份文件有问题?
  • 我正在附加同一个文档,错误标题是 RangeError,我不确定是否会获得更多详细信息。
  • Hm.... "RangeError" 是一个 JavaScript 错误,所以它甚至没有到达调用 Add() 的地步。这意味着: Add() 不会引发错误。你可以尝试不使用“p_body.length + 1”(只需将该部分设置为 0)吗?
  • 另外,如何调用代码来添加第二个附件?您在问题中的代码不支持,还是支持?
【解决方案3】:

首先做 mItm.display() 然后写 mItm.GetInspector.WindowState = 2; 这会工作

【讨论】:

  • 我试过这个,不幸的是它没有帮助。第一次没问题,第二次报上面的错误。
猜你喜欢
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
相关资源
最近更新 更多