Các hàm và cấu trúc dữ liệu của Simple MAPI API (SMAPI) cho phép chúng ta thêm các dịch vụ MAPI cho các ứng dụng Windows của mình . Mặc dù tập các SMAPI là khá nhỏ , nhưng nó đủ dùng cho các ứng dụng cần dịch vụ mail .
Đầu tiên chúng ta xét các cấu trúc dữ liệu của SMAPI .
SMAPI có ba cấu trúc dữ liệu chính :
MapiMessage
:
bao gồm các thông tin về gói thông
điệp gồm người tạo ra (originator)
, tiêu đề (subject) , văn bản (text)
, các người nhận (recipients) , và
các file ghép (attachements) .
MapiRecip
:
bao gồm các thông tin về thông điệp
hồi đáp gồm tên (name) , loại
địa chỉ (address type) , địa chỉ
(full address) , định danh (entry ID) .
MapiFile
:
bao gồm các thông tin về các file
đi kèm gồm tên file (display name) , hệ
điều hành (operating system) và vị
trí trong thông điệp .
Cấu trúc dữ liệu MapiMessage dùng chứa các thông tin hiển của thông điệp .
Sau đây là bảng mô tả các thành phần của MapiMessage
Table -1
|
Field |
Type |
Mô tả |
| Reserved | Long | Dành riêng cho tương lai . Có giá trị 0 |
| Subject | String | Tiêu đề của thông điệp , không dài hơn 256 ký tự |
| NoteText | String | Phần văn
bản của thông điệp
Mỗi dòng kết thúc bởi 0x0d0a (inbound message) Mỗi dòng kết thúc bởi 0x0d , hoặc 0x0a , hoặc 0x0d0a (outbound message) |
| MessageType | String | Nếu là
Interpersonal mail thì là string rỗng
String được xác định do ứng dụng ghi |
| DateReceived | String | Ngày nhận
, YYYY/MM/DD HH:MM
(giờ theo 24) |
| ConversationID | String | Xác định luồng đối thoại mà thông điệp này thuộc về . |
| Flags | Long | Mặt nạ
cờ . Thông thường là 0
. Tuy nhiên cũng có các cờ
được định nghĩa saün
như sau :
MAPI_RECEIPT_REQUESTED MAPI_SEND MAPI_UNREAD |
| RecipCount | Long | Số người nhận |
| FileCount | Long | Số file attach |
Sau đây là đoạn đặc tả MapiMessage trong MAPI.H
typedef struct {
ULONG ulReserved;
LPTSTR lpszSubject;
LPTSTR lpszNoteText;
LPTSTR lpszMessageType;
LPTSTR lpszDateReceived;
LPTSTR lpszConversationID;
FLAGS flFlags;
lpMapiRecipDesc lpOriginator;
ULONG nRecipCount;
lpMapiRecipDesc lpRecips;
ULONG nFileCount;
lpMapiFileDesc lpFiles;
} MapiMessage, FAR *lpMapiMessage;
Cấu trúc dữ liệu MapiRecip dùng chứa các thông tin quan trọng có liên quan đến người nhận thông điệp .
Sau đây là bảng mô tả các thành phần của MapiRecip
Table -2
|
Field |
Type |
Mô tả |
| Reserved | Long | Dành riêng cho tương lai . Có giá trị 0 |
| RecipClass | Long | Phân loại
người nhận
MAPI_TO : người nhận bản gốc MAPI_CC : người nhận bản copy (carbon copy) MAPI_BCC : người nhận bản blind copy (các ngưòi nhận khác không biết có người này cùng nhận bản copy) MAPI_ORG : người nhận cũng đồng thời là người gởi |
| Name | String | Tên người nhận |
| Address | String | Địa chỉ người nhận mà MAPI service provider cần gởi thông điệp tới . Dùng trong trường hợp địa chỉ chưa có trong address list . |
| EIDSize | Long | Kích thước (byte) của dữ liệu trong EntryID |
| EntryID | String | String nhị phân mà MAPI dùng xác định người nhận |
Sau đây là đặc tả MapiRecipDesc trong MAPI.H
typedef struct {
ULONG ulReserved
ULONG ulRecipClass;
LPTSTR lpszName;
LPTSTR lpszAddress;
ULONG ulEIDSize;
LPVOID lpEntryID;
} MapiRecipDesc, FAR *lpMapiRecipDesc;
Cấu trúc MapiFile chứa các thông tin về các file đi kèm trong thông điệp .
Table -3
|
Field |
Type |
Mô tả |
| Reserved | Long | Dành riêng cho tương lai . Có giá trị 0 |
| Flags | Long | Mặt nạ
cờ . Thông thường là 0
. Tuy nhiên cũng có các cờ
được định nghĩa saün
như sau :
MAPI_OLE : nếu attachement là đối tượng OLE MAPI_OLE_STATIC : nếu attachement là đối tượng OLE static hơn là embedded |
| Position | Long | Số nguyên xác định vị trí xuất hiện của attachement trong thông điệp . Nói cách khác attachement thay thế vị trí xuất hiện của NoteText , nên ta có thể viết NoteText[Position]. |
| PathName | String | Đường dẫn đầy đủ chỉ tới file attach . |
| FileName | String | Tên file sẽ được hiển thị cho người nhận. Tên này có thể khác với PathName ở trên . Nếu FileName rỗng thì PathName sẽ được thay thế . Trưởng hợp attachement là OLE object thì FileName bao gồm class name nữa (ví dụ Microsoft Excel Worksheet) |
| FileType | Long | Dùng để xác định loại của file attach . Giá trị rỗng cho biết file không xác định của một hệ điều hành không xác định . |
Sau đây là đặc tả MapiFileDesc trong MAPI.H
typedef struct {
ULONG ulReserved;
ULONG flFlags;
ULONG nPosition;
LPTSTR lpszPathName;
LPTSTR lpszFileName;
LPVOID lpFileType;
} MapiFileDesc, FAR *lpMapiFileDesc;