CDO消息在发送收据请求时不会发送

时间:2010-09-24 22:25:35

标签: asp-classic cdo.message

我正在用经典ASP编写应用程序(是的,请原谅我),它使用Google Mail发送电子邮件。我有这样的工作就好了:

Dim ObjSendMail
Set ObjSendMail = CreateObject("CDO.Message") 

ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1
ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = SendUsername
ObjSendMail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = SendPassword
ObjSendMail.Configuration.Fields.Update

ObjSendMail.To = "x@x.x"
ObjSendMail.From = "x@x.x"
ObjSendMail.Subject = "subject here..."
ObjSendMail.HTMLBody = "body here..."

'ObjSendMail.Fields("urn:schemas:mailheader:disposition-notification-to") = SendUsername
'ObjSendMail.Fields("urn:schemas:mailheader:return-receipt-to") = SendUsername
'ObjSendMail.Fields.Update
'ObjSendMail.DSNOptions = 14
ObjSendMail.Send
Set ObjSendMail = Nothing

当我取消注释以下几行时:

'ObjSendMail.Fields("urn:schemas:mailheader:disposition-notification-to") = SendUsername
'ObjSendMail.Fields("urn:schemas:mailheader:return-receipt-to") = SendUsername
'ObjSendMail.Fields.Update
'ObjSendMail.DSNOptions = 14

电子邮件无法发送。没有错误,没有电子邮件,也没有送货单。我无法弄清楚我的生活如何使这项工作。 “SendUsername”是有效的电子邮件地址。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我知道这已经有几年了,但是我刚刚找到了解决方案,所以如果有人遇到此问题,我将予以发布。

如果您使用的是第三方SMTP服务器(例如gmail或什至是共享主机),并且您无权访问该服务器配置,则实际上您无能为力。邮件服务器将不会中继任何设置了DSNOptions的电子邮件。这绝对是为了减少垃圾邮件和滥用。

但是,如果您有权访问WHM或托管在可以为您更改设置的公司(或您运行自己的SMTP服务器)中,则可以设置要向其宣传DSN支持的主机。现在,此设置可能在不同的邮件服务器平台上不可用,因为我目前只有Exim / WHM的经验:

Screenshot of this in Exim configuration manager

现在,这将使您能够接收成功的送达通知,并且还应该允许在成功的电子邮件上阅读回执。请注意,不再支持除成功以外的DSN选项,因为无论如何延迟或无法传递的电子邮件都会返回给发件人。看来此时只有DSNOptions = 14(全部)或DSNOptions = 4(成功)可以执行任何操作。 免责声明:我不知道这会对以您的邮件系统为目标的垃圾邮件发送者造成何种不良影响,使用后果自负。

另外,另一个小技巧是说您对成功的邮件不感兴趣,您只想让无法送达的邮件在不同于发送地址的地址提醒您。在这里,您将摆脱DSNOptions和处置配置,只需将所需的电子邮件地址放入objCDO.Sender中即可,如下所示:

objCDO.Sender = "returnedmail@domain.com"

成功的电子邮件仍将来自配置中的预编程地址(来自)(objCDO.From),但是无法发送的电子邮件将返回到objCDO.Sender地址!

希望这将对仍在使用CDO邮件使用Classic ASP的任何人有所帮助,并且总是想知道为什么他们无法再使用它了。

答案 1 :(得分:0)

它可能无法正常工作,因为Gmail不希望您这样做。这类事情经常被垃圾邮件发送者所诟病。