?? mailmessage.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 + -