uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Registry, MAPI; //←要追加 //======================================================================== // 機能:MAPIの有無チェック By ボーランド技術部 有澤 //======================================================================== function CheckMAPI: boolean; var R : TRegistry; begin Result := False; if Win32MajorVersion>=4 then begin R := TRegistry.Create; try R.RootKey := HKEY_LOCAL_MACHINE; R.OpenKey('SOFTWARE\Microsoft\Windows Messaging Subsystem',False); if R.ReadString('MAPI') = '1' then Result := True; R.CloseKey; finally R.Free; end; end else if GetProfileInt('Mail', 'MAPI', 0) = 1 then Result := True; end; //====================================================================== // 機能:添付ファイル付きメール送信(受信者、添付ファイル数:各1件) //====================================================================== function SendMailProc( Address,Subject,MailText,FileName:string ): boolean; const MaxRecip = 20; // 最大受信者数(TO,CC,BCC合計) MaxFiles = 10; // 最大添付ファイル数 var MapiMessage: TMapiMessage; FMapiRecipDescR: array[0..MaxRecip-1] of TMapiRecipDesc; // 受信者 FMapiFileDesc : array[0..MaxFiles-1] of TMapiFileDesc; // 添付ファイル Flag: FLAGS; ii: integer; begin ii := 0; // 送信先の記述 with FMapiRecipDescR[ii] do begin ulReserved := 0; ulRecipClass := MAPI_TO; // 受信者は TO: lpszName := PChar(Address); // 受信者名 lpszAddress := nil; ulEIDSize := 0; lpEntryID := nil; end; // 添付ファイルの記述 with FMapiFileDesc[ii] do begin ulReserved := 0; flFlags := 0; nPosition := ii; lpszPathName := PChar(FileName); lpszFileName := nil; lpFileType := nil; end; // 送信データの編集 with MapiMessage do begin ulReserved := 0; lpszSubject := PChar(Subject); //件名 lpszNoteText := PChar(MailText); //本文 lpszMessageType := nil; lpszDateReceived := PChar(FormatDateTime('yyyy,mm,dd, hh:mm',Now)); lpszConversationID := nil; flFlags := 0; //送信オプション設定 lpOriginator := nil; //送信者 nRecipCount := 1; //受信者の件数 lpRecips := @FMapiRecipDescR; //受信者 nFileCount := 1; //添付ファイルの件数 lpFiles := @FMapiFileDesc; //添付ファイル end; Flag := 0; Flag := Flag or MAPI_DIALOG; {送信前にダイアログを表示する時} Result := MapiSendMail(0, Application.Handle, MapiMessage,Flag,0)=0; end; << 使用例 >> procedure TfmMain.Button1Click(Sender: TObject); var Address, Subject, MailText, FileName: string; rc: boolean; begin if CheckMAPI() then begin Address := 'o.m.s@nifty.com'; Subject := 'メールの件名(MAPISendMail)'; MailText := 'メールの本文です。'#13#10#13#10'以上'; FileName := ParamStr(0); rc := SendMailProc( Address,Subject,MailText,FileName ); if rc=FALSE then MessageDlg( '送信エラー',mtError,[mbOK],0 ); end else begin MessageDlg( 'メール送信環境が有りません。',mtError,[mbOK],0 ); end; end; 受信者(送信先)と添付ファイル数は各1件で作成しているので、用途に応じて修正が 必要です。 [動作確認の結果] ・Outlook Express 6 問題なし ・Windowsメール(Vista) 問題なし ・Netscape Messenger 4.7 本文の改行が無効になる ・Netscape Messenger 7 本文の改行と送信先が無効になる |
・インターネット上の情報や書籍の内容を一部参考に作成してます。 ・コーディング内容は著作権フリーですが、使用する場合は自己責任にてお願いします。 ・記述内容に問題点や改善点がありましたらこちらまでお願いします。 |