我正在用经典 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 = "[email protected] /cdn-cgi/l/email-protection"
ObjSendMail.From = "[email protected] /cdn-cgi/l/email-protection"
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”是一个有效的电子邮件地址。任何帮助,将不胜感激。
我知道这个活动已经有几年了,但我刚刚找到了一个解决方案,所以我将发布它,以防其他人遇到这个问题。
如果您使用的是第 3 方 SMTP 服务器,例如 gmail 甚至共享主机,并且您无权访问该服务器配置,那么您实际上无能为力。邮件服务器将不会转发任何设置了 DSNOptions 的电子邮件。这绝对是为了减少垃圾邮件和滥用行为。
但是,如果您有权访问 WHM 或由一家将为您更改设置的公司托管(或者您运行自己的 SMTP 服务器),则您可以设置要向其通告 DSN 支持的主机。现在这个设置可能在不同的邮件服务器平台上不可用,因为我目前只有 Exim/WHM 的经验:
现在,您将可以接收成功的送达通知,并且还应该允许在成功的电子邮件上阅读回执。请注意,不再支持成功以外的 DSN 选项,因为任何延迟或无法送达的电子邮件无论如何都会返回给发件人;此时似乎只有 DSNOptions = 14(全部)或 DSNOptions = 4(成功)可以执行任何操作。免责声明:我不知道这会对针对您的邮件系统的垃圾邮件发送者产生什么不良影响,请自行承担使用风险。
另外,另一个小技巧是说您对成功的邮件不感兴趣,您只是希望无法送达的邮件在与发送地址不同的地址提醒您。在这里,您将摆脱 DSNOptions 和处置配置,只需将所需的电子邮件地址放入 objCDO.Sender 中,如下所示:
objCDO.Sender = "[email protected] /cdn-cgi/l/email-protection"
成功的电子邮件仍然会from配置中的预编程地址 (objCDO.From),但是无法送达的电子邮件将被返回到 objCDO.Sender 地址!
希望这对那些仍在使用带有 CDO 邮件的经典 ASP 并一直想知道为什么不能再让它工作的人有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)