Work With E-Mail Easily Using the Mailman Class | CodeGuru

Work With E-Mail Easily Using the Mailman Class

Environment: VC6 SP4, NT4 SP3, winCE 2.0 Introduction MailMan is a simple C++ class that makes the task of reading and sending e-mails easy. This class uses the Messaging Application Programming Interface (MAPI) to accomplish its functionalities. I have seen code listings regarding sending e-mails or reading e-mails in different bits and pieces on this […]

Written By
CodeGuru Staff
CodeGuru Staff
Jun 12, 2002
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: VC6 SP4, NT4 SP3, winCE 2.0

Introduction

MailMan is a simple C++ class that makes the task of reading and sending e-mails easy. This class uses the Messaging Application Programming Interface (MAPI) to accomplish its functionalities.

I have seen code listings regarding sending e-mails or reading e-mails in different bits and pieces on this site and on codeproject, but I did not find them as a plug-and-play kind of code. Then I thought of creating a class to encapsulate the entire functionality in one piece.

Requirement

For sending e-mails, you do not need to have Microsoft Outlook (or any other e-mail client) open, but for receiving it you do. (Some have told me you don’t, but experience has shown me otherwise…).

If you happen to be one who disagrees, please e-mail me.

Methods

This class has the following members:

Method Description
bool LogonMail() ; This is the first thing you should do after instantiating the object.
Int ReadMail(); This should tell you if there was any UNREAD E-MAIL found in the INBOX folder.
If any e-mail was found, the content can be accessed from the mailbox structure of this class.
See the code attached
bool SendMail(
CString name,
CString address,
CString Subject,
CString Text);
This allows you to send e-mails and not only to one but to as many as you would like if the addresses are delimited by semicolons.
void LogoffMail(); This is called before you terminate your application.
Advertisement

Example

First of all, you should have a pointer to CMailMan:

CMailMan *mail=;

This can be defined in the header file of your class.

You then need to allocate it to an instance of this class:

mail = new CMailMan();

// Initialise it

if(mail->LogonMail() = false)
{

// Error

}

How to read e-mail:

switch (mail->ReadMail())
{
  case GOTMAIL:
  // If you have any UNREAD e-mail in your INBOX, it will be fetched here
    x.Format(_T("Name:%s Date:%s Address:%s notetext:%s Subject:%s"),
      mail->mailbox.name,
      mail->mailbox.date,
      mail->mailbox.address,
      mail->mailbox.notetext,
      mail->mailbox.subject);
    break;

  case FAILMAIL:
  // "Reading Failed – Boy, you got a problem";
    break;

  case NOMAIL:
  //"No mail... – No worries!";
    break;

}

How to send e-mail:

mail->SendMail("Saeed","GWBush@usa.com;Osma@Kabul.com",
  "Stop fighting. Make Love, not war.");

How to log off from your e-mail:

//Log off to avoid memory leakage

if(mail)
{
mail->LogoffMail();
delete mail;
}

Piece of cake? You bet.

Demo:

Follow the steps as numbered.

  1. Enter your e-mail address in the edit control. This is the account that will be used for testing.
  2. Click the send button a few times (say 2).
  3. Click the Send/Receive message button of Microsoft Outlook instead of waiting for Outlook to do its checking every few minutes. DO NOT OPEN YOUR E-MAILS in Outlook; the messages will be marked as READ and that is not what we want for this test.
    After you have fetched the e-mail messages sent by this application to your INBOX, you can proceed.
  4. Click the Read button – At every click, one UNREAD e-mail is read and displayed. Use the scroll slider to view.

Although I have developed this code on Windows 2000 only, I don’t anticipate any problems to pop up on the NT or XP platforms. However, if you run into any problems, please contact me in a civilized manner with a clear explanation of what the problem is.

Share what you know and ask what you don’t!

// MailMan.h: interface for the CMailMan class.
//
/////////////////////////////////////////////////////////////////
//need to include mapi headers files mapix,mapiutil,
//mapitags,mapi (.h)
#if !defined(AFX_MAILMAN_H__99148C57_15FD_4D06_9D9E_5A66AD50E95A__INCLUDED_)
#define AFX_MAILMAN_H__99148C57_15FD_4D06_9D9E_5A66AD50E95A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
enum status { OK , CANT_LOGON , CANT_LOAD};
enum readstatus { GOTMAIL,NOMAIL ,FAILMAIL};
struct MailBox
{
  CString date;
  CString name;
  CString address;
  CString subject;
  CString notetext;
  int flag;
};
class CMailMan
{
public:
  CMailMan();
  virtual ~CMailMan();
  int ReadMail();
  int LogonMail() ;
  void LogoffMail();
  bool SendMail( CString name,
                 CString address,
                 CString Subject,
                 CString Text);
  MailBox      mailbox;
protected:
  HINSTANCE GetHandle();
  HINSTANCE hMAPILib;
public:
  LHANDLE           lhSession;
  LPMAPILOGON       lpfnMAPILogon;
  LPMAPIFINDNEXT    lpfnMAPIFindNext;
  LPMAPIREADMAIL    lpfnMAPIReadMail;
  LPMAPILOGOFF      lpfnMAPILogoff;
  LPMAPIDETAILS     lpfnMAPIDetails;
  LPMAPIFREEBUFFER  lpfnMAPIFreeBuffer;
  LPMAPISENDMAIL    lpfnMAPISendMail;
};
#endif
// !defined(AFX_MAILMAN_H__99148C57_15FD_4D06_9D9E_5A66AD50E95A__INCLUDED_)
CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.