SMTP 客户端 ActiveX 组件






3.50/5 (8投票s)
2002 年 2 月 11 日
10分钟阅读

302152

4373
一个 SMTP 客户端 ActiveX 组件,可用于 ASP、VC、VB、Excel 等。
引言
Smtp.Server
是一个 ActiveX 组件,可用于发送电子邮件。它可以在 Excel、ASP、VB、Visual C++ 和其他 ActiveX 容器应用程序中使用。(请阅读下面的说明以了解如何使用 Smtp.Server
)。
我创建这个组件只是为了好玩。它是完全免费的,并且像所有免费软件一样,它没有任何保证和/或责任。尽管我已经过测试,但我并不作任何保证,也不承担任何责任(只是为了保护自己 :-))。
在报告任何错误或提供反馈之前,请阅读完整文档(如下)。
安装说明
步骤 (1)
下载源代码和 EXE。
步骤 (2)
下载完成后,双击 SMTPServ.EXE。它是一个自解压的 WinZip 文件。将此文件解压到您喜欢的目录。双击新解压的文件(SMTP.EXE)。您应该会看到一个对话框,与下图类似
这表示 SMTP.Server
已成功在系统注册表中注册。
如果您没有看到此对话框,请报告 错误。(请记住,该应用程序尚未在 Win95/NT 上进行测试。)
步骤 (3)
现在,您可以将其用于您的 Visual C++ 应用程序(作为 CreateDispatch(“SMTP.Server”)
),ASP/Excel/VB 应用程序(作为 Server.CreateObject(“SMTP.Server”)
)。
请查看示例代码,以及 SMTP.Server
支持的方法/属性。
SMTP.Server 属性
- LoginName
- 密码
- MailTo
- MailFrom
- CcTo
- 主题
- Message
- ReplyTo
- SMTPServer
- SenderIP
- PortNumber
- ServerVersion
- EnableLog
- LogFile
- TimeOut
- WMLOutput
SMTP.Server 方法
SMTP.Server 属性
LoginName
类型:String。
默认值:“guest”。
描述:尽管
SMTP.Server
不需要任何用户身份验证,但此参数仅为方便起见而提供!用户如何使用它取决于用户。SMTP.Server
使用此参数的唯一时间是它进行日志记录时。LoginName
将写入日志条目,以便您可以识别通过SMTP.Server
发送邮件的用户。这可能是一个很好的计费工具。在一个完美的世界里,LoginName
可以从MailFrom
参数派生。(通常MailFrom
=LoginName
@some.server.com,但可能存在别名和其他复杂情况,使得这种确定用户的方法无效。)Password
类型:String
默认值:“guest”
描述:
SMTP.Server
完全不使用此条目。此条目是为了保存密码而放置的。如何使用它取决于您。与LoginName
不同,Password
不会写入日志文件。我为什么要添加密码,连我自己都感到困惑。只是登录名和密码就像双胞胎,所以我放了登录名(而且理由充分,请参阅 LoginName 的描述),我也自动添加了密码条目。MailTo
类型:String
默认值:null
描述:此属性保存目标电子邮件地址。此处应只有一个目标地址。如果您希望电子邮件发送到多个目标,请使用
CcTo
属性指定其他电子邮件地址。在调用SendMail( )
方法之前,您必须将此属性设置为有效地址。MailFrom
类型:String
默认值:null
描述:此属性应设置为发件人地址。如果未提供发件人地址,
SMTP.Server
会自动检查ReplyTo
属性。如果ReplyTo
属性包含电子邮件地址,则将其用作发件人地址。如果MailFrom
和ReplyTo
均未设置,系统将返回错误“无效的发件人地址”。SenderIP
类型:String
默认值:“kashif.SMTP.Server”
描述:此属性应设置为运行
SMTP.Server
组件的机器的 IP 地址。如果未设置此属性,则默认为“Kashif.SMTP.Server”。PortNumber
类型:integer
默认值: 25
描述:默认的 SMTP 监听端口是 25。除非有充分的理由,否则不应更改此设置。
ServerVersion
类型:integer
默认值: 1
描述:这是一个只读属性。您无法设置其值。您只能检索其值。
SMTPServer
类型:String
默认值:“mail.nexlinx.net.pk”
描述:
SMTP.Server
不会直接将电子邮件递送到MailTo
和CcTo
属性中指定的收件人地址。它会将电子邮件消息传递给另一个服务器,该服务器将代表SMTP.Server
将消息发送到收件人。这类似于其他电子邮件客户端(如 Eudora、Exchange 等)如何处理电子邮件递送。您应通过SMTPServer
属性指定邮件服务器的 IP 地址。服务器地址可以是描述性的,例如“mail.nexlinx.net.pk”(我的 ISP 的邮件服务器地址),也可以是实际的 IP 地址,例如“202.59.64.7”。如果您不设置此属性,则默认为“mail.nexlinx.net.pk”。我强烈建议您将此属性设置为您自己的 ISP/公司的邮件服务器,因为“mail.nexlinx.net.pk”可能有一个策略,会拒绝来自“*.nexlinx.net.pk”域以外的请求。EnableLog
类型:boolean
默认值:0 (FALSE) 即,不维护日志。
描述:此属性指示
SMTP.Server
是否应保留所有发送邮件请求的日志。如果设置了此参数,则服务器将记录与目标SMTPServer
(如SMTPServer
参数中所述)的所有通信。您可以使用日志进行计费、防止黑客攻击、调试程序等。如何使用它以及为什么需要它,完全取决于您。另请参阅: LogFile
- 属性:
LogFile
类型:String
默认值:“C:\SMTPLog.txt”
描述:当您将
EnableLog
参数设置为 true 时,SMTP.Server
会尝试打开由“LogFile
”参数确定的文件。如果文件已存在,服务器将开始向其追加日志条目。如果文件不存在,服务器将创建一个新文件。请记住,服务器仅创建新文件而不创建目录。因此,如果您将
LogFile
设置为“C:\logs\Smtp.txt”,请确保目录“c:\logs\”存在。如果不存在,服务器将丢弃该条目,并开始在默认的“C:\SMTPLog.txt”文件中追加。如果文件名无效,或者服务器无法创建文件,它将开始向默认文件“C:\SMTPLog.txt”写入日志条目。.您可以启用日志记录并查看生成的日志文件,以了解文件的语法和信息级别。您可以使用自定义的解析脚本/程序来解析日志文件并实现您的计费系统,或防止垃圾邮件、恶意电子邮件等。但是,为了使这有意义,您应该在调用
SendMail()
方法之前先设置LoginName
参数。有关详细信息,请参阅 Example.asp。下面是从日志文件中摘录的一段
BEGIN <Kashif> Message intended for 4 addresses HIM: 220 mail.nexlinx.net.pk ESMTP Nexlinx Sendmail 8.9.3/8.9.3; Thu, 31 May 2001 14:09:01 +0500 ME: HELO kashif.SMTP.Server HIM:250 mail.nexlinx.net.pk Hello [202.59.64.117], pleased to meet you ME: MAIL FROM: <kashifmanzoor@giki.edu.pk> HIM:250 <kashifmanzoor@giki.edu.pk>... Sender ok ME: RCPT TO: <kashifmanzoor@hotmail.com> HIM:250 <kashifmanzoor@hotmail.com>... Recipient ok ME: RCPT TO: <kashifmanzoor@yahoo.com> HIM:250 <kashifmanzoor@yahoo.com>... Recipient ok ME: RCPT TO: <00030022@lums.edu.pk> HIM:250 <00030022@lums.edu.pk>... Recipient ok ME: RCPT TO: <naveedarshad@yahoo.com> HIM:250 <naveedarshad@yahoo.com>... Recipient ok ME: DATA HIM:354 Enter mail, end with "." on a line by itself ME: Subject: This email comes to your courtesy of SMTP.Server Reply-To: kashifmanzoor@giki.edu.pk <55 bytes of message sent to the server> . HIM:250 OAA04529 Message accepted for delivery Message Successfully delivered ======== END ========
就是这样!随意使用此日志文件。
SMTP.Server
发送的消息以ME
标签开头,SMTP.Server
接收的消息以HIM
标签开头。每个新日志条目都以BEGIN
标签开头,以END
标签结尾;但是,如果发送邮件时发生错误,则END
标签将不存在。因此,缺少END
标签应表示错误。要获取错误的详细信息,只需查看相应的HIM:
行。 - 属性:
ReplyTo
类型:String
默认值:null
描述:此属性应设置为收件人希望回复的地址。如果未设置
ReplyTo
,SMTP.Server
会自动将MailFrom
属性中的地址视为ReplyTo
。当MailFrom
地址与ReplyTo
不同时,此属性很有用;如果两者相同,您可以安全地忽略ReplyTo
。 - 属性:
TimeOut
类型:integer
默认值:180 秒(3 分钟)
描述:此值(以秒为单位)指定
SMTP.Server
处理单个电子邮件消息的最长时间。计时器在您调用 SendMail() 方法时开始。如果SendMail()
方法在TimeOut
秒内未返回(无论是否出错),SMTP.Server
将强制中止该邮件消息。这可以防止您的容器应用程序在调用SendMail()
后被阻塞。 Subject
类型:String
默认值:“(无主题)”
描述:此属性保存消息主题。您可以从此属性设置邮件主题,也可以在调用
SendMail()
时将其作为输入参数。(请参阅 SendMail() 方法说明。)Message
类型:String
默认值:null
描述:此属性保存实际消息。您可以从此属性设置消息,也可以在调用
SendMail()
时将其作为输入参数。(请参阅 SendMail() 方法说明。)CcTo
类型:String
默认值:null
描述:如果您的电子邮件有多个收件人,可以通过此属性指定。要输入多个地址,请用“,”(逗号)分隔。例如:“abcd@efg.com, hij@klm.com, mno@pqr.com”。请注意,除最后一个地址外,每个地址后都有一个逗号。
SMTP.Server
会忽略任何无效地址,并且不会报告任何错误。无效地址可能是没有“@”符号的地址,或者不是用“,”分隔的地址列表。SMTP.Server
会删除地址前后任何多余的空格。WmlOutput
类型:boolean
默认值:0 (FALSE)(即,来自
SendMail()
的输出将与 WML 不兼容)描述:当您调用
SendMail()
方法时,它会返回一个字符串,说明操作的成功或失败。您的程序可以直接使用此字符串来报告发送邮件过程的结果。但是,如果您要嵌入SMTP.Server
以通过 WAP(无线应用协议)设备(例如,您的手机、手持电脑等)发送电子邮件,则必须将此参数设置为“1”。原因是返回的消息可能包含非法字符,如尖括号“<”或“>”。尽管 HTML 页面可能会忽略这些字符,但 WML 浏览器会感到困惑,并尝试将其解释为 WML 标签的开始/结束,从而生成严重的“无法显示页面”错误。将此属性设置为“1”将确保
SendMail()
方法的返回消息与 WML 代码兼容(即,从返回字符串中移除了所有歧义),您可以直接将SendMail()
返回字符串输出到 WAP 设备。请参阅 WML 示例代码。
strCc
:一个字符串,包含逗号分隔的目标电子邮件地址(请参阅 CcTo 属性)。strSubject
:一个字符串,包含电子邮件消息的主题(请参阅 Subject 属性)。strMessage
:一个字符串,包含要通过电子邮件发送的实际消息(请参阅 Message 属性)。strAttachFile
:目前,SMTP.Server
不允许附加文件到您的消息。在未来的版本中,我将实现此功能,届时此参数将接受附加文件名。现在,您可以将其设置为空字符串或任何其他值——SMTP.Server
会直接忽略它。
SMTP.Server
只支持一种方法(生活没有比这更简单的了!)。参数非常直观。
该方法接受以下参数
您可以直接通过 SendMail()
方法调用传递 Cc/Subject/Message 信息,或者您可以分别访问属性来单独设置它们。如果单独设置这些属性,请确保使用空字符串作为参数调用 SendMail()
方法。这是因为直接作为参数传递给 SendMail()
调用的 Subject/Cc/Message 值优先于 Subject
、CcTo
、Message
属性的任何先前设置值。(请参阅 示例 ASP 代码。)SendMail()
方法于 2002 年 2 月 15 日根据 Brian D Pearson 的反馈进行了轻微更新。
返回值
该函数返回一个字符串,解释 SendMail()
的结果。如果消息成功送达,返回字符串将包含“Message Successfully delivered”;否则,它将包含可能发生的任何错误的描述。
示例用法
- Example.asp (原生 ASP 代码)
- Example.wml (包含 WML 的 ASP 代码)
- ServerTest.xls.
发送 bug/反馈/批评至:kashifmanzoor@hotmail.com。