⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mailmessage.cpp

📁 EMail VC++程序开发
💻 CPP
字号:
// MailMessage.cpp: implementation of the CMailMessage class.
// 

#include "stdafx.h"
#include "MailMessage.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMailMessage::CMailMessage()
{
	SetCharsPerLine( 76 );
}

CMailMessage::~CMailMessage()
{

}

BOOL CMailMessage::AddRecipient(LPCTSTR szEmailAddress,LPCTSTR szFriendName,RECIPIENTS_TYPE type)
{
	if (szEmailAddress == NULL || szFriendName == NULL)
		return FALSE;

	CRecipient to;
	to.m_sEmailAddress = szEmailAddress;
	to.m_sFriendName = szFriendName;

	// 根据收信人的性质分类存放
    switch (type)
	{
    case TO: 
		// 处理普通的收信人地址
		m_Recipients.Add(to);
		break;
    case CC:
		// 处理抄送的收信人地址
		m_CCRecipients.Add(to);
		break;
    case BCC:
		// 处理暗送的收信人地址
		m_BCCRecipients.Add(to);
		break;
    }

	return TRUE;
}

BOOL CMailMessage::GetRecipient(CString & sEmailAddress, CString & sFriendName, int nIndex, RECIPIENTS_TYPE type /* <JFO> */)
{
	CRecipient to;
	if( nIndex < 0 || nIndex > m_Recipients.GetUpperBound() )
		return FALSE;

   {
      switch(type)
      {
         case TO:  to = m_Recipients[ nIndex ];    break;
         case CC:  to = m_CCRecipients[ nIndex ];  break;
         case BCC: to = m_BCCRecipients[ nIndex ]; break;
      }
   }


	sEmailAddress = to.m_sEmailAddress;
	sFriendName = to.m_sFriendName;

	return TRUE;
}

int CMailMessage::GetNumRecipients(RECIPIENTS_TYPE type /* <JFO> */)
{
      int number = 0;

      switch(type)
      {
         case TO:  number = m_Recipients.GetSize();    break;
         case CC:  number = m_CCRecipients.GetSize();  break;
         case BCC: number = m_BCCRecipients.GetSize(); break;
      }

      return number;
}

BOOL CMailMessage::AddMultipleRecipients(LPCTSTR szRecipients,RECIPIENTS_TYPE type)
{
	TCHAR *pBuf;
	UINT nPos,nStart,nLength;
	CString strTemp,strEmail,strFriend;
	int nTemp,nMark;

	if (szRecipients == NULL )
		return FALSE;
	
	// 分析并添加收信人
	nLength = strlen( szRecipients );
	pBuf = new TCHAR[nLength + 1];
	// 复制传入的参数,处理这个拷贝,而不是参数本身
	strcpy(pBuf,szRecipients);
	for (nPos = 0,nStart = 0;nPos <= nLength;nPos++)
	{
		if (pBuf[nPos] == ';' || !pBuf[nPos])
		{
			// 提取用;分开的子串
			pBuf[nPos] = '\0';
			strTemp = &pBuf[nStart];

			// 将名字和邮件地址分开
			nTemp = strTemp.Find('<');
			if (nTemp >= 0)
			{
				strFriend = strTemp.Left(nTemp);
				nMark = strTemp.Find('>');
				if(nMark < nTemp)
				{
					delete[] pBuf;
					return FALSE;
				}
				if (nMark > -1)
					nMark = strTemp.GetLength() - 1;
				strEmail = strTemp.Mid(nTemp + 1,nMark - (nTemp + 1));
			}
			else
			{
				strEmail = strTemp;
				strFriend = _T( "" );
			}

			// 将分析的收信人地址加到记录中
			AddRecipient(strEmail,strFriend,type);
			nStart = nPos + 1;
		}
	}
	delete[] pBuf;
	return TRUE;
}

void CMailMessage::FormatMessage()
{
	start_header();
	prepare_header();
	end_header();
	prepare_body();
}

void CMailMessage::SetCharsPerLine(UINT nCharsPerLine)
{
	m_nCharsPerLine = nCharsPerLine;
}	

UINT CMailMessage::GetCharsPerLine()
{
	return m_nCharsPerLine;
}

// 创建邮件头
void CMailMessage::prepare_header()
{
   
	CString strTemp = _T("");

	// 发信人地址部分
	strTemp = _T("From: ") + m_sFrom;
	add_header_line((LPCTSTR)strTemp);

	// 收信人地址部分
	strTemp = _T("To: ");
	CString strEmail = _T( "" );
	CString strFriend = _T( "" );

	// 逐个处理收信人
	int nCount = GetNumRecipients();
	for(int i = 0;i < nCount;i++)
	{
		GetRecipient(strEmail,strFriend,i);
		strTemp += (i > 0 ? _T( "," ) : _T(""));
		strTemp += strFriend;
		strTemp += _T("<");
		strTemp += strEmail;
		strTemp += _T(">");
	}
	add_header_line((LPCTSTR)strTemp);


	// 处理抄送部分
	{
		strTemp = _T("Cc: ");
		CString strEmail = _T("");
		CString strFriend = _T("");
		for(int i = 0; i < GetNumRecipients(CC); i++)
		{
			GetRecipient(strEmail,strFriend,i,CC);
			strTemp += (i > 0 ? _T(",") : _T("") );
			strTemp += strFriend;
			strTemp += _T("<");
			strTemp += strEmail;
			strTemp += _T(">");
		}
		add_header_line((LPCTSTR)strTemp);
	}

	// 处理日期,日期的格式为Fri, 21 Dec 01 21:51:30
	m_tDateTime = m_tDateTime.GetCurrentTime();
	strTemp = _T("Date: ");
	strTemp += m_tDateTime.Format("%a, %d %b %y %H:%M:%S %Z");
	add_header_line((LPCTSTR)strTemp);

	// 处理主题部分
	strTemp = _T("Subject: ") + m_sSubject;
	add_header_line((LPCTSTR)strTemp);
}

void CMailMessage::prepare_body()
{
	// 加上必要的结束符CR/LF
	if( m_sBody.Right(2) != _T("\r\n"))
		m_sBody += _T("\r\n");

}

void CMailMessage::start_header()
{
	m_sHeader = _T("");
}

void CMailMessage::end_header()
{
	m_sHeader += _T( "\r\n" );
}

void CMailMessage::add_header_line(LPCTSTR szHeaderLine)
{
	CString sTemp;
	sTemp.Format( _T( "%s\r\n" ), szHeaderLine );
	m_sHeader += sTemp;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -