65.9K
CodeProject 正在变化。 阅读更多。
Home

SMTP 客户端 ActiveX 组件

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.50/5 (8投票s)

2002 年 2 月 11 日

10分钟阅读

viewsIcon

302152

downloadIcon

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)。您应该会看到一个对话框,与下图类似

Sample Image - smtp.gif

这表示 SMTP.Server 已成功在系统注册表中注册。

如果您没有看到此对话框,请报告 错误。(请记住,该应用程序尚未在 Win95/NT 上进行测试。)

步骤 (3)

现在,您可以将其用于您的 Visual C++ 应用程序(作为 CreateDispatch(“SMTP.Server”)),ASP/Excel/VB 应用程序(作为 Server.CreateObject(“SMTP.Server”))。

请查看示例代码,以及 SMTP.Server 支持的方法/属性。

SMTP.Server 属性

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 属性包含电子邮件地址,则将其用作发件人地址。如果 MailFromReplyTo 均未设置,系统将返回错误“无效的发件人地址”。

    回到顶部

  • 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 不会直接将电子邮件递送到 MailToCcTo 属性中指定的收件人地址。它会将电子邮件消息传递给另一个服务器,该服务器将代表 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

    描述:此属性应设置为收件人希望回复的地址。如果未设置 ReplyToSMTP.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 示例代码

    回到顶部

  • SendMail (strCc, strSubject, strMessage, strAttachFile)

    SMTP.Server 只支持一种方法(生活没有比这更简单的了!)。参数非常直观。

    该方法接受以下参数

    • strCc:一个字符串,包含逗号分隔的目标电子邮件地址(请参阅 CcTo 属性)。

    • strSubject:一个字符串,包含电子邮件消息的主题(请参阅 Subject 属性)。

    • strMessage:一个字符串,包含要通过电子邮件发送的实际消息(请参阅 Message 属性)。

    • strAttachFile目前,SMTP.Server 不允许附加文件到您的消息。在未来的版本中,我将实现此功能,届时此参数将接受附加文件名。现在,您可以将其设置为空字符串或任何其他值——SMTP.Server 会直接忽略它。

    您可以直接通过 SendMail() 方法调用传递 Cc/Subject/Message 信息,或者您可以分别访问属性来单独设置它们。如果单独设置这些属性,请确保使用空字符串作为参数调用 SendMail() 方法。这是因为直接作为参数传递给 SendMail() 调用的 Subject/Cc/Message 值优先于 SubjectCcToMessage 属性的任何先前设置值。(请参阅 示例 ASP 代码。)SendMail() 方法于 2002 年 2 月 15 日根据 Brian D Pearson 的反馈进行了轻微更新。

    返回值

    该函数返回一个字符串,解释 SendMail() 的结果。如果消息成功送达,返回字符串将包含“Message Successfully delivered”;否则,它将包含可能发生的任何错误的描述。

    回到顶部

示例用法

发送 bug/反馈/批评至:kashifmanzoor@hotmail.com

© . All rights reserved.