Skip to main content.

(2014/07/09)このサイトは更新を終了しました。今しばらく公開は続けたいと思いますが古くなっている情報もありますのでご注意下さい。新しいサイトはこちらです。引き続き株式会社インデペンデンスシステムズ横浜は鋭意営業中です。

Friday, November 25, 2005

BASP21を利用したメール送信

BASP21を利用したPOP Before SMTPでのメール送信プログラムです。

BASP21とはメールの送受信などの機能を持っている大変便利なコンポーネント(フリーソフト)です。今回は、このBASP21のBSMTP.DLLを利用します。BASP21は以下からダウンロードできます。今回のプログラムを実行する際にはこのDLLが必要となります。実際のプログラムはVB6で作りました。

BASP21

POP Before SMTPとはSPAMの中継を防ぐためのしくみです。具体的には、該当メールサーバ対して、POP3で認証を行なうと、一定時間内、同一IPアドレスからのメール送信が許可されます。

プログラミングとしては、BSMTP.DLLの関数RcvMailとSendMailを利用します。POP Before SMTPでは、通常、実際にメールを受信するのではなく、ユーザ名、パスワードを指定して、STATコマンドを実行します。そのSTATコマンドが正常終了した場合にSendMail関数を利用して、実際のメール送信を行います。

実行画面




BSMTP.DLLの関数を利用するための定義

メール受信
Public Declare Function RcvMail Lib "bsmtp" _
(szServer As String, szUser As String, szPass As String, _
szCommand As String, szDir As String) As Variant

メール送信
Public Declare Function SendMail Lib "bsmtp" _
(szServer As String, szTo As String, szFrom As String, _
szSubject As String, szBody As String, szFile As String) As String

メール送信処理のプログラム

Private Sub cmdSend_Click()
  '変数定義
  Dim szServer As String, szUser As String, szPass As String, szCommand As String, szDir As String
  Dim ar As Variant

  Screen.MousePointer = vbHourglass

  'POP Before SMTPの実行
  szServer = txtPOP
  szUser = txtUser
  szPass = txtPassword
  szCommand = "STAT" 'STATコマンドを実行する
  szDir = vbNullString '受信したメールを保存するディレクトリ、ここではNULL

  ar = RcvMail(szServer, szUser, szPass, szCommand, szDir)

  '結果チェック、正常の場合は、配列の結果が返る
  If Not IsArray(ar) Then
    Screen.MousePointer = vbNormal
    Call MsgBox("POP Before SMTPエラー" & vbCrLf & ar, vbExclamation + vbOKOnly)
    Exit Sub
  End If

  '認証できた場合、メール送信
  Dim szTo As String, szFrom As String, szSubject As String, szBody As String, szFile As String
  Dim ret As String

  szServer = txtSMTP
  szTo = txtTo
  szFrom = txtFrom
  szSubject = txtTitle
  szBody = txtBody
  szFile = vbNullString

  ret = SendMail(szServer, szTo, szFrom, szSubject, szBody, szFile)

  ' 送信エラーのときは、戻り値にエラーメッセージが返る
  If Len(ret) <> 0 Then
    Screen.MousePointer = vbNormal
    Call MsgBox("メール送信エラー:" & ret, vbOKOnly + vbExclamation)
    Exit Sub
  End If

  Screen.MousePointer = vbNormal
  Call MsgBox("メール送信が完了しました", vbOKOnly + vbInformation)
End Sub

VB6のプロジェクトファイルを以下に置きました。
プロジェクトファイル一式

動作確認しましたが、エラー処理等、不十分ですので、動作は保証できません。このプログラムを利用しての不具合、不利益には一切の責任を負いかねます。ご了承ください。

BASP21リンク
BASP21
BSMTP.DLL
アプリケーションガイド