Fast Way to Create and Send Email

An easy way to create and send email in VB (or any other language) is to use the “mailto:” protocol that already works on client computers. The technique makes a request to the installed email client, and works with Outlook, Lotus Notes, and other registered email clients.

You can’t use the standard VB Shell function; instead, you call the Windows ShellExecute API to send email.

Put this code in a module called Module1.bas:

Public Declare Function ShellExecute Lib "shell32" _   Alias "ShellExecuteA" ( _   ByVal hwnd As Long, _   ByVal lpOperation As String, _   ByVal lpFile As String, _   ByVal lpParameters As String, _   ByVal lpDirectory As String, _   ByVal nShowCmd As Long) As Long   'Constants for ShowWindow (nCmdShow)   Public Const SW_HIDDEN As Long = 0   Public Const SW_NORMAL As Long = 1   Public Const SW_MINIMIZED As Long = 2   Public Const SW_MAXIMIZED As Long = 3   Public Const SW_NOTACTIVE As Long = 4   Public Const SW_UNHIDDEN As Long = 5   Public Const SW_MINWITHFOCUS As Long = 6   Public Const SW_MINNOTACTIVE As Long = 7   Public Const SW_RESTORE As Long = 9

You’ll need a form to enter an email address. Open the default Form1.frm, in design mode, and place three Textboxes and a Command Button on the form. Then add this code to handle the control events:

Private Sub Command1_Click()   Dim Email As String   Email = "mailto:" & Text1.Text _      & "?subject=" & Text2.Text _      & "&body=" & MailTo_StringConverter(Text3.Text)   ShellExecute Me.hwnd, vbNullString, _      Email, vbNullString, vbNullString, SW_MAXIMIZEDEnd SubPrivate Function MailTo_StringConverter(Text As String) As String   Dim CharIndex As Integer   Dim CharLength As Integer   Dim ASCIIcode As Integer       MailTo_StringConverter = Text   'easy tecnique to speed up For cicle!!   CharLength = Len(MailTo_StringConverter)       For CharIndex = CharLength To 1 Step -1      ASCIIcode = Asc(Mid$(MailTo_StringConverter, CharIndex, 1))      If (ASCIIcode < vbKey0 Or ASCIIcode > vbKey9) _         And (ASCIIcode < vbKeyA Or ASCIIcode > vbKeyZ) _         And (ASCIIcode < vbKeyA + 32 Or ASCIIcode > vbKeyZ + 32) Then         ' replace punctuation chars with "%hex"         MailTo_StringConverter = Left$( _            MailTo_StringConverter, CharIndex - 1) _            & "%" & ASCIIcode2HexChar(ASCIIcode) _            & Mid$(MailTo_StringConverter, CharIndex + 1)      End If   NextEnd FunctionPrivate Function ASCIIcode2HexChar(ASCIIcode As Integer) As String    If ASCIIcode < 16 Then        'need leading zero to complete 2 bytes !!!        ASCIIcode2HexChar = "0" & Hex$(ASCIIcode)    Else 'all ok, Hex$ returned string has 2 bytes        ASCIIcode2HexChar = Hex$(ASCIIcode)    End IfEnd Function
Share the Post:
Share on facebook
Share on twitter
Share on linkedin

Overview

Recent Articles: