📄 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 + -