来自CDO.Message发送方法的未知电子邮件代码

时间:2014-06-19 22:26:43

标签: email vbscript asp-classic cdo.message

我正在尝试通过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根本不会返回任何结果。

您是否知道奇怪的错误代码意味着什么?

2 个答案:

答案 0 :(得分:3)

-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(通常,但有例外情况,以0x80040154中的8开头)在WinError.h中定义,除了8007nnnn,您在其中查找它包含的Window错误号。

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

NTStatus中定义了NTStatus错误(通常但不总是以0xC0000022中的C开头)。

.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

注意互联网错误(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具有不同的含义。 / p>

这就是为什么错误的来源对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

人力资源设施

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

答案 1 :(得分:0)

您很可能需要对邮件服务器进行身份验证。您可以通过添加以下行来使用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"