2009-02-16 6 views
3

Je crée un email en appelant le code ci-dessous et en y ajoutant une pièce jointe.Problème lors de la création d'un e-mail avec pièce jointe en Javascript

Je souhaite que l'utilisateur puisse taper le destinataire et modifier le contenu du message, afin de ne pas l'envoyer immédiatement.

Pourquoi est-ce que j'obtiens un RangeError la 2ème fois que la méthode est appelée?
(La première fois que cela fonctionne correctement.)

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

L'erreur est INTERVENUES sur la ligne mAts.add. Donc, quand il essaie de joindre le document, il échoue.

Le nom de fichier (p_file) est également une adresse http pour une image.

+0

Le fait que cela soit même possible à distance en JavaScript me fait peur. – scunliffe

+0

C'est un site de confiance, sur un intranet, mais je sais ce que vous voulez dire. – Bravax

+1

@scunliffe: Tout est possible en JavaScript. Je suis un langage de programmation après tout. Dans ce cas, c'est JScript et cela ne fonctionnera même pas dans un environnement non sécurisé. – Tomalak

Répondre

1

Je suis en train avec ce petit bout, et il fonctionne parfaitement:

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

Notez que je suis parti de tous les arguments optionnels Attachments.Add(). La méthode par défaut est d'ajouter les pièces jointes à la fin, ce que vous semblez vouloir de toute façon.

Pouvez-vous essayer cet extrait autonome? Si cela fonctionne pour vous, s'il vous plaît faites une réduction étape par étape de votre code vers ce minimum absolu, et vous trouverez ce qui provoque l'erreur.

+0

Désolé, je peux certainement. Cela fonctionne la première fois. Juste pas après ça. – Bravax

+0

Wild devinez: Pouvez-vous joindre le même document deux fois? Peut-être qu'il y a quelque chose qui ne va pas avec le deuxième document? – Tomalak

+0

Oh, et quel est le message d'erreur exact que vous obtenez? – Tomalak

3

Ne fonctionnera pas en dehors de IE, l'utilisateur doit avoir Outlook sur la machine et un compte configuré dessus. Êtes-vous sûr de vouloir envoyer un email de cette façon?

+0

Très bien, cela est utilisé dans un environnement contrôlé où chaque machine a IE et Outlook installé, et malheureusement, c'est ce qu'ils veulent. – Bravax

+0

Et c'est pourquoi 25% de la toile est jusqu'à IE6, en raison d'un raisonnement comme celui-ci. – Breton

+1

En codant spécifiquement pour IE et Outlook, vous participez à une stratégie de verrouillage d'entreprise contraire à l'éthique. Peut-être que vous pouvez vivre avec la douleur et la souffrance que vous causez à tous les développeurs Web, et les utilisateurs du système. Si j'étais dans votre position, je devrais démissionner. – Breton

0

d'abord faire mItm.display() puis écrire mItm.GetInspector.WindowState = 2; cela fonctionnera

+0

J'ai essayé ceci, et malheureusement cela n'aide pas. La première fois est bien, la deuxième fois il obtient l'erreur ci-dessus. – Bravax

Questions connexes