Pergunta

Estou iniciando um e-mail criar, chamando o código abaixo e adicionar um anexo a ele.

Eu quero que o usuário seja capaz de digitar o receipient, e modificar o conteúdo da mensagem, então eu não estou enviando-o imediatamente.

Por que recebo um RangeError a 2ª vez que o método é chamado?
(A primeira vez que ele funciona corretamente.)

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'); 
   } 
}

O erro está ocorrendo na linha mAts.add. Então, quando ele tenta anexar o documento, ele falhar.

Além disso, o nome do arquivo (p_file) é um endereço http a uma imagem.

Nenhuma solução correta

Outras dicas

não vai funcionar fora do IE, o usuário precisa ter Outlook na máquina e uma conta configurada nele. Tem certeza de que deseja enviar um e-mail desta maneira?

Eu estou tentando isso com este pequeno trecho, e ele funciona perfeitamente:

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]);
}

Note que eu sai fora todos os argumentos opcionais para Attachments.Add(). Os padrões de método para adicionar os anexos no final, que é o que você parece querer de qualquer maneira.

Você pode tentar esse trecho autônomo? Se ele funciona para você, por favor, faça uma redução passo-a-passo do seu código em relação a este mínimo absoluto, e você vai encontrar o que causa o erro.

primeiro fazer mItm.display () então escrever mItm.GetInspector.WindowState = 2; isso vai funcionar

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top