在ASP开发中,实现邮件发送功能是常见需求,例如用户注册确认、密码重置、订单通知等场景,ASP主要通过调用COM组件或内置对象来实现邮件发送,常用组件包括JMail、CDONTS(较旧)以及CDO.Message(推荐,功能更全面),本文将以CDO.Message为例,详细讲解ASP邮箱发送代码的实现方法、参数配置及注意事项。

ASP邮件发送基础实现
CDO.Message(Collaboration Data Objects)是Windows系统自带的组件,无需额外安装,支持SMTP协议,可满足大多数邮件发送需求,基础代码结构如下:
<%@ Language=VBScript %>
<%
' 创建CDO.Message对象
Set objMail = Server.CreateObject("CDO.Message")
' 配置SMTP服务器参数
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 ' 使用SMTP服务
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.example.com" ' SMTP服务器地址(如QQ邮箱为smtp.qq.com)
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 ' SMTP服务器端口(QQ邮箱SSL端口为465,TLS为587)
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 ' 需要身份验证
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your_email@example.com" ' 发件人邮箱
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your_password" ' 发件人邮箱密码(部分邮箱需授权码)
objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True ' 启用SSL加密(QQ/163邮箱等常用)
' 更新配置
objMail.Configuration.Fields.Update
' 设置邮件基本信息
objMail.From = "your_email@example.com" ' 发件人邮箱(需与SMTP认证账号一致)
objMail.To = "recipient@example.com" ' 收件人邮箱
objMail.Subject = "测试邮件主题" ' 邮件主题
objMail.TextBody = "这是一封测试邮件的正文内容。" ' 邮件正文(纯文本)
' 发送邮件
objMail.Send
' 释放对象
Set objMail = Nothing
Response.Write("邮件发送成功!")
%>
核心参数详解
CDO.Message的配置参数通过Configuration.Fields集合设置,以下是关键参数的说明:
| 参数名 | 类型 | 说明 | 示例 |
|---|---|---|---|
| sendusing | Long | 指定发送方式:1=本地 Pickup 目录,2=SMTP 服务 | 2 |
| smtpserver | String | SMTP 服务器地址 | “smtp.qq.com” |
| smtpserverport | Number | SMTP 服务器端口 | 465(SSL)、587(TLS) |
| smtpauthenticate | Number | 身份验证类型:0=不验证,1=用户名密码验证 | 1 |
| sendusername | String | SMTP 认证用户名(邮箱地址) | “test@qq.com” |
| sendpassword | String | SMTP 认证密码(部分邮箱需用授权码) | “xxxxxx” |
| smtpusessl | Boolean | 是否启用 SSL 加密 | True |
| smtpusetls | Boolean | 是否启用 TLS 加密 | False(与SSL互斥) |
进阶功能实现
发送HTML格式邮件
若需发送包含样式的HTML邮件,需设置BodyFormat和MailFormat属性,并将正文改为HTML代码:

objMail.BodyFormat = 0 ' 0=HTML格式,1=纯文本 objMail.MailFormat = 0 ' 0=HTML格式,1=纯文本 objMail.HTMLBody = "<h1>欢迎注册</h1><p>您的验证码是:<strong>123456</strong></p>"
添加附件
使用AddAttachment方法添加附件,支持本地文件路径或网络资源:
' 添加本地附件(需确保服务器有读取权限)
objMail.AddAttachment "C:testreport.pdf"
' 添加网络附件(需先下载到服务器)
Set http = Server.CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "http://example.com/file.zip", False
http.Send
If http.Status = 200 Then
Set fso = Server.CreateObject("Scripting.FileSystemObject")
filePath = Server.MapPath("temp_" & Now() & ".zip")
Set file = fso.CreateTextFile(filePath, True)
file.Write http.ResponseBody
file.Close
objMail.AddAttachment filePath
' 发送后删除临时文件(可选)
fso.DeleteFile filePath
End If
Set http = Nothing
Set fso = Nothing
抄送/密送
通过CC(抄送)和BCC(密送)属性添加多个收件人:
objMail.CC = "cc1@example.com; cc2@example.com" ' 多个抄收件人用分号分隔 objMail.BCC = "bcc1@example.com; bcc2@example.com" ' 密送收件人
错误处理与调试
邮件发送可能因网络、SMTP配置或账号问题失败,需通过错误处理机制捕获异常:

On Error Resume Next ' 启用错误捕获
objMail.Send
If Err.Number <> 0 Then
Response.Write "邮件发送失败,错误信息:" & Err.Description
' 可记录错误日志到文件或数据库
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set logFile = fso.OpenTextFile(Server.MapPath("error_log.txt"), 8, True)
logFile.WriteLine Now() & " - " & Err.Description
logFile.Close
Set fso = Nothing
Else
Response.Write "邮件发送成功!"
End If
On Error GoTo 0 ' 关闭错误捕获
注意事项
- SMTP服务器配置:不同邮箱的SMTP服务器地址和端口不同,需参考服务商说明(如QQ邮箱需开启SMTP服务并获取授权码,163邮箱需开启“客户端授权密码”)。
- 服务器权限:若添加本地附件,需确保IIS进程对文件路径有读取权限;使用临时文件时,记得及时清理避免占用服务器空间。
- HTML邮件兼容性:避免使用CSS3等新特性,确保邮件在主流客户端(如Outlook、Foxmail、网页邮箱)中正常显示。
- 发送频率限制:部分SMTP服务器限制单次发送数量或频率,避免触发反垃圾邮件机制导致账号被封。
相关问答FAQs
问题1:ASP发送邮件提示“服务器拒绝连接”,可能的原因及解决方法?
解答:通常由SMTP服务器配置错误或网络问题导致,需检查:①SMTP服务器地址是否正确(如QQ邮箱用smtp.qq.com);②端口是否匹配(SSL用465,TLS用587);③是否启用SSL/TLS加密(smtpusessl=True);④服务器防火墙是否阻止25/465/587端口,若使用外部SMTP服务器,需确保服务器IP在服务商的白名单中。
问题2:如何通过ASP发送带附件的HTML邮件,并确保附件不乱码?
解答:需同时设置HTML正文和附件路径,关键步骤:①设置objMail.BodyFormat=0和objMail.HTMLBody为HTML代码;②使用objMail.AddAttachment添加附件,附件路径需为服务器绝对路径;③附件名包含中文时,需用Server.URLEncode编码(如objMail.AddAttachment Server.MapPath("测试文件.pdf")),附件大小需受SMTP服务器限制(一般不超过20MB),大文件建议上传至云存储后发送链接。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/47974.html