我正在尝试使用RDORecipients.AddMultiple函数向邮件添加大量收件人。
RDOSession session = new RDOSession();
RDOMail mail = session.CreateMsgFromMsgFile("test.msg", "IPM.Note");
List<string> recipientsList = {"[email protected]", "[email protected]"};
Array recipients = recipientsList.ToArray();
rdoMail.Recipients.AddMultiple(ref recipients, 1);
最后一行抛出异常SafeArrayTypeMismatchException(指定的数组不是预期的类型)。我尝试使用new和Array.CreateInstance(typeof(string),元素数)以不同的方式创建数组。我有一种感觉,我需要在托管/非托管代码之间做一些事情,但我不知道如何。这个或文档/ pinvoke签名是不正确的,但这是不可能的。
尝试将recipients变量声明为string []。
我注意到Recipients.Add(object)方法的签名采用对象而不是字符串。我尝试在转换为System.Array之前声明为对象[]而不是字符串[]并且它有效。
我发现解决方案是:
RDOSession session = new RDOSession();
RDOMail mail = session.CreateMessageFromMsgFile("test.msg", "IPM.Note");
List<string> recipientsList = new List<string>{ "[email protected]", "[email protected]" };
Array recipients = recipientsList.ToArray<object>();
mail.Recipients.AddMultiple(ref recipients, 1);
Array必须使用对象类型,并且不存在null元素,否则它将在AddMultiple()中抛出异常。