这个例子网上有很多版本,但是通常能发的,异常管理不是做的很好,这里的代码是我稍加整理的。包含了认证过程,我想现在SMTP一般都是要认证的吧。不要认证的只需把相应的行去掉即可。
代码如下:
Dim Response As String, Reply As Integer
Dim DateNow As String, first As String, Second As String, Third As String
Dim Fourth As String, Fifth As String, Sixth As String
Dim Seventh As String, Eighth As String
Dim Start As Single, Tmr As Single
Sub SendEmail(MailServerName As String, FromName As String, FromEmailAddress As String, ToName As String, ToEmailAddress As String, EmailSubject As String, EmailBodyOfMessage As String)
Winsock1.LocalPort = 0 ' Must set local port to 0 (Zero) or
'you can only send 1 e-mail per program
'start
If Winsock1.State = sckClosed Then 'Check to see if socet is closed
DateNow = Format(Date, "Ddd") & ", " _
& Format(Date, "dd Mmm YYYY") & " " _
& Format(Time, "hh:mm:ss") & "" & " -0600"
' Get who's sending E-Mail address
first = "mail from:" + Chr(32) + FromEmailAddress + vbCrLf
' Get who mail is going to
Second = "rcpt to:" + Chr(32) + ToEmailAddress + vbCrLf
' Date when being sent
Third = "Date:" + Chr(32) + DateNow + vbCrLf
' Who's Sending
Fourth = "From:" + Chr(32) + FromName + vbCrLf
' Who it going to
Fifth = "To:" + Chr(32) + ToNametxt + vbCrLf
' Subject of E-Mail
Sixth = "Subject:" + Chr(32) + EmailSubject + vbCrLf
' E-mail message body
Seventh = EmailBodyOfMessage + vbCrLf
' What program sent the e-mail, customize this
Ninth = "X-Mailer: EBT Reporter v 2.x" + vbCrLf
' Combine for proper SMTP sending
Eighth = Fourth + Third + Ninth + Fifth + Sixth
Winsock1.Protocol = sckTCPProtocol ' Set protocol for sending
Winsock1.RemoteHost = MailServerName ' Set the server address
Winsock1.RemotePort = 25 ' Set the SMTP Port
Winsock1.Connect ' Start connection
WaitFor ("220")
StatusTxt.Caption = "Connecting...."
StatusTxt.Refresh
Winsock1.SendData ("HELO xxx.gov.cn" + vbCrLf)
WaitFor ("250")
StatusTxt.Caption = "Connected"
StatusTxt.Refresh
Winsock1.SendData ("AUTH LOGIN" + vbCrLf)
WaitFor ("334")
StatusTxt.Caption = "Sending AUTH LOGIN"
StatusTxt.Refresh
Winsock1.SendData (Base64_Encode("danny@xxx.gov.cn") + vbCrLf)
WaitFor ("334")
StatusTxt.Caption = "Sending Username"
StatusTxt.Refresh
Winsock1.SendData (Base64_Encode("danny") + vbCrLf)
WaitFor ("235")
StatusTxt.Caption = "Sending Password"
StatusTxt.Refresh
Winsock1.SendData (first)
StatusTxt.Caption = "Sending Message"
StatusTxt.Refresh
WaitFor ("250")
Winsock1.SendData (Second)
WaitFor ("250")
Winsock1.SendData ("data" + vbCrLf)
WaitFor ("354")
Winsock1.SendData (Eighth + vbCrLf)
Winsock1.SendData (Seventh + vbCrLf)
Winsock1.SendData ("." + vbCrLf)
WaitFor ("250")
Winsock1.SendData ("quit" + vbCrLf)
StatusTxt.Caption = "Disconnecting"
StatusTxt.Refresh
WaitFor ("221")
Winsock1.Close
Else
MsgBox (Str(Winsock1.State))
End If
End Sub
Sub WaitFor(ResponseCode As String)
Start = Timer ' Time event so won't get stuck in loop
While Len(Response) = 0
Tmr = Start - Timer
DoEvents ' Let System keep checking for incoming response **IMPORTANT**
If Tmr > 50 Then ' Time in seconds to wait
MsgBox "SMTP service error, timed out while waiting for response", 64, MsgTitle
Exit Sub
End If
Wend
While Left(Response, 3) <> ResponseCode
DoEvents
If Tmr > 50 Then
MsgBox "SMTP service error, impromper response code. Code should have been: " + ResponseCode + " Code recieved: " + Response, 64, MsgTitle
Exit Sub
End If
Wend
Response = "" ' Sent response code to blank **IMPORTANT**
End Sub
Private Sub Command1_Click()
SendEmail txtEmailServer.Text, txtFromName.Text, txtFromEmailAddress.Text, txtToEmailAddress.Text, txtToEmailAddress.Text, txtEmailSubject.Text, txtEmailBodyOfMessage.Text 'MsgBox ("Mail Sent")
StatusTxt.Caption = "Mail Sent"
StatusTxt.Refresh
Beep
Close
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Winsock1.GetData Response ' Check for incoming response *IMPORTANT*
End Sub
Private Function Base64_Encode(strSource) As String 'base6加密算法
Const BASE64_TABLE As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
Dim strTempLine As String
Dim j As Integer
For j = 1 To (Len(strSource) - Len(strSource) Mod 3) Step 3
strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) \ 4) + 1, 1)
strTempLine = strTempLine + Mid(BASE64_TABLE, ((Asc(Mid(strSource, j, 1)) Mod 4) * 16 _
+ Asc(Mid(strSource, j + 1, 1)) \ 16) + 1, 1)
strTempLine = strTempLine + Mid(BASE64_TABLE, ((Asc(Mid(strSource, j + 1, 1)) Mod 16) * 4 _
+ Asc(Mid(strSource, j + 2, 1)) \ 64) + 1, 1)
strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j + 2, 1)) Mod 64) + 1, 1)
Next j
If Not (Len(strSource) Mod 3) = 0 Then
If (Len(strSource) Mod 3) = 2 Then
strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) \ 4) + 1, 1)
strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) Mod 4) * 16 _
+ Asc(Mid(strSource, j + 1, 1)) \ 16 + 1, 1)
strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j + 1, 1)) Mod 16) * 4 + 1, 1)
strTempLine = strTempLine & "="
ElseIf (Len(strSource) Mod 3) = 1 Then
strTempLine = strTempLine + Mid(BASE64_TABLE, Asc(Mid(strSource, j, 1)) \ 4 + 1, 1)
strTempLine = strTempLine + Mid(BASE64_TABLE, (Asc(Mid(strSource, j, 1)) Mod 4) * 16 + 1, 1)
strTempLine = strTempLine & "=="
End If
End If
Base64_Encode = strTempLine
End Function
分享到:
相关推荐
在这个“VB6.0简单Socket服务端”项目中,开发者使用了Winsock控件来实现了一个基本的Socket服务器。下面将详细解释Socket、Winsock控件以及如何在VB6.0中构建Socket服务端。 Socket,也称为套接字,是网络编程中的...
在VB6.0中,我们可以通过使用WINSOCK控件来实现网络通信功能,包括TCP/IP协议下的SOCKET通讯。本教程将深入探讨如何利用VB6.0的WINSOCK控件构建一个能够处理一对多通讯的服务器端程序。 SOCKET通讯是一种基于网络...
VB6.0企业精简版在此基础上进一步优化了体积,减少了不必要的组件,使其更加轻便,运行效率更高。 该“vb6.0精简版”主要包含以下几个关键知识点: 1.**事件驱动编程**:VB6.0的核心编程模式是事件驱动,用户界面上...
撰写新邮件,使用MAPI对话框撰写及发送电子邮件,使用设计的窗体NewMsg撰写及发送电子邮件,在删除当前邮件后,下一封邮件的位置设置为当前位置,这时需要判断该邮件是否已经在子窗体MsgView中显示,如是,将其设为...
### Delphi6.0与VB6.0中的Socket技术对比分析及集成 #### 一、引言 在当今数字化时代,计算机网络技术的发展推动了应用编程领域的革新,特别是在基于网络环境下的应用程序开发方面。Delphi6.0和VB6.0作为两款广泛...
总的来说,虽然VB6.0不直接支持WebSocket,但通过使用第三方库或者自行实现WebSocket协议,仍然可以在VB6.0中构建WebSocket应用程序。这个"VB6.0 实现WebSocket的例子"压缩包很可能是包含了一个完整的示例,展示了...
尽管现在已经有了更新的版本,如Visual Studio .NET系列,但仍有大量遗留的VB6.0程序在各行业中使用。 MSVBVM60.DLL是VB6.0运行时库的主要文件,它包含了VB6.0的虚拟机和必要的函数库,用于解释和执行VB6.0编译后的...
2. **控件介绍**:VB 6.0 提供了大量的内置控件,如按钮(Button)、文本框(TextBox)、列表框(ListBox)、复选框(CheckBox)等,文档中会对这些控件的属性、方法和事件进行详尽解析,帮助开发者理解如何在界面上添加和...
总之,VB6.0 SP6补丁对于仍在使用VB6.0的开发者来说至关重要,它不仅可以提高开发效率,还能确保应用程序的安全性和稳定性。尽管VB6.0已经被VB.NET取代,但因其简单易用和强大的桌面应用开发能力,至今仍有部分企业...
在VB6.0中调用SQL Server的存储过程是VB开发者经常遇到的问题,本文将详细介绍如何在VB6.0中调用SQL Server的存储过程,并对存储过程的优点和使用方法进行了详细的解释。 首先,存储过程是一种封装方法,用于重复...
在VB6.0中,我们可以利用Winsock控件来实现网络通信功能,如创建一个简单的聊天程序。本文将深入探讨如何利用VB6.0和Winsock控件构建一个多客户端通信的聊天程序,并针对描述中提到的问题进行分析。 1. Winsock控件...
本文将详细探讨如何在VB 6.0中使用特定的控件来实现QRcode的生成。 首先,我们需要了解VB 6.0的环境。Visual Basic 6.0是Microsoft推出的一种面向对象的编程语言,它提供了一个强大的集成开发环境(IDE),支持事件...
在VB6.0(Visual Basic 6.0)中实现电子邮件的发送和接收是一项常见的编程任务,这通常涉及到使用SMTP(Simple Mail Transfer Protocol)服务来发送邮件和POP3(Post Office Protocol version 3)或IMAP(Internet ...
在VB6.0中使用这些图标,首先需要将ICO文件导入到工程中。这可以通过打开"资源视图",然后右键单击"图标"类别并选择"插入图标"来完成。导入后,开发者可以在代码中引用这些图标,例如: ```vb Form1.Icon = ...
在压缩包文件名称列表中,"VB6_sp6_CHT"很可能就是VB6.0 SP6补丁的繁体中文版安装文件。安装这个补丁的步骤通常是:首先,确保你已经正确安装了VB6.0繁体中文专业版;其次,运行这个补丁文件,按照提示进行操作,...
在编程领域,编译器将高级语言(如VB6.0)编写的源代码转换为机器可执行的二进制代码,这个过程是不可逆的。然而,反编译工具试图通过分析二进制代码来重构源代码,帮助开发者理解程序的工作原理,或者用于代码的...
Visual Basic 6.0(简称VB6.0)是一款由微软公司推出的可视化编程工具,它在1998年发布,是Visual Basic系列中的一个重要版本。VB6.0以其直观的用户界面、强大的Windows应用程序开发能力以及易学易用的特点,在当时...
在VB6.0项目中使用水晶报表前,你需要确保已经安装了水晶报表的开发包,通常包含在Visual Studio或单独的SDK中。安装完成后,水晶报表的相关组件会出现在VB6.0的工具箱里,便于拖放使用。 接着,了解水晶报表的基本...
在VB6.0中使用GDI+,你需要引入一个GDI+的ActiveX控件,如`gdiplus.dll`。首先将这个动态链接库添加到你的项目中,然后利用GDI+的类库来加载和绘制PNG图片。以下是一个简单的示例: ```vb Private Declare Function...
7. **调试工具**:VB6.0内置的调试器可以帮助开发者定位并修复程序中的错误,提高开发效率。 8. **版本控制**:支持版本控制系统的集成,便于团队协作开发。 **VB6.0的应用领域:** - **桌面应用开发**:VB6.0常...