亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? smtp.cpp

?? vc++網絡編程教程的源碼。可能對使用vc網絡編程的有用。
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
				bSuccess = TRUE;
				pszBody = NULL;
				nBodySize = 0;
			}
		}
		else
			TRACE(_T("No bodypart body text or filename specified!\n"));
	}
	else
	{
		//如果是文本內容
		if (m_bQuotedPrintable)
		{
			//形成發送體
			CString sBody = QuotedPrintableEncode(m_sText);
			nBodySize = _tcslen(sBody);
			pszBody = new char[nBodySize+1];
			strcpy(pszBody, T2A((LPTSTR) (LPCTSTR) sBody));
		}
		else
		{
			nBodySize = _tcslen(m_sText);
			pszBody = new char[nBodySize+1];
			strcpy(pszBody, T2A((LPTSTR) (LPCTSTR) m_sText));
		}
		bSuccess = TRUE;
	}
	return bSuccess;
}

BOOL CSMTPBodyPart::GetFooter(LPSTR& pszFooter, int& nFooterSize)
{
  //For correct operation of the T2A macro, see MFC Tech Note 59
  USES_CONVERSION;

  //Form the MIME footer
	CString sFooter;
  sFooter.Format(_T("\r\n--%s--"), m_sBoundary);
  nFooterSize = _tcslen(sFooter);
  pszFooter = new char[nFooterSize+1];
  strcpy(pszFooter, T2A((LPTSTR) (LPCTSTR) sFooter));

  return TRUE;  
}

int CSMTPBodyPart::GetNumberOfChildBodyParts() const
{
  return m_ChildBodyParts.GetSize();
}

int CSMTPBodyPart::AddChildBodyPart(CSMTPBodyPart& bodyPart)
{
  CSMTPBodyPart* pNewBodyPart = new CSMTPBodyPart(bodyPart);
  pNewBodyPart->m_pParentBodyPart = this;
  ASSERT(m_sContentType.GetLength()); 

  return m_ChildBodyParts.Add(pNewBodyPart);
}

void CSMTPBodyPart::RemoveChildBodyPart(int nIndex)
{
  CSMTPBodyPart* pBodyPart = m_ChildBodyParts.GetAt(nIndex);
  delete pBodyPart;
  m_ChildBodyParts.RemoveAt(nIndex);
}

CSMTPBodyPart* CSMTPBodyPart::GetChildBodyPart(int nIndex)
{
  return m_ChildBodyParts.GetAt(nIndex);
}

CSMTPBodyPart* CSMTPBodyPart::GetParentBodyPart()
{
  return m_pParentBodyPart;
}

void CSMTPBodyPart::FixSingleDot(CString& sBody)
{
  int nFind = sBody.Find(_T("\n."));
  if (nFind != -1)
  {
	  CString sLeft(sBody.Left(nFind+1));
	  CString sRight(sBody.Right(sBody.GetLength()-(nFind+1)));
	  FixSingleDot(sRight);
	  sBody = sLeft + _T(".") + sRight;
  }
}

CSMTPBodyPart* CSMTPBodyPart::FindFirstBodyPart(const CString sContentType)
{
  for (int i=0; i<m_ChildBodyParts.GetSize(); i++)
  {
    CSMTPBodyPart* pBodyPart = m_ChildBodyParts.GetAt(i);
    if (pBodyPart->m_sContentType == sContentType)
      return pBodyPart;
  }
  return NULL;
}



CSMTPMessage::CSMTPMessage() : m_sXMailer(_T("CSMTPConnection v2.17")), m_bMime(FALSE)
{
}

CSMTPMessage::~CSMTPMessage()
{
  //Free up the array memory
  for (int i=0; i<m_ToRecipients.GetSize(); i++)
    delete m_ToRecipients.GetAt(i);
  m_ToRecipients.RemoveAll();

  for (i=0; i<m_CCRecipients.GetSize(); i++)
    delete m_CCRecipients.GetAt(i);
  m_CCRecipients.RemoveAll();

  for (i=0; i<m_BCCRecipients.GetSize(); i++)
    delete m_BCCRecipients.GetAt(i);
  m_BCCRecipients.RemoveAll();
}

void CSMTPMessage::SetCharset(const CString& sCharset)
{
  m_RootPart.SetCharset(sCharset);
}

CString CSMTPMessage::GetCharset() const
{
  return m_RootPart.GetCharset();
}

int CSMTPMessage::GetNumberOfRecipients(RECIPIENT_TYPE RecipientType) const
{
  int nSize = 0;
  switch (RecipientType)
  {
    case TO:  nSize = m_ToRecipients.GetSize();  break;
    case CC:  nSize = m_CCRecipients.GetSize();  break;
    case BCC: nSize = m_BCCRecipients.GetSize(); break;
    default: ASSERT(FALSE);                      break;
  }

	return nSize;
}

int CSMTPMessage::AddRecipient(CSMTPAddress& recipient, RECIPIENT_TYPE RecipientType)
{
  int nIndex = -1;

  CSMTPAddress* pNewRecipient = new CSMTPAddress(recipient);

  switch (RecipientType)
  {
    case TO:  nIndex = m_ToRecipients.Add(pNewRecipient);  break;
    case CC:  nIndex = m_CCRecipients.Add(pNewRecipient);  break;
    case BCC: nIndex = m_BCCRecipients.Add(pNewRecipient); break;
    default: ASSERT(FALSE);                            break;
  }

  return nIndex;
}

void CSMTPMessage::RemoveRecipient(int nIndex, RECIPIENT_TYPE RecipientType)
{
  switch (RecipientType)
  {
    case TO:  
    {
      delete m_ToRecipients.GetAt(nIndex);
      m_ToRecipients.RemoveAt(nIndex);  
      break;
    }
    case CC:  
    {
      delete m_CCRecipients.GetAt(nIndex);
      m_CCRecipients.RemoveAt(nIndex);  
      break;
    }
    case BCC: 
    {
      delete m_BCCRecipients.GetAt(nIndex);
      m_BCCRecipients.RemoveAt(nIndex); 
      break;
    }
    default:  
    {
      ASSERT(FALSE);                    
      break;
    }
  }
}

CSMTPAddress* CSMTPMessage::GetRecipient(int nIndex, RECIPIENT_TYPE RecipientType)
{
  switch (RecipientType)
  {
    case TO:  return m_ToRecipients.GetAt(nIndex);   break;
    case CC:  return m_CCRecipients.GetAt(nIndex);   break;
    case BCC: return m_BCCRecipients.GetAt(nIndex);  break;
    default: ASSERT(FALSE); return (CSMTPAddress*) NULL; break;
  }
}

int CSMTPMessage::AddBodyPart(CSMTPBodyPart& Attachment)
{
	SetMime(TRUE); //Body parts implies Mime
	return m_RootPart.AddChildBodyPart(Attachment);
}

void CSMTPMessage::RemoveBodyPart(int nIndex)
{
	m_RootPart.RemoveChildBodyPart(nIndex);
}

CSMTPBodyPart* CSMTPMessage::GetBodyPart(int nIndex)
{
	return m_RootPart.GetChildBodyPart(nIndex);
}

int CSMTPMessage::GetNumberOfBodyParts() const
{
	return m_RootPart.GetNumberOfChildBodyParts();
}

void CSMTPMessage::AddCustomHeader(const CString& sHeader)
{
  m_CustomHeaders.Add(sHeader);
}

CString CSMTPMessage::GetCustomHeader(int nIndex)
{
  return m_CustomHeaders.GetAt(nIndex);
}

int CSMTPMessage::GetNumberOfCustomHeaders() const
{
  return m_CustomHeaders.GetSize();
}

void CSMTPMessage::RemoveCustomHeader(int nIndex)
{
  m_CustomHeaders.RemoveAt(nIndex);
}

CString CSMTPMessage::GetHeader()
{
  //Hive away the locale so that we can restore it later. We
  //require the English locale to ensure the date header is
  //formed correctly
  CString sOldLocale = _tsetlocale(LC_TIME, NULL);    
  _tsetlocale(LC_TIME, _T("english"));

  //Form the Timezone info which will form part of the Date header
  TIME_ZONE_INFORMATION tzi;
  int nTZBias;
  if (GetTimeZoneInformation(&tzi) == TIME_ZONE_ID_DAYLIGHT)
    nTZBias = tzi.Bias + tzi.DaylightBias;
  else
    nTZBias = tzi.Bias;
  CString sTZBias;
  sTZBias.Format(_T("%+.2d%.2d"), -nTZBias/60, nTZBias%60);

  //Create the "Date:" part of the header
  CTime now(CTime::GetCurrentTime());
  CString sDate(now.Format(_T("%a, %d %b %Y %H:%M:%S ")));
  sDate += sTZBias;

  //Create the "To:" part of the header
  CString sTo;
  for (int i=0; i<GetNumberOfRecipients(TO); i++)
  {
    CSMTPAddress* pRecipient = GetRecipient(i, TO);
    if (i)
 		  sTo += _T(",");
    ASSERT(pRecipient);
    sTo += pRecipient->GetRegularFormat();
  }

  //Create the "Cc:" part of the header
  CString sCc;
  for (i=0; i<GetNumberOfRecipients(CC); i++)
  {
    CSMTPAddress* pRecipient = GetRecipient(i, CC);
    if (i)
 		  sCc += _T(",");
    ASSERT(pRecipient);
    sCc += pRecipient->GetRegularFormat();
  }

  //No Bcc info added in header

  //Add the From and to fields
  CString sReply;
  sReply.Format(_T("From: %s\r\nTo: %s\r\n"),  HeaderEncode(m_From.GetRegularFormat()), HeaderEncode(sTo));
  CString sBuf(sReply);
  
  //Add the CC field if there is any
  if (sCc.GetLength())
  {
    sReply.Format(_T("Cc: %s\r\n"), HeaderEncode(sCc));
    sBuf += sReply;
  }

  //Add the subject, Date and X-Mailer fields
  sReply.Format(_T("Subject: %s\r\nDate: %s\r\nX-Mailer: %s\r\n"), HeaderEncode(m_sSubject), HeaderEncode(sDate), HeaderEncode(m_sXMailer));
  sBuf += sReply;

  //Add the Mime header if needed
  BOOL bHasChildParts = (m_RootPart.GetNumberOfChildBodyParts() != 0);
  if (bHasChildParts && m_bMime)
  {
    sReply.Format(_T("MIME-Version: 1.0\r\nContent-Type: %s; boundary=\"%s\"\r\n"), m_RootPart.GetContentType(), m_RootPart.GetBoundary());
    sBuf += sReply;
  }
  else if (!bHasChildParts && m_bMime)
  {
    sReply.Format(_T("MIME-Version: 1.0\r\nContent-Type: %s\r\n"), m_RootPart.GetContentType());
    sBuf += sReply;
  }
  sBuf += _T("Content-Transfer-Encoding: quoted-printable\r\n");


	//Add the optional Reply-To Field
	if (m_ReplyTo.m_sEmailAddress.GetLength())
	{
		CString sReply;
		sReply.Format(_T("Reply-To: %s\r\n"), m_ReplyTo.GetRegularFormat());
		sBuf += sReply;
	}

  //Add the custom headers
  int nCustomHeaders = m_CustomHeaders.GetSize();
  for (i=0; i<nCustomHeaders; i++)
  {
    CString sHeader = m_CustomHeaders.GetAt(i);
    sBuf += sHeader;
    
    //Add line separators for each header bar the final one
    if (i < (nCustomHeaders-1))
      sBuf += _T("\r\n");
  }

  //Add the line separator between the header and what will follow
  //i.e. the body
	sBuf += _T("\r\n");

  // restore original locale
  _tsetlocale(LC_TIME, sOldLocale);

	//Return the result
	return sBuf;
}

//Converts header text to its encoded form according to RFC 2047
CString CSMTPMessage::HeaderEncode(const CString& sText) const
{
  int nSize = sText.GetLength();

  //Determine if a translation is needed
  BOOL bTranslationNeeded = FALSE;
  for (int i=0; i<nSize && !bTranslationNeeded; i++)
  {
    BYTE c = (BYTE) sText[i];
    bTranslationNeeded = (c > 127);
  }

  CString sOut;
  if (bTranslationNeeded)
  {
    sOut.Format(_T("=?%s?q?"), m_RootPart.GetCharset());
    for (i=0; i<nSize; i++)
    {
      BYTE c = (BYTE) sText[i];
      if (c == ' ') // A space
        sOut += _T('_');
      else if ((c > 127) || (c == '=') || (c == '?') || (c == '_'))
      {
        //Must Quote the text
        sOut += _T('=');
        sOut += CSMTPBodyPart::HexDigit((c & 0xF0) >> 4);
        sOut += CSMTPBodyPart::HexDigit(c & 0x0F);
      }
      else
        sOut += TCHAR(c);
    }
    sOut += _T("?=");
  }
  else
  {
    //Just pass the text thro unmodified
    sOut = sText;
  }

  return sOut;
}

CSMTPAddressArray* CSMTPMessage::ParseMultipleRecipients(const CString& sRecipients)
{
	ASSERT(sRecipients.GetLength()); //An empty string is now allowed

  //What will be the return value
  CSMTPAddressArray* pRecipients = new CSMTPAddressArray;
	
	//Loop through the whole string, adding recipients as they are encountered
	int length = sRecipients.GetLength();
	TCHAR* buf = new TCHAR[length + 1];	// Allocate a work area (don't touch parameter itself)
	_tcscpy(buf, sRecipients);
	for (int pos=0, start=0; pos<=length; pos++)
	{
		//Valid separators between addresses are ',' or ';'
		if ((buf[pos] == _T(',')) || (buf[pos] == _T(';')) || (buf[pos] == 0))
		{
			buf[pos] = 0;	//Redundant when at the end of string, but who cares.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩高清不卡在线| 国产老妇另类xxxxx| xfplay精品久久| 99久久综合国产精品| 日韩一区精品字幕| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲国产经典视频| 91精品国产乱| 欧美在线一二三四区| 国产成人夜色高潮福利影视| 日日嗨av一区二区三区四区| 亚洲少妇中出一区| 国产午夜精品福利| 精品国产乱码久久久久久夜甘婷婷| 色就色 综合激情| 成人午夜碰碰视频| 国产一区二区中文字幕| 天涯成人国产亚洲精品一区av| 亚洲人吸女人奶水| 国产精品区一区二区三区| 精品国产网站在线观看| 欧美日韩国产免费一区二区| 91香蕉国产在线观看软件| 国产白丝精品91爽爽久久| 精品无码三级在线观看视频| 日韩精品一二三| 亚洲综合丁香婷婷六月香| 亚洲丝袜制服诱惑| 亚洲视频一区二区免费在线观看| 中文字幕国产一区二区| 日韩欧美在线影院| 日韩一级欧美一级| 欧美午夜一区二区三区免费大片| zzijzzij亚洲日本少妇熟睡| 不卡av电影在线播放| aaa亚洲精品| 99久久精品国产导航| 99久久精品国产毛片| 99久久久国产精品免费蜜臀| av成人动漫在线观看| 99久久久国产精品| 97se亚洲国产综合自在线| 99热在这里有精品免费| 一本一道久久a久久精品综合蜜臀| 成年人网站91| 色香色香欲天天天影视综合网| 色香蕉久久蜜桃| 欧美日韩高清影院| 日韩欧美成人激情| 久久久久久日产精品| 欧美激情艳妇裸体舞| 亚洲日本丝袜连裤袜办公室| 亚洲免费观看高清完整版在线| 国产精品第四页| 亚洲乱码精品一二三四区日韩在线| 一区二区三区四区亚洲| 亚洲永久免费av| 日韩成人免费看| 九一久久久久久| 波多野结衣一区二区三区| 一本大道久久a久久综合| 欧美日韩国产乱码电影| 日韩美一区二区三区| 国产亚洲美州欧州综合国| 中文字幕日韩精品一区| 樱桃国产成人精品视频| 男女男精品视频网| 成人综合日日夜夜| 欧美亚洲禁片免费| 欧美一级二级三级乱码| 国产女人aaa级久久久级| 亚洲特级片在线| 美国精品在线观看| aaa欧美色吧激情视频| 欧美日韩国产123区| 久久亚洲欧美国产精品乐播 | 中日韩av电影| 亚洲电影视频在线| 国产精品一区久久久久| 色欧美乱欧美15图片| 日韩精品专区在线影院重磅| 中文无字幕一区二区三区| 亚洲午夜私人影院| 国产精品77777竹菊影视小说| 在线视频一区二区三区| 久久综合色婷婷| 亚洲一区成人在线| 国产成人亚洲精品狼色在线| 欧美色窝79yyyycom| 国产亚洲精品久| 午夜视黄欧洲亚洲| 成人av免费在线播放| 日韩欧美一卡二卡| 亚洲欧美aⅴ...| 国产一区二区三区久久悠悠色av| 在线这里只有精品| 欧美韩日一区二区三区四区| 石原莉奈在线亚洲二区| 91热门视频在线观看| 精品国产一区二区三区不卡| 亚洲激情图片一区| 国产精品亚洲视频| 日韩一区二区三区观看| 一区二区三区在线观看视频| 国产69精品久久99不卡| 日韩欧美电影一区| 亚洲福利视频导航| 91免费观看国产| 亚洲国产岛国毛片在线| 免费成人av在线播放| 色成人在线视频| 日本一区二区免费在线观看视频| 日本欧美加勒比视频| 欧美在线观看视频一区二区三区| 国产精品美女久久久久aⅴ| 另类人妖一区二区av| 欧美日韩久久久一区| 亚洲最新在线观看| 91麻豆国产福利在线观看| 欧美高清一级片在线观看| 精品亚洲aⅴ乱码一区二区三区| 制服丝袜亚洲播放| 亚洲国产精品一区二区www在线| 91麻豆6部合集magnet| 日本一区二区高清| 粉嫩绯色av一区二区在线观看| 精品久久久久久久久久久久久久久久久| 午夜精品福利在线| 欧美性生活影院| 亚洲一二三区在线观看| 91豆麻精品91久久久久久| 亚洲柠檬福利资源导航| 色综合久久久久久久| 中文字幕制服丝袜一区二区三区| 成人免费高清视频在线观看| 欧美激情一区二区三区蜜桃视频| 国产伦理精品不卡| 久久综合九色综合97婷婷女人| 国产在线精品一区二区不卡了| www国产成人| 国产精品一线二线三线| 国产蜜臀97一区二区三区| 国产福利不卡视频| 中文字幕国产一区| 91麻豆精东视频| 亚洲国产aⅴ成人精品无吗| 欧美日韩在线免费视频| 亚洲chinese男男1069| 日韩一区二区在线观看视频| 九色|91porny| 国产精品无人区| 91香蕉视频污在线| 亚洲超碰精品一区二区| 欧美一区日本一区韩国一区| 韩国女主播成人在线观看| 亚洲国产精品av| 色狠狠综合天天综合综合| 五月天视频一区| 日韩你懂的在线观看| 成人三级在线视频| 亚洲一区二区三区在线| 欧美一级淫片007| 国产乱对白刺激视频不卡| 中文字幕在线不卡| 精品视频资源站| 国内欧美视频一区二区| 国产精品激情偷乱一区二区∴| 在线观看一区二区精品视频| 另类的小说在线视频另类成人小视频在线| 久久综合色播五月| 99久久精品国产导航| 无吗不卡中文字幕| 久久久www免费人成精品| 91丨九色porny丨蝌蚪| 日韩中文字幕av电影| 久久精品日产第一区二区三区高清版| 91美女在线看| 麻豆久久久久久| 亚洲欧美自拍偷拍色图| 欧美一区二区免费视频| 粉嫩av亚洲一区二区图片| 一区二区三区欧美久久| 欧美成人一区二区三区在线观看| gogogo免费视频观看亚洲一| 免费美女久久99| 最新不卡av在线| 精品三级在线看| 色婷婷亚洲精品| 久久99国产精品尤物| 亚洲综合一区二区精品导航| 精品国产乱码久久久久久老虎| 色狠狠色狠狠综合| 国产成人精品影视| 日韩制服丝袜av| 亚洲欧美视频在线观看视频| 精品国产第一区二区三区观看体验 | 亚洲国产你懂的| 中文字幕av一区二区三区高| 欧美一区二区三区四区在线观看| 99热99精品|