SMTP,POP3,VB6メール送受信


VB Tips And Sample(HOME)(戻る)



Winsock1コントロールを使ってメール送信、メール受信件数を取得します。
フォームに、Winsock1、テキストボックス2つ、ボタン2つ貼り付けて以下のコードで実行してください。
サーバアドレス、メールアドレスは自分のものを使用してください。
注意! スパムメールなどには使用しないこと

Option Explicit


Private strBuff As String



Private Sub Command2_Click()
'送信

Dim strHost As String
Dim strDomain As String
Dim strFrom As String
Dim strFromName As String
Dim strTo As String
Dim strSubject As String
Dim strData As String
Dim stBody As String


strHost = "SMTPメールサーバ"
strDomain = "貴方のPC名"
strFrom = "貴方のメアド"
strTo = "あて先メアド"
strSubject = Text2.Text '件名
stBody = Text1.Text '内容

On Error GoTo SOS

With Winsock1
'            .LocalPort = 1
            .RemoteHost = strHost
            .RemotePort = 25
            .Protocol = sckTCPProtocol
            .Connect
            
            '接続の確立
            Call CodeMatu("220")

            .SendData "EHLO " & "mk" & vbCrLf
            
            Call CodeMatu("250")
            
            .SendData "MAIL FROM:" & strFrom & vbCrLf
            
            Call CodeMatu("250")
            
            .SendData "RCPT TO:" & strTo & vbCrLf
            
            Call CodeMatu("250")
            
            .SendData "DATA" & vbCrLf

             Call CodeMatu("354")
             
            strData = "From: ""testuser"" <" & strFrom & ">" & vbCrLf & _
            "To: <" & strTo & ">" & vbCrLf & _
            "Subject: " & strSubject & vbCrLf & _
            "Date: " & Format(Now, "ddd, d mmm yyyy hh:mm:ss") & " +0900 (JST)" & vbCrLf & _
            "MIME-Version: 1.0" & vbCrLf & _
            "Content-Type: text/plain;" & vbCrLf & _
            "    format=flowed;" & vbCrLf & _
            "    charset=""iso-2022-jp"";" & vbCrLf & _
            "    reply-type=original" & vbCrLf & _
            "Content-Transfer-Encoding: 7bit" & vbCrLf & _
            "X-Priority: 3" & vbCrLf
            
            .SendData strData & vbCrLf
            .SendData stBody & vbCrLf
                      

            .SendData "." & vbCrLf
            
            Call CodeMatu("250")
            
                    
            .SendData "QUIT " & vbCrLf
    
            Call CodeMatu("221")
            .Close

            Do While .State <> sckClosed
            DoEvents
            Loop

End With
SOS:
            Debug.Print Err.Description
End Sub


Private Sub Command3_Click()
    ''POP3接続
    '1. ポート=110で,POP3サーバーと接続
    '2. USERコマンド送信
    '3. PASSコマンド送信
    '4. STATコマンド送信
    '5. RETRコマンド送信
    '6. QUITコマンド送信
    '7. POP3サーバーと切断
    Dim strHost As String
    strHost = "POP3サーバアドレス"
    Dim strUser As String
    strUser = "貴方のユーザID"
    Dim strPass As String
    strPass = "貴方のパスワード"
    
    
    With Winsock1
                .Close
                .LocalPort = 0 '0にしないとエラー有り
                .RemoteHost = strHost
                .RemotePort = 110
                .Protocol = sckTCPProtocol
                .Connect
    
                Call CodeMatu("+OK")
    
                .SendData "USER " & strUser & vbCrLf
    
                DoEvents
                Call CodeMatu("+OK")
                .SendData "PASS " & strPass & vbCrLf
                DoEvents
                Call CodeMatu("+OK")
                .SendData "STAT" & vbCrLf
                DoEvents
                .SendData vbCrLf & "." & vbCrLf
                Call CodeMatu("+OK")
                .SendData "QUIT"
                DoEvents
                .Close
                Debug.Print "POP3接続終了"
               
    End With

End Sub


Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
On Error Resume Next
            Winsock1.Close
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
        Winsock1.GetData strBuff
        
        Debug.Print strBuff
        DoEvents
End Sub

Private Sub CodeMatu(ByVal StrCode As String)

Dim Start As Long
Dim Tmr As Long


    Start = Timer
    While Len(strBuff) = 0
        Tmr = Start - Timer
        
        DoEvents
        If Tmr > 50 Then
            MsgBox "SMTP service error, timed out while waiting for response", 64, "MsgTitle"
            Exit Sub
        End If
    Wend
    While Left(strBuff, 3) <> StrCode
        DoEvents
        If Tmr > 50 Then
           MsgBox "SMTP service error, impromper response code. Code should have been: " + StrCode + " Code recieved: " + strBuff, 64, "MsgTitle"
           Exit Sub
        End If
    Wend
    strBuff = ""

End Sub


Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
        Debug.Print Number & Description
        Debug.Print Scode
        Debug.Print Source
        Debug.Print HelpFile
        Debug.Print HelpContext
        Debug.Print CancelDisplay
End Sub



VB Tips And Sample(HOME)(戻る)
©  2004 I Love Balard. All Rights Reserved.