使用VBA和CDO for SMTP发送邮件时,我使用什么命名空间?

时间:2012-07-19 20:26:36

标签: vba cdonts

我不明白为什么我看到的每个例子都有来自microsoft的架构名称空间。它是为了什么?是不是真的通过查看Microsoft服务器来发送内容?

How do I use CDO with Exchange with vbscript

我会发布我的代码,但它和所有示例都有相同的东西:

objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing")= cdoSendUsingPort

我不想把微软架构放在那里。我只想将它发送到我的Exchange或SMTP服务器。感谢。

1 个答案:

答案 0 :(得分:1)

命名空间就在那里,因为它们唯一地标识了对象中的属性;

  

适用于Windows 2000的Microsoft CDO使用统一资源   用于限定或限定字段名称及其语义的标识符(URI)   定义。通过Fields集合访问的每个字段都是   由名称空间前缀和本地名称组成。名称空间前缀   是一个URI引用,用于限定或限定语义定义   财产。例如,消息的主题字段有两个   表示:一个使用非编码的非US-ASCII字符编码   RFC 1522中定义的机制,以及这些字符所在的另一个机制   解码为原生的UNICODE字符。通过使用名称空间,可以   确定“主题”时的语义定义   请求消息。在这种情况下,定义了主题字段   在urn:schemas:mailheader:namespace被定义为   US-ASCII字符串的字段值,以及定义的主题字段   在urn中:schemas:httpmail:namespace是本机的UNICODE   版本

来自MSDN article Fields

它与XML Namespaces几乎完全相同,甚至是C#等语言中的命名空间

他们实际上并没有连接到微软;实际上,尝试在浏览器中键入URL,您将收到404错误。

这只是设置您需要设置的属性的相当不优雅的语法,以便连接到您的交换服务器。

例如,要设置代码应连接到的服务器以发送邮件,请设置属性smtpserver。在内部,为了达到此property,程序集会将其映射到URI http://schemas.microsoft.com/cdo/configuration/smtpserver

发送邮件的C#组件可能会要求您设置SmtpMail.Server。但是,请记住,要创建SmtpMail,您必须查看名称空间System.Web.Mail - 所以该属性的完全限定路径是System.Web.Mail.SmtpMail.Server然而,这里的语言更加优雅 - 使用语句允许我们在创建对象的上下文中,这减少了键入的数量。请记住,如果您真的想,在C#中,您可以这样做:

System.Web.Mail.SmtpServer mailServer = new System.Web.Mail.SmtpServer();

哪个更详细。

在我看来,URI语法是笨拙的,但是,当时,它是针对唯一区分具有相同名称的事物的问题的建议解决方案,这可能意味着不同的东西。有些人用它。很多人没有。请记住,这段代码已有十多年了!