2

我正在用经典的 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”是一个有效的电子邮件地址。任何帮助,将不胜感激。

4

2 回答 2

1

它可能不起作用,因为 Gmail 不希望您这样做。这种事情经常被垃圾邮件发送者利用。

于 2010-09-28T15:25:39.680 回答
1

我知道这已经有几年了,但我刚刚找到了一个解决方案,所以我将发布它以防其他人遇到这个问题。

如果您使用的是 3rd 方 SMTP 服务器,例如 gmail 甚至共享主机,并且您无权访问该服务器配置,那么您真的无能为力。邮件服务器根本不会中继任何设置了 DSNOptions 的电子邮件。这绝对是为了减少垃圾邮件和滥用。

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

Exim 配置管理器中的屏幕截图

现在,这将允许您接收成功的送达通知,并且还应该允许成功电子邮件的已读回执。请注意,由于任何延迟或无法送达的电子邮件无论如何都会返回给发件人,因此不再支持成功以外的 DSN 选项;似乎只有 DSNOptions = 14 (All) 或 DSNOptions = 4 (Success) 在这一点上做任何事情。免责声明:我不知道这会对针对您的邮件系统的垃圾邮件发送者产生什么不良影响,使用风险自负。

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

objCDO.Sender = "returnedmail@domain.com"

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

希望这将帮助那些仍在使用带有 CDO 邮件的经典 ASP 并且一直想知道为什么他们不能让它继续工作的人。

于 2019-10-05T05:29:15.523 回答