当前位置:编程学习 > VB >>

发送电子邮件附件

 

 

与简单电子邮件发送程序相比,本示例程序多了框架控件及其中的内容。框架中的列表框用来显示附件的路径,另外两个按钮的作用相信你一看就知道。真正发送附件的代码在Send message按钮的Click事件中。在该事件中多了一小段代码:

 

For i = 0 To lstAttachments.ListCount - 1

    lstAttachments.ListIndex = i

    m_strEncodedFiles = m_strEncodedFiles & _

    UUEncodeFile(lstAttachments.Text) & vbCrLf

Next i

上面的代码将附件的路径作为参数传递给UUEncodeFile函数。该函数的作用是按照我们前面所讲的算法对字符进行编码。编码后的数据被保存在一个模块级变量m_strEncodedFile中。然后该变量的内容被添加到邮件正文中:

 

Add atacchments

strMessage = txtMessage & vbCrLf & vbCrLf & m_strEncodedFiles

 

剩下的事情就再清楚不过了。编码后的数据作为邮件的一部分发送出却,你不需编写特别的代码处理SMTP服务器。下面的函数UUEncodeFile的代码:

 

Public Function UUEncodeFile(strFilePath As String) As String

 

Dim intFile As Integer     file handler

Dim intTempFile As Integer temp file

Dim lFileSize As Long      size of the file

Dim strFileName As String  name of the file

Dim strFileData As String  file data chunk

Dim lEncodedLines As Long  number of encoded lines

Dim strTempLine As String  temporary string

Dim i As Long              loop counter

Dim j As Integer           loop counter

 

Dim strResult As String

Get file name

strFileName = Mid$(strFilePath, InStrRev(strFilePath, "") + 1)

Insert first marker: "begin 664 ..."

strResult = "begin 664 " + strFileName + vbLf

Get file size

lFileSize = FileLen(strFilePath)

lEncodedLines = lFileSize 45 + 1

Prepare buffer to retrieve data from

the file by 45 symbols chunks

strFileData = Space(45)

intFile = FreeFile

Open strFilePath For Binary As intFile

For i = 1 To lEncodedLines

    Read file data by 45-bytes cnunks

   

    If i = lEncodedLines Then

        Last line of encoded data often is not

        equal to 45, therefore we need to change

        size of the buffer

        strFileData = Space(lFileSize Mod 45)

    End If

    Retrieve data chunk from file to the buffer

Get intFile, , strFileData

    Add first symbol to encoded string that informs

    about quantity of symbols in encoded string.

    More often "M" symbol is used.

strTempLine = Chr(Len(strFileData) + 32)

   

    If i = lEncodedLines And (Len(strFileData) Mod 3) Then

        If the last line is processed and length of

        source data is not a number divisible by 3,

补充:软件开发 , Vb ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,