【问题标题】:Unknown email code from CDO.Message send method来自 CDO.Message 发送方法的未知电子邮件代码
【发布时间】:2014-08-10 14:52:02
【问题描述】:

我正在尝试通过 vbscript 发送电子邮件。这是我的电子邮件代码: 我当然隐藏了电子邮件地址。在我的实际代码中,我使用的是有效的电子邮件地址。

Dim objCDO
Set objCDO = Server.CreateObject("CDO.Message") 
objCDO.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.oa.caiso.com" 
objCDO.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
objCDO.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
objCDO.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60 
objCDO.Configuration.Fields.Update 
objCDO.To = "abcemail@devnull.com"
objCDO.From = Sender
objCDO.cc = ""
objCDO.bcc = ""
objCDO.Subject = txtSubject
objCDO.HTMLBody = Replace(sBody, Chr(10),"<br>")
On Error GoTo 0
On Error Resume Next
objCDO.Send
If Err.Number <> 0 Then 
    Response.Write "Just after the send command "
    Response.Write "Err.Number is " & Err.Number & "<br>"
    On Error GoTo 0
End If
set objCDO = nothing

当此代码运行时,我看到以下错误:

在发送命令之后 Err.Number 是 -2147220978

现在,当我研究这个错误号时,在任何地方都找不到错误代码 -2147220978 的参考。事实上,谷歌搜索数字 -2147220978 根本不会返回任何结果。

你知道那个奇怪的错误代码是什么意思吗?

【问题讨论】:

  • 请确认您使用的是 ASP Classic,而不是 ASP.NET。

标签: email vbscript asp-classic cdo.message


【解决方案1】:

-2147220978 = 8004020E

来自 CDOSYSERR.h

//
// MessageId: CDO_E_SENDER_REJECTED
//
// MessageText:
//
// The server rejected the sender address. The server response was: %1
//
#define CDO_E_SENDER_REJECTED            0x8004020EL

解码错误

-2147220978 样式数字是32位有符号整数,用计算器转换成十六进制。

Windows 错误(小数字)和 COM HResults(通常,但也有例外,以 8 开头,如 0x80040154)在 WinError.h 中定义,除了 8007nnnn,您可以在其中查找它包含的 Window 错误号。

作为一般规则,Windows 错误少于 65,535 (0xFFFF)。从 0x80000001 开始的错误是组件对象模型 (COM) HResults。从 0xc0000001 开始的错误是 NTStatus 结果。

NTStatus 错误(通常但不总是以 C 开头,如 0xC0000022)在 NTStatus.h 中定义。

.h 文件是最好的来源,因为它包含错误的符号名称,可以提供诸如错误来源之类的线索。 FormatMessage 不给出符号名称,只给出描述。

您可以通过下载 Platform SDK 获得这些文件(以千兆字节为单位) http://www.microsoft.com/en-us/download/details.aspx%3Fid%3D8279&sa=U&ei=w2IrULDDLsHFmAWbmIHoBg&ved=0CBwQFjAA&usg=AFQjCNHZn9-4f2NnuN9o3UWUsOF3wL7HBQ

如果您只想要这两个文件,我将它们放在我的 skydrive 上,这样我可以随时随地参考它们。 https://skydrive.live.com/redir?resid=E2F0CE17A268A4FA!121

注意 Internet 错误 (12,000 - 12,999) 是 Windows 错误,但在 wininet.h 中指定,也可在上面找到。

在其他 .h 文件中定义了错误。但 99% 都在以上三者中。

HResults 和 NTStatus 代码的结构

HResults 中的最高有效位和 NTStatus 中的两个最高有效位设置为错误。因此 Hresults 在错误时开始 8 并且 NTStatus 在错误时开始 C。接下来的 14 或 15 位是保留的,一些指定设施 - 错误所在的区域。这是读取十六进制时的第三个和第四个数字。 EG 0xnn07nnnn - HResult 设施代码 7 是一个正常的 Windows 错误(从 COM 程序返回 - 因此它作为 HResult 返回)。设备代码在 Winerror.h 中为 HResults 定义,在 NTStatus.h 中为 NTStatus 代码定义。它们是不同的。

解码 0x8003nnnn 错误

具有设施代码 3 的 HResults 表示 HResult 包含 OLE 结构化存储错误(0x0 到 0xff)。这些似乎不在 Windows 的头文件中,代码列表在本文末尾。

解码 0x8004nnnn 错误

具有设施代码 4 的 HResults 表示 HResult 包含 OLE 错误(0x0 到 0x1ff),而范围的其余部分(0x200 以后)是组件特定的错误,因此来自一个组件的 20e 与来自另一个组件的 20e 具有不同的含义。

这就是为什么错误的来源对于 0x80040200 以上的错误尤为重要。

解码 0x8007nnnn 错误

带有设施代码 7 的 HResults 表示 HResult 包含 Windows 的错误代码。您必须查找 Windows 的错误代码而不是 HResult。

解码 0x80070002。 0x 表示它是一个十六进制数,8 表示错误,前 7 表示它是 windows 错误,其余的数字 2 是实际的 windows 错误。

要查找错误,我们需要十进制格式。启动计算器(开始 - 所有程序 - 附件 - 计算器)并选择查看菜单 - 科学,然后选择查看菜单 - 十六进制。输入 2。然后查看菜单 - 十进制。它会说 2。

启动命令提示符(开始 - 所有程序 - 附件 - 命令提示符)并键入

net helpmsg 2

它会说

The system cannot find the file specified.

或在 winerror.h 中查找

//
// MessageId: ERROR_FILE_NOT_FOUND
//
// MessageText:
//
// The system cannot find the file specified.
//
#define ERROR_FILE_NOT_FOUND             2L

Dos 错误代码(针对 0x8003nnnn 错误)

Dos 错误代码(针对 0x8003nnnn 错误)

Code    Message
01  Invalid function number
02  File not found
03  Path not found
04  Too many open files (no handles left)
05  Access denied
06  Invalid handle
07  Memory control blocks destroyed
08  Insufficient memory
09  Invalid memory block address
0A  Invalid environment
0B  Invalid format
0C  Invalid access mode (open mode is invalid)
0D  Invalid data
0E  Reserved
0F  Invalid drive specified
10  Attempt to remove current directory
11  Not same device
12  No more files
13  Attempt to write on a write-protected diskette
14  Unknown unit
15  Drive not ready
16  Unknown command
17  CRC error
18  Bad request structure length
19  Seek error
1A  Unknown media type
1B  Sector not found
1C  Printer out of paper
1D  Write fault
1E  Read fault
1F  General failure
20  Sharing violation
21  Lock violation
22  Invalid disk change
23  FCB unavailable
24  Sharing buffer overflow
25  Reserved
26  Unable to complete file operation (DOS 4.x)
27-31   Reserved
32  Network request not supported
33  Remote computer not listening
34  Duplicate name on network
35  Network name not found
36  Network busy
37  Network device no longer exists
38  NetBIOS command limit exceeded
39  Network adapter error
3A  Incorrect network response
3B  Unexpected network error
3C  Incompatible remote adapter
3D  Print queue full
3E  No space for print file
3F  Print file deleted
40  Network name deleted
41  Access denied
42  Network device type incorrect
43  Network name not found
44  Network name limit exceeded
45  NetBIOS session limit exceeded
46  Temporarily paused
47  Network request not accepted
48  Print or disk redirection is paused
49-4F   Reserved
50  File already exists
51  Reserved
52  Cannot make directory entry
53  Fail on INT 24
54  Too many redirections
55  Duplicate redirection
56  Invalid password
57  Invalid parameter
58  Network device fault
59  Function not supported by network (DOS 4.x)
5A  Required system component not installed (DOS 4.x)

设施代码

NTStatus 设施

Common status values    0x0
Debugger    0x1
Rpc_runtime 0x2
Rpc_stubs   0x3
Io_error_code   0x4
Various drivers 0x5-0xf
Ntwin32 0x7
Ntsspi  0x9
Terminal_server 0xa
Faciltiy_mui_error_code 0xb
Usb_error_code  0x10
Hid_error_code  0x11
Firewire_error_code 0x12
Cluster_error_code  0x13
Acpi_error_code 0x14
Sxs_error_code  0x15
Transaction 0x19
Commonlog   0x1a
Video   0x1b
Filter_manager  0x1c
Monitor 0x1d
Graphics_kernel 0x1e
Driver_framework    0x20
Fve_error_code  0x21
Fwp_error_code  0x22
Ndis_error_code 0x23
Hypervisor  0x35
Ipsec   0x36
Maximum_value   0x37

HResults 设施

Null    0x0
Rpc 0x1
Dispatch    0x2
Storage 0x3
Itf 0x4
Win32   0x7
Windows 0x8
Sspi    0x9
Security    0x9
Control 0xa
Cert    0xb
Internet    0xc
Mediaserver 0xd
Msmq    0xe
Setupapi    0xf
Scard   0x10
Complus 0x11
Aaf 0x12
Urt 0x13
Acs 0x14
Dplay   0x15
Umi 0x16
Sxs 0x17
Windows_ce  0x18
Http    0x19
Usermode_commonlog  0x1a
Usermode_filter_manager 0x1f
Backgroundcopy  0x20
Configuration   0x21
State_management    0x22
Metadirectory   0x23
Windowsupdate   0x24
Directoryservice    0x25
Graphics    0x26
Shell   0x27
Tpm_services    0x28
Tpm_software    0x29
Pla 0x30
Fve 0x31
Fwp 0x32
Winrm   0x33
Ndis    0x34
Usermode_hypervisor 0x35
Cmi 0x36
Windows_defender    0x50

【讨论】:

  • 是的,跟踪代码显示我们在电子邮件中有域,但没有用户。所以发件人是“@abc.com”而不是“somebody@abc.com”非常感谢您的帮助和解释。
  • 如何将此数字转换为更合理的十六进制错误代码的示例如下:运行时错误 -2147217911 (dec)+4294967296 (dec)=2147749385 (dec) => 0x80040E09 (hex)
【解决方案2】:

这是帮助页面。

      Exchange Server 2003  

错误代码发送反馈

: : : : : :
Windows 2000 的 CDO > 参考 >
(声明)

错误代码 本节包含 Microsoft CDO for Windows 2000 使用的自定义错误代码。所有这些值都可用作类型库 CdoErrorCodes 模块中的常量。

错误值是 32 位值,其结构如下所示:

复制代码 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +---+-+-+------------+------ --------------+ |Sev|C|R|设施 |代码 | +---+-+-+------------+------ --------------+

从左到右阅读此描述,严重性代码 Sev 是以下值之一:

00 - 成功

01 - 信息性

10 - 警告

11 - 错误

接着是:

C — 客户代码标志。

R — 保留位。

Facitlity - 设施代码。

代码 - 设施的状态代码。

错误名称值备注
CDO_E_UNCAUGHT_EXCEPTION 0x80040201L 在地址 %2 处生成了异常 %1

CDO_E_NOT_OPENED 0x80040202L 尚未为该对象打开任何数据源。

CDO_E_UNSUPPORTED_DATASOURCE 0x80040203L 该对象不支持此类数据源。

CDO_E_INVALID_PROPERTYNAME 0x80040204L 该对象不支持请求的属性名称或命名空间。

CDO_E_PROP_UNSUPPORTED 0x80040205L 该对象不支持请求的属性。

CDO_E_INACTIVE 0x80040206L 对象未激活。它可能已被删除或尚未打开。

CDO_E_NO_SUPPORT_FOR_OBJECTS 0x80040207L 该对象不支持存储对象的持久状态信息。

CDO_E_NOT_AVAILABLE 0x80040208L 请求的属性或功能虽然受支持,但目前或在此上下文中不可用。

CDO_E_NO_DEFAULT_DROP_DIR 0x80040209L 没有为此服务器配置默认放置目录。

CDO_E_SMTP_SERVER_REQUIRED 0x8004020AL SMTP 服务器名称是必需的,在配置源中找不到。

CDO_E_NNTP_SERVER_REQUIRED 0x8004020BL NNTP 服务器名称是必需的,在配置源中找不到。

CDO_E_RECIPIENT_MISSING 0x8004020CL 至少需要一个收件人,但没有找到。

CDO_E_FROM_MISSING 0x8004020DL From 或 Sender 字段中至少有一个是必需的,但均未找到。

CDO_E_SENDER_REJECTED 0x8004020EL 服务器拒绝了发件人地址。服务器响应为:%1

CDO_E_RECIPIENTS_REJECTED 0x8004020FL 服务器拒绝了一个或多个收件人地址。服务器响应为:%1

CDO_E_NNTP_POST_FAILED 0x80040210L 无法将消息发布到 NNTP 服务器。传输错误代码为 %2。服务器响应为 %1

CDO_E_SMTP_SEND_FAILED 0x80040211L 无法将邮件发送到 SMTP 服务器。传输错误代码为 %2。服务器响应为 %1

CDO_E_CONNECTION_DROPPED 0x80040212L 传输失去了与服务器的连接。

CDO_E_FAILED_TO_CONNECT 0x80040213L 传输无法连接到服务器。

CDO_E_INVALID_POST 0x80040214L “主题”、“发件人”和“新闻组”字段均为必填字段,但未找到一个或多个字段。

CDO_E_AUTHENTICATION_FAILURE 0x80040215L 由于身份验证失败,服务器拒绝了登录尝试。服务器响应为:%1

CDO_E_INVALID_CONTENT_TYPE 0x80040216L 内容类型在此上下文中无效。例如,MHTML 消息的根必须是 HTML 文档。

CDO_E_LOGON_FAILURE 0x80040217L 传输无法登录到服务器。

CDO_E_HTTP_NOT_FOUND 0x80040218L 找不到请求的资源。服务器响应为:%1。

CDO_E_HTTP_FORBIDDEN 0x80040219L 拒绝访问请求的资源。服务器响应为:%1。

CDO_E_HTTP_FAILED 0x8004021AL HTTP 请求失败。服务器响应为:%1。

CDO_E_MULTIPART_NO_DATA 0x8004021BL 这是一个多部分的身体部位。除了包含在其中的正文部分之外,它没有其他内容。

CDO_E_INVALID_ENCODING_FOR_MULTIPART 0x8004021CL 多部分正文部分必须编码为 7 位、8 位或二进制。

CDO_E_PROP_NOT_FOUND 0x8004021EL 未找到请求的属性。

CDO_E_INVALID_SEND_OPTION 0x80040220L “SendUsing”配置值无效。

CDO_E_INVALID_POST_OPTION 0x80040221L “PostUsing”配置值无效。

CDO_E_NO_PICKUP_DIR 0x80040222L 拾取目录路径为必填项,未指定。

CDO_E_NOT_ALL_DELETED 0x80040223L 无法删除一条或多条消息。

CDO_E_PROP_READONLY 0x80040227L 该属性是只读的。

CDO_E_PROP_CANNOT_DELETE 0x80040228L 无法删除该属性。

CDO_E_BAD_DATA 0x80040229L 写入对象的数据不一致或无效。

CDO_E_PROP_NONHEADER 0x8004022AL 请求的属性不在邮件标头命名空间中。

CDO_E_INVALID_CHARSET 0x8004022BL 计算机上未安装请求的字符集。

CDO_E_ADOSREAM_NOT_BOUND 0x8004022CL ADO 流尚未打开。

CDO_E_CONTENTPROPXML_NOT_FOUND 0x8004022DL 缺少内容属性。

CDO_E_CONTENTPROPXML_WRONG_CHARSET 0x8004022EL 内容属性 XML 必须使用 UTF-8 进行编码。

CDO_E_CONTENTPROPXML_PARSE_FAILED 0x8004022FL 无法解析内容属性 XML。

CDO_E_CONTENTPROPXML_CONVERT_FAILED 0x80040230L 无法将属性从 XML 转换为请求的类型。

CDO_E_NO_DIRECTORIES_SPECIFIED 0x80040231L 没有为解析指定目录。

CDO_E_DIRECTORIES_UNREACHABLE 0x80040232L 无法针对一个或多个指定目录进行解析。

CDO_E_BAD_SENDER 0x80040233L 找不到发件人的邮箱。

CDO_E_SELF_BINDING 0x80040234L 不允许绑定到自己。

CDO_E_ARGUMENT1 0x80044000L 第一个参数无效。

CDO_E_ARGUMENT2 0x80044001L 第二个参数无效。

CDO_E_ARGUMENT3 0x80044002L 第三个参数无效。

CDO_E_ARGUMENT4 0x80044003L 第四个参数无效。

CDO_E_ARGUMENT5 0x80044004L 第五个参数无效。

CDO_E_NOT_FOUND 0x800CCE05L 在此消息中找不到请求的正文部分。

CDO_E_INVALID_ENCODING_TYPE 0x800CCE1DL 内容编码类型无效。

文档反馈 Microsoft 重视您的反馈。要对该主题进行评分并向文档团队发送有关该主题的反馈,请单击评分,然后单击“发送反馈”。有关支持问题的帮助,请参阅产品随附的技术支持信息。 可怜的 1 2 3 4 5 杰出的 要将您的反馈通过电子邮件发送给 Microsoft,请单击此处:
© 2005 微软公司。版权所有。

【讨论】:

    【解决方案3】:

    您很可能需要针对您的邮件服务器进行身份验证。您可以通过添加以下行来使用 CDOSYS 执行此操作。您当然需要将 sendusername 和 sendpassword 值更改为有效帐户。

    objCDO.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'basic (clear-text) authentication
    objCDO.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") ="somemail@yourserver.com"
    objCDO.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") ="yourpassword"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      相关资源
      最近更新 更多