arlso ckk
2003.02.11 XV

BSMTP DLĹA[MAPIƃ[MAPI񋟂܂BȂVisual Basic/C++\[Xďo΃[MȒPɂł܂B[MɃR[obN֐w肷邱ƂɂAMoCgmFLZł܂B Visual C++Delphig܂BPAPIďoŃ[MnjB Visual Basic/VBAg܂B
FlushMail APIǉ܂B2003/02/11 Update!
JavaSMTP/POP3Ȃǂ̃[eXgɂ́A JamesǂB
_E[ht@Cꗗ

    * bsmtp.dll@@{
    * bsmtp.h@@ wb_t@C
    * bsmtp.lib@@Visual C++ 6.0 pLIBt@C 

Visual Basic̎g
DeclareXe[gĝ悤ɎgĂB

Private 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 Declare Function SendMailEx Lib "bsmtp" _
      (szLogfile As String, szServer As String, szTo As String, _
       szFrom As String, szSubject As String, szBody As String, szFile As String) As String

Private Declare Function RcvMail Lib "bsmtp" _
      (szServer As String, szUser As String, szPass As String, _
      szCommand As String, szDir As String) As Variant

Private Declare Function RcvMail2 Lib "bsmtp" _
      (szServer As String, szUser As String, szPass As String, _
      szCommand As String, szDir As String, callback As Long) As Variant

Private Declare Function ReadMail Lib "bsmtp" _
      (szFilename As String, szPara As String, szDir As String) As Variant

Private Declare Function SortMail Lib "bsmtp" _
      (szDir As String, szHeader As String, opt As Long, _
       szFilter As String,delflag As Long) As Variant

Private Declare Function FlushMail Lib "bsmtp" _
      (szServer As String, szDir As String, szLogfile As String) As Long


[MAPI̎g(Visual C++ 6.0/5.0)

    * bsmtp.dll system32fBNgɃRs[BBASP21 DLLɃCXg[ĂΕsvB
    * C++ 6.0 :bsmtp.lib KȃfBNgɃRs[(Fc:\babaq\bsmtp.lib)
    * C++ 5.0 :bsmtp50.lib KȃfBNgɃRs[(Fc:\babaq\bsmtp50.lib)
    * ֐vg^Cv̂悤ɒ`

// Bsmtp DLL
extern "C"
__declspec(dllimport) 
int BSendMail( LPCSTR szServer,   // smtp server name
           LPCSTR szTo,       // to  iő啶͂WPXQoCgłj
           LPCSTR szFrom,     // from
           LPCSTR szSubject,  // subject
           LPCSTR szBody,     // body
           LPCSTR szFile,     // Attach Files itpXŃ^uŋ؂ĕwj
           LPSTR msg);        // error message

    * ̂悤BSendMail֐ďo

    char msg[80];
    int ok = BSendMail(server,   // T[o[B^uŋ؂ă|[gԍ
                             // wł܂B
                             // T[ȏɃfBNgi[L[jw肷
                             // [t@C쐬܂B2003/2/6 Update! 
                             // ߂ĺA[L[̃[t@CɂȂ܂B
                             // 쐬[t@ĆAFlushMail APIt@CŃT[oɑM܂B
            to,       // to mail address (e.g., who@who.com\twho2...)
            from,     // from e-mail address
            subj,     // Message subject
            body,     // Message body
            files,    // Attach Files
            msg);     // error message
    if (!ok) {
            sprintf(buffer,"MG[ (%s) %s %s %s %s",
                                          msg,server,to,from,subj);
    }
    // [t@Cw̏ꍇ2003/2/6 Update! 
    if (ok <= 9) { // G[
    }

    * NCuɁ@c:\babaq\bsmtp.libiC++ 6.0̏ꍇj c:\babaq\bsmtp50.libiC++ 5.0̏ꍇjw肵ăNB
      bsmtp50.lib́ANIvV /LINK50COMPATō쐬܂BTHNX!B 

[MAPI̎g(Visual C++ 4.2̏ꍇ)
Visual C++ 4.2 łbsmtp50.lib̃NɃG[o悤łB̏ꍇ́Absmtp50.lib g܂B LoadLibrary/GetProcAddressgĊ֐R[ĂB

// ֐̃vg^CvtypedefgĒ`܂B
typedef int  (*pBSendMail)( LPCSTR szServer,
               LPCSTR szTo,
               LPCSTR szFrom,
               LPCSTR szSubject,
               LPCSTR szBody,
               LPCSTR szFile,
               LPSTR msg);

// Cu[h܂
HINSTANCE hInst = ::LoadLibrary("bsmtp.dll");
if (hInst == NULL)
    return false;
// ֐|C^`
pBSendMail pBs;
// BSendMail֐AhXݒ
pBs = (pBSendMail)::GetProcAddress(hInst,"BSendMail");
if (pBs == NULL) {
   FreeLibrary(hInst);
   return false;
}
// |C^gBSendMailR[
int ok = pBs(Server,To,From,Sub,Body,"",msg);

// ŌɃCuA[h
FreeLibrary(hInst);

[MAPI̎g(Delphi)
Delphił悤łBDelphȉꍇ́Alibt@C͎g܂B쁗lbNXATv肪Ƃ܂B

Function BSendMail( 
		szServer,   // smtp server name
		szTo,       // to
	        szFrom,     // from
		szSubject,  // subject
		szBody,     // body
		szFile:LPCSTR;     // Attach Files  split by tab char
                msg:LPSTR):Integer;        // error message
		cdecl  external 'Bsmtp.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
  wkstr : array[0..80]of Char;
begin
  if (BSendMail( PChar(Edit1.Text),  // smtp server name
                 PChar(Edit2.Text),  // to
                 PChar(Edit3.Text),  // from
                 PChar(Edit4.Text),  // subject
                 PChar(''), 	     // body
                 PChar(Edit5.Text),  // Attach Files  split by tab char
                 wkstr) <> 0 )Then
    begin
      Showmessage('o͂܂');
    end
  else
    begin
      Showmessage(wkstr);
    end;
end;


Delphił̃[M̃TvłBThanks łkB

unit BSMTP;

interface

uses Windows;

type
  TBSMTPStatus = record
    Counter: integer;
    Status : array[0..255] of LPSTR;
  end;

  TPBSMTPStatus = ^TBSMTPStatus;


  function BSendMail(
      szServer,       // smtp server name
      szTo,           // to
      szFrom,         // from
      szSubject,      // subject
      szBody,         // body
      szFile:LPCSTR;  // Attach Files  split by tab char
      msg:LPSTR       // error message
  ):Integer;	cdecl  external 'Bsmtp.dll';

  procedure BFreeArray(Status:TPBSMTPStatus);  cdecl  external 'Bsmtp.dll';

  function BPOP3(
      szServer,       // pop3 server name
      szName,         // NAME
      szPass,         // PASSWORD
      szCommand,      // COMMAND
      szPath:LPCSTR;  // directory
      Status:TPBSMTPStatus;   // return ARRAY LIST
      msg:LPSTR	      // 80 bytes length message area
  ):Integer;	cdecl  external 'Bsmtp.dll';

  function BMIME(
      szCommand,      // command name
      szFileName,     // Target Name
      szPath:LPCSTR;  // Target Name
      Status:TPBSMTPStatus;   // return ARRAY LIST
      msg:LPSTR	      // 80 bytes length message area
  ):Integer;	cdecl  external 'Bsmtp.dll';


implementation

end.

FlushMail API̎g2003/02/11 New !
BSendMail API֐Ń[L[ɍ쐬[t@CSMTPvgRŃ[M܂B[t@CxTCPRlNVőM̂Ō悭[܂BobNOEhiʃvZXbsendm.exeFlushMail\bhsj[hł̑M\łB
[t@C͈ȉ̂悤ȃeLXg`łB

PsځF惁[AhX
QsځFM[AhX
RsځF
SsځFYtt@C
Tsڈȍ~F{

    * ֐vg^Cv̂悤ɒ`

extern "C"
__declspec(dllimport) 
int BFlushMail(LPCSTR szServer,	// smtp server name
               LPCSTR szDir,	// [L[
               LPCSTR szLogfile); // Ot@CPASSWORD


char svr[] = "smtp-server";   // obNOEhw "&smtp-server"
char mdir[] = "c:\\temp\\maildir";
char logfile[] = "c:\\temp\\log.txt";
int rc = BFlushMail(svr,mdir,logfile);



cc/bcc/reply-toCӂ̃wb_[̎g
惁[IDp[^̒Ƀ^uŋ؂cc/bcc/reply-to L[[hw肵܂BCӂ̃wb_[́A">"Ă̂܂܎w肵܂B

gp:
悪@id1@ACC Ɂ@id2AMessage-IDwb_[̗
szTo = "id1\tcc\tid2\t>Message-ID: 12345"

悪@id1id2@ACC Ɂ@id3̗
szTo = "id1\tid2\tcc\tid2"

悪@id1id2@ACC Ɂ@id3 id4 ̗
szTo = "id1\tid2\tcc\tid3\tid4"

悪@id1@ABCC Ɂ@id2̗
szTo = "id1\tbcc\tid2"

悪@id1@ACC Ɂ@id2ABCC id3̗
szTo = "id1\tcc\tid2\tbcc\tid3"

悪@id1@AReply-To Ɂ@id2̗
szTo = "id1\treply-to\tid2"

CC Ɂ@id2̗
szTo = "cc\tid2"

BCC Ɂ@id2̗
szTo = "bcc\tid2"

[M̊gIvV
2000/01/23 ̃o[W玟̃IvVT|[g܂B


   1. \於 "@to-header" 擪"@" Ȃ 擪 "@" 폜 To: wb_[ƂđM܂B[AhXȊO̖Og܂B{g܂B[OXgɍœKBKAbcc邢cc ƋɎgƁBF mailto = "@Centerfolds-ML-User\tbcc\twho@hoge.com"; ̂悤ɑM܂B To: Centerfolds-ML-User
   2. ][h ">#xfr file-name" w肳ꂽt@C]܂BRcvMail \bhō쐬ꂽt@Cw肵܂B To: wb_[́A폜܂̂ňw肵ĂBTuWFNǵA㏑܂BTuWFNg"" Ȃ猳̃TuWFNĝ܂ܑM܂Bp[^ƂĎw肳ꂽ{ƓYtt@ĆA܂B̃wb_[́At@C폜܂B X-Mailer: X-Mail-Agent: Status: To: Return-Path: Delivered-To: PF mailto = "who@hoge.com\t>#xfr c:\\mail\\b21xxx.tmp"; QF mailto = "@ML-user\t>#xfr c:\\mail\\b21xxx.tmp\tbcc\twho@hoge.com";
   3. ][h̃wb_[폜 ">#d" ]郁[̊Ywb_[폜ƂɎw肵܂BF mailto = "@ML-user\t>#xfr c:\\mail\\b21xxx.tmp\t>#dcc:\tbcc\twho@hoge.com";
   4. Bcc t@C̓[h ">#bcc file-name" [AhXt@CPs͂ [𑗐M܂BMAhX́Awb_[ƂđMȂ Bcc Ƃď܂[AhX́A[ID݂̂w肵ĂBF mailto = "@ML-user\t>#xfr c:\\mail\\b21xxx.tmp\t>#bcc c:\\mai\\mailto.txt"; mailto.txt ̓eF # comment Pڂ "#" ̍s̓RgƂĖ܂ who@hoge.com who1@hoge.com who2@hoge.com 




SMTPT[o̊mF@
SMTPT[óAtelnet R}hŊmFł܂B̂悤Ƀ|[gԍQTg telnet R}hłĉԂĂT[oSMTPT[ołB > telnet T[o 25
[MAPI̎g
POP3vgRŃ[M܂B

    * ֐vg^Cv̂悤ɒ`

struct RetArray	{     
   int   counter;
   char* array[256];
};

extern "C"
__declspec(dllimport) 
void BFreeArray(RetArray* parray);


extern "C"
__declspec(dllimport) 
int BPOP3( LPCSTR szServer,	// pop3 server name
               LPCSTR szName,	// NAME
               LPCSTR szPass,	// PASSWORD
               LPCSTR szCommand,// COMMAND
               LPCSTR szPath,   // directory
               RetArray* RetArray,	// return ARRAY LIST
               LPSTR msg		// 80 bytes length message area
                );

extern "C"
__declspec(dllimport) 
int BMIME( LPCSTR szCommand,    // command name
               LPCSTR szFileName,   // Target Name
               LPCSTR szPath,   // Target Name
               RetArray* RetArray,	// return ARRAY LIST
               LPSTR msg		// 80 bytes length message area
                );


    * BPOP3֐

BPOP3֐́A[T[o烁[Măt@Cɏ݂܂B
p[^̐F
szServer@* POP3T[owBIPAhXłB^uŋ؂ă|[gԍ
            wł܂B
szName@@* [AJEg̃[U
szPass    * [AJEg̃pX[h
      2000/05/20 APOPT|[g
      APOP F؂ɂ́ApX[h̑O "a" ܂ "A"  P
      uN܂B
      "a xxxx" : T[oAPOP ΉȂʏUSER/PASS ܂B
      "A xxxx" : T[oAPOP ΉȂG[ɂȂ܂B
szCommand * R}hB啶ǂłB
          STAT ...... [ƑoCĝ݂Ԃ܂
          LIST ...... ׂẴ[SubjectAFromADatewb_[̓ê݂
                      Ԃ܂B
          SAVE n .... nԖڂ̃[M܂
          SAVD n .... nԖڂ̃[MAT[õ[{bNX
                      폜܂
          SAVEALL ... SẴ[M܂
          SAVEALLD .. SẴ[MAT[õ[{bNX
                      폜܂
szPath    * M[ۑfBNgw肵܂B
RetArray  * [M̌ʂzŕԂ܂Bze̓R}hɂ
                  ̂悤ɂȂ܂BG[ꍇ́AzԂ܂B
          SAVExxx - Mt@CB
          STAT - [ƑoCgB
          LIST - ^uŋ؂ꂽSubjectAFromADatewb_[̓e
msg       * bZ[ẄiWOoCgj
߂l    * 1ȏゾƐIB

    * BMIME֐

BMIME֐́ABPOP3֐ŎMRFC822`̃t@CǍ݂܂B
p[^̐F
szCommand@* R}hB啶ǂłB
          GET  ...... [wb_[A{AYtt@CǍ݂܂B
          GETNOF  ... [wb_[A{̂ݓǍ݂܂B
          HEAD ...... [̃wb_[̂ݓǍ݂܂B
szFileName * BPOP3ŏ܂ꂽRFC822`̃t@C
szPath    * Ytt@CۑfBNgw肵܂B
RetArray  * [M̌ʂzŕԂ܂Bze̓R}hɂ
                  ̂悤ɂȂ܂BG[ꍇ́AzԂ܂B
          HEAD - wb_[B
          GET  - wb_[A{AYtt@CB
          GETNOF  - wb_[A{B
msg       * bZ[ẄiWOoCgj
߂l    * 1ȏゾƐIB

    * BFreeArray֐

BFreeArray֐́ABPOP3֐BMIME֐Ŏgpz񃁃J܂B
p[^̐F
parray    * RetArray\̂̃AhX

# BPOP3֐BMIME֐̎g

	char msgx[80];
	RetArray ret1,ret2;
	int rc = BPOP3( "server1","user1","pass1",
               "save 1","c:\\mail",&ret1,msgx);
	if (rc <= 0)
		return false;
	rc = BMIME("get",ret1.array[0],"c:\\mail",&ret2,msgx);
	if (rc > 0) {
		FILE *fp = ::fopen("c:\\mail\\mail.txt","wb");
		for (int i= 0;i < rc ;i++) {
			::fwrite(ret2.array[i],1,strlen(ret2.array[i]),fp);
			::fwrite("\015\012",1,2,fp); // put CRLF
		}
		::fclose(fp);
	}

	DeleteFile(ret1.array[0]);
	BFreeArray(&ret1);
	BFreeArray(&ret2);

# BPOP3֐ł̃R[obN֐̎g

typedef BOOL (APIENTRY *pcallback)(int itemno,int len);

static BOOL APIENTRY CallBack(int itemno,int len)
{
	return 0;	// 1 ŃLZł܂
}


	char msgx[80];
	RetArray ret1;
	char name[200];			// [U [tab] R[obN֐AhX
	wsprintf(name,"user1\t%ld",(long)CallBack);
	int rc = BPOP3( "server1",name,"pass1",
               "saveall","c:\\mail",&ret1,msgx);


Visual C++ȊÕRpCł̓mFsĂ܂B
babaqt[\tĝgp̒
vOgĔQɊւẮA؂̐ӔC𕉂܂B
gpAzzɐ͂܂BRɂgB
̕ۏ؂͂܂B
mFnŕAWindows NT 4.0 Windows 95/98/Me/XP/2000݂̂łB


==========================================================================================
==========================================================================================

u a s
2003.02.11 XV

Visual BasicVBAȂBASP21R|[lggȂĂ[M␳K\ȒPɂł܂B BSMTP DLLBREGEXP DLL𒼐Visual Basicďo΂̂łB
Excelł̃[MTv́A http://homepage1.nifty.com/gak/MSTips/multimail.htmǂB






[𑗐M
SendMail֐ĂŃ[𑗐MTvłB BSMTP.DLLWindowssystemfBNgVBAvP[VufBNgɃRs[܂B

Option Explicit
Private 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 Declare Function FlushMail Lib "bsmtp" _  2003/02/11 New !
      (szServer As String, szDir As String, szLogfile As String) As Long

Private Sub Form_Load()
Dim ret As String
Dim szServer As String, szTo As String, szFrom As String
Dim szSubject As String, szBody As String, szFile As String

szServer = "your smtp"   ' SMTPT[oB
                         '^uŋ؂ă|[gԍwł܂B
szTo = "who@who.com"     ' 
' ̈ɑtƂ́AAhX^uŋ؂
' łwł܂B
szTo = "who1@who1.com" & vbTab & "who2@who2.com" ' 
' CCw肷ɂ͎̂悤ɂ܂B
szTo = "who@who.com" & vbTab & "cc" & vbTab & "who2@who2.com" & _
       vbTab & "who3@who3.com"
' BCCw肷ɂ͎̂悤ɂ܂B
szTo = "who@who.com" & vbTab & "bcc" & vbTab & "who2@who2.com" & _
       vbTab & "who3@who3.com"
' wb_w肷ɂ͎̂悤Ƀ^uŋ؂A>wb_̑O
' ܂B
szTo = "who@who.com" & vbTab & ">Message-ID: 12345"
szFrom = "my@my.com"     ' M
szSubject = "͂߂܂"     ' 
' {ŉsɂ́AvbCrLfg܂B
szBody = "ɂ́B" & vbCrLf & "悤Ȃ"   ' {
' t@CYtƂ́At@CtpXŎw肵܂B
' t@C𕡐w肷Ƃ́A^uŋ؂ĂB
szFile = "c:\a1.gif" & vbTab & "c:\a2.jpeg" ' t@CQ
' t@CYtȂƂ͎̂悤ɂ܂B
szFile = ""   ' t@CYtȂ

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

' MG[̂Ƃ́A߂lɃG[bZ[WԂ܂B
If Len(ret) <> 0 Then
   msgbox "G[" & ret
End If

' [L[Ƀ[t@C쐬2003/02/11 New !
Dim mdir As String, szLogfile As String
Dim rcnt As Long
mdir= "c:\temp\mdir"  ' [t@C쐬tH_i[L[j

rcnt = SendMail(mdir, szTo, szFrom, szSubject, szBody, szFile)

' rcnt ɂ̓[L[̃[t@CԂ܂B
'
szLogfile = "c:\temp\log.txt"   ' Ot@C

rcnt = FlushMail(szServer, szTo, mdir, szLogfile)

' rcnt ɂ͑Mnj̃[Ԃ܂B

End Sub


SMTPT[oĉł傤
T[oƂSMTPvgRT|[g[T[o\tg삵Ă}VłBC^[lbg[T[oƂ܂B OutlookȂǂ̃[\tgŃC^[lbg[̐ݒvpeB [[{bNX]-[C^[lbg[T[o[]Ɏw肷閼OłB ɖOǂmF@܂B

[MobŃR}hvvgɓ܂B
telnet R}hSMTPT[oƃ|[gԍQTŎs܂B
> telnet server 25
Ŏ̂悤ȉԂĂΐT[ołB
220 xxxxxxxxxxxxxxxxxx ESMTP Sendmail 8.8.7/xxxxx ready at Sat, 29 Nov 1997
10:21:26 +0900

SMTPRlNVؒfɂ quit R}hł܂B
> quit


SendMail֐xł
SendMail֐ďoƃ[T[oɃ[f[^𑗐MI܂ő҂܂B
ɏЉSendMailEx֐g΂ɏ߂܂B SendMailEx֐́A[MʃvZXiBsendm.exejɔCĂƏI܂B SendMailEx֐gɂBsendm.exeWindowssystemfBNgɃRs[ĂKv܂B

Option Explicit
Private Declare Function SendMailEx Lib "bsmtp" _
      (szLogfile As String, szServer As String, szTo As String, _
       szFrom As String, szSubject As String, szBody As String, szFile As String) As String

Private Sub Form_Load()
Dim ret As String
Dim szLogfile As String
Dim szServer As String, szTo As String, szFrom As String
Dim szSubject As String, szBody As String, szFile As String

' [MʂL^t@Cw肵܂B
szLogfile = "c:\log.txt" 
szServer = "your smtp"   ' SMTPT[o
                         '^uŋ؂ă|[gԍwł܂B
szTo = "who@who.com"     ' 
szFrom = "my@my.com"     ' M
szSubject = "͂߂܂"     ' 
szBody = "ɂ́B" & vbCrLf & "悤Ȃ"   ' {
szFile = "c:\a1.gif" & vbTab & "c:\a2.jpeg" ' t@CQ

ret = SendMailEx(szLogfile,szServer, szTo, szFrom, szSubject, szBody, szFile)

' p[^G[̂Ƃ́A߂lɃG[bZ[WԂ܂B
If Len(ret) <> 0 Then
   msgbox "G[" & ret
End If

End Sub


[M
[MɂRcvMail֐g܂BRcvMail֐Ń[{bNX烁[oĂ݂܂傤B

Option Explicit
Private Declare Function RcvMail Lib "bsmtp" _
      (szServer As String, szUser As String, szPass As String, _
      szCommand As String, szDir As String) As Variant

Private Sub Form_Load()
Dim szServer As String, szUser As String, szPass As String
Dim szCommand As String, szDir As String
Dim ar As Variant, v As Variant

szServer = "your pop3 server"  'SMTPT[oƓł悢B
                               '^uŋ؂ă|[gԍwł܂B
szUser = "your-name"  '[AJEg
szPass = "pass"       'pX[h
      2000/05/20 APOPT|[g
      APOP F؂ɂ́ApX[h̑O "a" ܂ "A"  P
      uN܂B
      "a xxxx" : T[oAPOP ΉȂʏUSER/PASS ܂B
      "A xxxx" : T[oAPOP ΉȂG[ɂȂ܂B
szCommand = "SAVE 1-3"  'R}h@[̂PڂRڂ܂łM
szDir = "c:\maildata" 'M[ۑfBNg

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

'߂lԂϐ́AVariant^Cvw肷邱ƁB
'M[PʂƂɃt@C쐬܂B
'[ɓYtꂽt@ĆA{ƋɂP̃t@CɊ܂܂܂B
'ReadMail֐œYtt@Co܂B
If IsArray(ar) Then   'ISAVER}h̖߂ĺAzɂȂ܂B 
   For Each v In ar
    Debug.Print v     '[f[^ۑꂽt@CtpXŖ߂܂B 
                      '̃t@CReadMail̃p[^Ƃēn܂B 
   Next
Else
  Debug.Print ar      'G[́AzłȂbZ[W߂܂B
End If

End Sub

R}h́Â悤Ɏw肵܂B
@STAT ...... [{bNXɓĂ郁[ƑoCĝ݂Ԃ܂
@LIST [n[-n2]] ...... [SubjectAFromADatewb_[̓ê݂
      @      Ԃ܂B͈͂wł܂B
@SAVE n[-n2] .... nԖڂ̃[M܂B͈͂wł܂B
@SAVD n[-n2] .... nԖڂ̃[MAT[õ[{bNX
    @        폜܂B͈͂wł܂B
@SAVEALL ... SẴ[M܂
@SAVEALLD .. SẴ[MAT[õ[{bNX
  @          폜܂
@DELE n[-n2] .... nԖڂ̃[[{bNX폜܂B
@@@@@@@͈͂wł܂B

RcvMail֐̖߂ĺAVariant^CvŎw肵܂BɏIƂ
zŒlԂ܂BG[ꍇ́AzԂ܂B
ze̓R}hɂĎ̂悤ɂȂ܂B
@STAT - [ƑoCgBFoutput(0) -> 2 4011
@LIST - ^uŋ؂ꂽSubjectAFromADatewb_[̓e
@Foutput(0) -> ɂ\txxxx@xxxx.xxx\t1998/09/15 11:11:30
@    output(1) -> ɂ2\txxxx@xxxx.xxx\t1998/09/15 12:11:30
@SAVE/SAVED/SAVEALL/SAVEALLD - M[ۑt@CB
  DELE - bZ[WԂ܂B
@F"3 message(s) deleted"

[ۑt@C̓éARFC822^Cv̌`łB
Ytt@Ct@CɊ܂܂Ă܂B
RFC822^Cṽt@CǂŃwb_[{AYtt@Co肷ɂ
ɐReadMail֐g܂B


[̎MԂm肽
[MԂmɂRcvMail2֐g܂BRcvMail2֐ŃR[obN֐w肷ƎM̃[ƂɎMoCgʒm܂BR[obN֐Ń[̎MLZ邱Ƃł܂B

Option Explicit
Private Declare Function RcvMail2 Lib "bsmtp" _
      (szServer As String, szUser As String, szPass As String, _
      szCommand As String, szDir As String, callback As Long) As Variant

Private Sub Form_Load()
Dim szServer As String, szUser As String, szPass As String
Dim szCommand As String, szDir As String
Dim ar As Variant, v As Variant

szServer = "your pop3 server"  'SMTPT[oƓł悢B
szUser = "your-name"  '[AJEg
szPass = "pass"       'pX[h
szCommand = "SAVE 1-3"  'R}h@[̂PڂRڂ܂łM
szDir = "c:\maildata" 'M[ۑfBNg

ar = RcvMail2(szServer, szUser, szPass, szCommand, szDir, AddressOf RcvMailCallBack)

End Sub

' R[obN֐́AW[ɔzu邱
Public Function RcvMailCallBack(ByVal item As Long, ByVal totlen As Long) As Long
    Debug.Print item     ' M
    Debug.Print totlen   ' MoCg
    RcvMailCallBack = 0  ' LZƂ ߂l 1 w
End Function

p[^߂ĺARcvMail֐ƓłB
R[obN֐LɂȂ̂́ASAVE ñR}ĥ݂łB
@SAVE n[-n2] .... nԖڂ̃[M܂B͈͂wł܂B
@SAVD n[-n2] .... nԖڂ̃[MAT[õ[{bNX
    @        폜܂B͈͂wł܂B
@SAVEALL ... SẴ[M܂
@SAVEALLD .. SẴ[MAT[õ[{bNX
  @          폜܂

̑ LIST R}hȂǂł́AR[obN֐̌ďo͍s܂B


ReadMail֐gă[̓eǂ
RcvMail֐Ń[{bNXo[ǂނɂ́AReadMail֐g܂B

Option Explicit
Private Declare Function ReadMail Lib "bsmtp" _
      (szFilename As String, szPara As String, szDir As String) As Variant

Private Sub Form_Load()
Dim szFilename As String, szPara As String, szDir As String
Dim retv As Variant, v As Variant

szFilename = ar(0)  ' t@CɂRcvMail̖߂l̔z񂩂t@Cݒ
szDir = "c:\mail"   ' Ytt@CۑfBNg
szPara = "subject:from:date:"  ' wb_[̎w
                               ' nofile: ƂƓYtt@Cۑ܂B

retv = ReadMail(szFilename,szPara,szDir)

If IsArray(retv) Then
   For Each v In retv
    Debug.Print v
   Next
Else
  Debug.Print retv
End If
End SUb

ReadMail֐́AǍ񂾃[̓ezŕԂ܂B
͂ƂȂt@ĆARcvMailō쐬ꂽt@Cw肵܂B
wb_[A{AYtt@C̏Ԃɐݒ肳܂B
G[ꍇ́AzԂ܂B
Foutput(0) -> To: xxxx@xxxx.xxx
    output(1) -> From: who@who.com
    output(2) -> Date: 1998/09/15 12:30:31
    output(3) -> .....
    output(4) -> Body: {
    output(5) -> File: t@CP
    output(6) -> File: t@CQ


SortMail֐gă[̓e\[g
SortMail֐g΁@RcvMail֐ŕۑ[\[gIł܂B

Option Explicit
Private Declare Function SortMail Lib "bsmtp" _
      (szDir As String, szHeader As String, opt As Long, _
       szFilter As String,delflag As Long) As Variant

Private Sub Form_Load()
Dim szDir As String, szHeader As String, opt As Long
Dim szFilter As String, delflag As Long
Dim retv As Variant, v As Variant

szDir = "c:\mail"   ' [t@C̃fBNg
szFilter = "date:"  ' \[gwb_[̎w
opt = 1             ' t\[g
szFilter = "from:=babaq" ' M babaq 
delflag = 0         ' 폜Ȃ

retv = SortMail(szDir,szHeader,opt,szFilter,delflag)

If IsArray(retv) Then
   For Each v In retv
    Debug.Print v
   Next
Else
  Debug.Print retv
End If
End Sub

szDir    : [t@C̃fBNgB
szHeader : \[gΏۂ̃wb_B\[gȂꍇiI폜̂݁j́A""B
               * ő̖g܂B
               F
               "From:"    - MŃ\[g
               "Date:"    - MtŃ\[g
               "Subject:" - Ń\[g
               "X-Mail*"  - X-Mailer ܂ X-Mail-Agent wb_Ń\[gB
opt       : \[gIvV𐔎ŎwBftHgĺA0B
               0 - \[g
               1 - t\[g
               2 - 啶
szFilter  : IIvVBftHǵA"" łׂđI܂B
               wb_ +  + Ŏw肵܂B
               wb_́A*: ő̎wł܂B
               ́A啶𖳎܂B
               w肵ȂƁAwb_݂邵ȂőIł܂B
               {("Body:")Ytt@C("File:")w\B
               :@= 㑱̕܂ނ̂I
                      ! 㑱̕܂܂Ȃ̂I
               F
               "From:=babaq"   - Mbabaq ܂ރ[
               "To:!hoge"      -  hoge ܂܂Ȃ[
               "Body:=babaq"   - { babaq ܂ރ[
               "References:="  - References wb_܂ރ[
               "References:!"  - References wb_܂܂Ȃ[
               "X-Mail*:=outlook"   - Microsoft OutLook őM[
                                      X-Mailer ܂ X-Mail-Agent: wb_Y܂B
delflag    : 폜IvVBIIvVƋɎg܂BftHǵA0B
               0 - 폜܂B
               1 - IɈv̂폜܂B
outarray   : \[gi邢͑IA폜jꂽt@CzŕԂ܂B
                  G[Y郁[t@CȂƂ͔złȂ񂪕Ԃ܂B

gpF
Dim dirx As String, outarray As Variant
dirx = "d:\mail" 
outarray = SortMail(dirx,"date:",1,"",0)  ' ŐVt̏Ƀ\[g
' Ât̏Ƀ\[gBFromwb_ hoge ܂܂Ă郁[̂
outarray = SortMail(dirx,"date:",0,"from:==hoge",0)
' Fromwb_ hoge ܂܂Ă郁[̂ݍ폜
outarray = SortMail(dirx,"",0,"from:==hoge",1)
' Ytt@C郁[̂ݍ폜
outarray = SortMail(dirx,"",0,"File:=",1)
' BeckyőMꂽ[̂ݎo
outarray = SortMail(dirx,"",0,"X-Mailer:=becky",0)



K\gĂ݂
K\́Ap^[Ƃď邱Ƃł܂BłBREGEXP DLL񋟂Match/MatchEx/Replace/Translate/Split֐Љ܂B͂߂ɁABREGEXP.DLLWindowssystemfBNgVBAvP[VufBNgɃRs[܂B

Private Declare Function Match Lib "bregexp" _
      (szRegstr As String, szTarget As String) As String

Private Declare Function MatchEx Lib "bregexp" _
      (szRegstr As String, szTarget As String, mode As Long) As Variant

Private Declare Function Replace Lib "bregexp" _
      (szRegstr As String, szTarget As String) As String

Private Declare Function Translate Lib "bregexp" _
      (szRegstr As String, szTarget As String, ret As String) As Long

Private Declare Function Split Lib "bregexp" _
      (szRegstr As String, szTarget As String, limit As Long) As Variant



'Match
' Match֐́Ap^[}b`ŕ񌟍sȂA"1" ܂͋U ("0") Ԃ܂B
' O[v^"()"gꍇ́A}b`Ԃ܂B
' szRegstr : p^[B
' szTarget : ΏەB
' ߂l   : "1"܂"0"܂̓}b`B
' p^[́Â悤Ɏw肵܂Bp^[̏ڍׂ́APerl̃}jAQƁB
'  /PATTERN/gik
'       g   O[oɃ}b`A܂AׂĂTo
'       i   啶AʂȂ
'       k   {B{VOƂďȂB
'       m   𕡐sƂĈB
'
ret = Match("/\d{3}/", szTarget)
If ret then
  'R܂܂Ă
End If
' AĂR̐o
ret = Match("m/(\d{3})/", szTarget)
'
'
'MatchEx
' MatchEx֐́Ap^[}b`̊głłBK\iPerl  $1 $2 ɑΉj
' ׂẴ}b`' Ԃ܂BO[v^"()"́A}b`L܂B
' szRegstr : p^[B
' szTarget : ΏەB
' mode     : }b`[h𐔎Ŏw肵܂B
'            0 : K\[h
'            1 : ׂẴ}b`Ԃ܂
' ߂l   : }b`ʂzŕԂ܂B
'          K\[hF
'          out(0) : }b`񂻂̂́BPerl ł $& B
'          out(1) : }b`̑O̕BPerl ł $` B 
'          out(2) : }b`̌̕BPerl ł $' B
'          out(3) : P̕BPerl ł $1 B
'          out(4) : Q̕BPerl ł $2 B
'          out(n) : ̕BPerl ł $n B
'          ׂẴ}b`F
'          out(0) : }b`PB
'          out(1) : }b`QB
'          out(2) : }b`RB
'          out(n) : }b`񂎁B
'
'
ret = MatchEx("/\d{3}/", szTarget,1)  ' ׂĂ̂R̐߂
If IsArray(ret) then   ' ẑƂA}b`
   Dim v As Variant
   For Each v In ret
    Debug.Print v
   Next
End If
'
'
'Replace
' Replace֐́A񒆂Ńp^[A΁AueLXgŒu
' Ԃ܂B
' szRegstr : p^[B
' szTarget : ΏەB
' ߂l   : u̕B
' p^[́Â悤Ɏw肵܂Bp^[̏ڍׂ́APerl̃}jAQƁB
'   s/PATTERN/REPLACEMENT/gikm
'
' ׂxɕύXB
ret = Replace("s/\d/x/g", szTarget)
'
' Perl̃}jAɏoĂŏ 2 ւBȂ̈Ӗ̂ł傤i΁j
ret = Replace("s/^([^ ]*) *([^ ]*)/$2 $1/",szTarget)
'
'
'Translate
' Translate֐́AXg (SEARCHLIST) Ɋ܂܂镶AΉuXg
' (REPLACEMENTLIST) ̕ɕϊ܂B܂Au܂͍폜sȂꂽAԂ܂B
' szRegstr : p^[B
' szTarget : ΏەB
' ret      : u̕B
' ߂l   : B
' p^[́Â悤Ɏw肵܂Bp^[̏ڍׂ́APerl̃}jAQƁB
'     tr/SEARCHLIST/REPLACEMENTLIST/cds
'
'        IvVɂ́A
'          c   SEARCHLIST Wɂ
'          d   uȂ폜
'          s   uꂽdȂƂɈk
'          k   {B{VOƂďȂB
'
' 啶ɕύXB
Dim ctr as Long
ctr = Translate("tr/a-z/A-Z/", szTarget, ret)
'
'
'Split
' Split֐   𕶎̔zɕāAԂ܂B
' szRegstr : p^[BMatch֐ƓB
' szTarget : ΏەB
' limit    : z񐔂̐lB0w肷ƖB
' ߂l   : zB
Dim retv as Variant,v as Variant
retv = Split("/\d/k", "5,4,6,c", 30)
If IsArray(retv) Then
   For Each v In retv
    
    Debug.Print v
   Next
Else
  Debug.Print retv
End If



vOR[ĥgp̒
vOR[hgĔQɊւẮA؂̐ӔC𕉂܂B
gpAzzɐ͂܂BRɂgB
̕ۏ؂͂܂B
mFnŕAWindows NT 4.0 Windows 95/98/Me/XP/2000݂̂łB

