最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)發(fā)送郵件和附件功能

 更新時(shí)間:2018年05月28日 09:35:46   作者:ybjx111  
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)發(fā)送郵件和附件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C++實(shí)現(xiàn)發(fā)送郵件和附件的具體代碼,供大家參考,具體內(nèi)容如下

頭文件

/*************************
*發(fā)送郵件模塊頭文件 
*可以發(fā)送文本和附件(支持多個(gè)附件一起發(fā)送) 
**************************/ 
#pragma once 
struct sMailInfo //郵件信息 
{ 
 char* m_pcUserName;//用戶登錄郵箱的名稱 
 char* m_pcUserPassWord;//用戶登錄郵箱的密碼 
 char* m_pcSenderName;//用戶發(fā)送時(shí)顯示的名稱 
 char* m_pcSender;//發(fā)送者的郵箱地址 
 char* m_pcReceiver;//接收者的郵箱地址 
 char* m_pcTitle;//郵箱標(biāo)題 
 char* m_pcBody;//郵件文本正文 
 char* m_pcIPAddr;//服務(wù)器的IP 
 char* m_pcIPName;//服務(wù)器的名稱(IP與名稱二選一,優(yōu)先取名稱) 
 sMailInfo(){memset(this,0,sizeof(sMailInfo));} 
}; 
class CSendMail 
{ 
public: 
 CSendMail(void); 
 ~CSendMail(void); 
 
public: 
 bool SendMail(sMailInfo &smailInfo);//發(fā)送郵件,需要在發(fā)送的時(shí)候初始化郵件信息 
 void AddFilePath(char * pcFilePath);//添加附件的決定路徑到附件列表中 
 void DeleteFilePath(char* pcFilePath);//刪除附件路徑,如果有的話 
 void DeleteAllPath(void);//刪除全部附件的路徑 
 
protected: 
 void GetFileName(char* fileName,char* filePath);//從附件的路徑中獲取文件名稱 
 void Char2Base64(char* pBuff64,char* pSrcBuff,int iLen);//把char類型轉(zhuǎn)換成Base64類型 
 bool CReateSocket(SOCKET &sock);//建立socket連接 
 bool Logon(SOCKET &sock);//登錄郵箱,主要進(jìn)行發(fā)郵件前的準(zhǔn)備工作 
 int GetFileData(char* FilePath);//由文件路徑獲取附件內(nèi)容 
 
 bool SendHead(SOCKET &sock);//發(fā)送郵件頭 
 bool SendTextBody(SOCKET &sock);//發(fā)送郵件文本正文 
 bool SendFileBody(SOCKET &sock);//發(fā)送郵件附件 
 bool SendEnd(SOCKET &sock);//發(fā)送郵件結(jié)尾 
protected: 
 CList<char*,char*> m_pcFilePathList;//記錄附件路徑 
 
 char m_cSendBuff[4096];//發(fā)送緩沖區(qū) 
 char m_cReceiveBuff[1024]; 
 char* m_pcFileBuff;//指向附件內(nèi)容 
 sMailInfo m_sMailInfo; 
}; 

模塊實(shí)現(xiàn)文件

/****************************
* 發(fā)送郵件模塊 
*可以發(fā)送文本和附件(支持多個(gè)附件一起發(fā)送) 
*Date:2011-12-01 
******************************/ 
#include "StdAfx.h" 
#include "SendMail.h" 
#include "winsock2.h" 
#pragma comment(lib,"WSOCK32") 
 
CSendMail::CSendMail(void) 
{ 
 m_pcFileBuff=NULL; 
 memset(m_cSendBuff,0,sizeof(m_cSendBuff)); 
 memset(m_cReceiveBuff,0,sizeof(m_cReceiveBuff)); 
} 
 
 
CSendMail::~CSendMail(void) 
{ 
 DeleteAllPath(); 
} 
 
 
void CSendMail::Char2Base64(char* pBuff64,char* pSrcBuff,int iLen) 
{ 
 //1 1 1 1 1 1 1 1 
 // 分配給pBuff64 ↑ 分配給pBuff64+1 
 //   point所在的位置 
 static char Base64Encode[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//base64所映射的字符表 
 int point;//每一個(gè)源字符拆分的位置,可取2,4,6;初始為2 
 point=2; 
 int i; 
 int iIndex;//base64字符的索引 
 char n=0;//上一個(gè)源字符的殘留值 
 for(i=0;i<iLen;i++) 
 { 
  if(point==2) 
  { 
   iIndex=((*pSrcBuff)>>point)&0x3f;//取得pSrcBuff的高point位 
  } 
  else if (point==4) 
  { 
   iIndex=((*pSrcBuff)>>point)&0xf;//取得pSrcBuff的高point位 
  } 
  else if(point==6) 
  { 
   iIndex=((*pSrcBuff)>>point)&0x3;//取得pSrcBuff的高point位 
  } 
  iIndex+=n;//與pSrcBuff-1的低point結(jié)合組成Base64的索引 
  *pBuff64++=Base64Encode[iIndex];//由索引表得到pBuff64 
  n=((*pSrcBuff)<<(6-point));//計(jì)算源字符中的殘留值 
  n=n&0x3f;//確保n的最高兩位為0 
  point+=2;//源字符的拆分位置上升2 
  if(point==8)//如果拆分位置為8說(shuō)明pSrcBuff有6位殘留,可以組成一個(gè)完整的Base64字符,所以直接再組合一次 
  { 
   iIndex=(*pSrcBuff)&0x3f;//提取低6位,這就是索引了 
   *pBuff64++=Base64Encode[iIndex];// 
   n=0;//殘留值為0 
   point=2;//拆分位置設(shè)為2 
  } 
  pSrcBuff++; 
 
 } 
 if(n!=0) 
 { 
  *pBuff64++=Base64Encode[n]; 
 } 
 if(iLen%3==2)//如果源字符串長(zhǎng)度不是3的倍數(shù)要用'='補(bǔ)全 
 { 
  *pBuff64='='; 
 } 
 else if(iLen%3==1) 
 { 
  *pBuff64++='='; 
  *pBuff64='='; 
 } 
} 
 
void CSendMail::AddFilePath(char * pcFilePath)//添加附件路徑 
{ 
 if(pcFilePath==NULL) 
 { 
  return; 
 } 
 int i; 
 char* temp; 
 for(i=0;i<m_pcFilePathList.GetCount();i++) 
 { 
  temp=m_pcFilePathList.GetAt(m_pcFilePathList.FindIndex(i)); 
  if(strcmp(pcFilePath,temp)==0)//如果已經(jīng)存在就不用再添加了 
  { 
   return; 
  } 
 } 
 m_pcFilePathList.AddTail(pcFilePath); 
} 
 
void CSendMail::DeleteFilePath(char* pcFilePath)//刪除附件路徑 
{ 
 int i; 
 char* temp; 
 for(i=0;i<m_pcFilePathList.GetCount();i++) 
 { 
  temp=m_pcFilePathList.GetAt(m_pcFilePathList.FindIndex(i)); 
  if(strcmp(temp,pcFilePath)==0)//找到并刪除它,如果沒找到就算了 
  { 
   m_pcFilePathList.RemoveAt(m_pcFilePathList.FindIndex(i)); 
   delete[] temp; 
   return; 
  } 
 } 
} 
 
 
void CSendMail::DeleteAllPath(void) 
{ 
 m_pcFilePathList.RemoveAll(); 
} 
 
int CSendMail::GetFileData(char* FilePath) 
{ 
 m_pcFileBuff=NULL; 
 if(FilePath==NULL) 
 { 
  return 0; 
 } 
 CFile f; 
 int len; 
  
  
 USES_CONVERSION; 
 if(!f.Open(A2W(FilePath),CFile::modeRead|CFile::modeNoTruncate|CFile::typeBinary)) 
 { 
  return 0; 
 } 
 len=(int)f.GetLength(); 
 m_pcFileBuff=new char[len+1]; 
 memset(m_pcFileBuff,0,len+1); 
 f.Read(m_pcFileBuff,len); 
 
 f.Close(); 
 return len; 
} 
 
void CSendMail::GetFileName(char* fileName,char* filePath) 
{ 
 if(filePath==NULL || fileName==NULL) 
 { 
  return; 
 } 
 int i; 
 for(i=0;i<(int)strlen(filePath);i++) 
 { 
  if(filePath[strlen(filePath)-1-i]=='\\') 
  { 
   memcpy(fileName,&filePath[strlen(filePath)-i],i); 
   return; 
  } 
 } 
} 
 
bool CSendMail::CReateSocket(SOCKET &sock) 
{ 
 WORD wVersionRequested; 
 WSADATA wsaData; 
 int err; 
 wVersionRequested = MAKEWORD( 2, 2 ); 
 err = WSAStartup( wVersionRequested, &wsaData ); 
 if ( err != 0 ) 
 { 
  return false; 
 } 
 if ( LOBYTE( wsaData.wVersion ) != 2 || 
  HIBYTE( wsaData.wVersion ) != 2 ) 
 { 
  WSACleanup( ); 
  return false; 
 } 
 sock = socket(AF_INET,SOCK_STREAM,IPPROTO_IP); 
 if (sock == INVALID_SOCKET) 
 { 
  return false; 
 } 
 
 sockaddr_in servaddr; 
 memset(&servaddr,0,sizeof(sockaddr_in)); 
 servaddr.sin_family = AF_INET; 
 servaddr.sin_port = htons(25);//發(fā)郵件一般都是25端口 
 if(m_sMailInfo.m_pcIPName=="") 
 { 
  servaddr.sin_addr.s_addr = inet_addr(m_sMailInfo.m_pcIPAddr);//直接使用IP地址 
 } 
 else 
 { 
  struct hostent *hp=gethostbyname(m_sMailInfo.m_pcIPName);//使用名稱 
  servaddr.sin_addr.s_addr=*(int*)(*hp->h_addr_list); 
 } 
 
 
 int ret = connect(sock,(sockaddr*)&servaddr,sizeof(servaddr));//建立連接 
 if (ret == SOCKET_ERROR) 
 { 
  return false; 
 } 
 
 return true; 
} 
 
 
bool CSendMail::Logon(SOCKET &sock) 
{ 
 recv(sock,m_cReceiveBuff,1024,0); 
 
 memset(m_cSendBuff,0,sizeof(m_cSendBuff)); 
 sprintf_s(m_cSendBuff,"HELO []\r\n"); 
 send(sock,m_cSendBuff,strlen(m_cSendBuff),0);//開始會(huì)話 
 recv(sock,m_cReceiveBuff,1024,0); 
 if(m_cReceiveBuff[0]!='2' || m_cReceiveBuff[1]!='5' || m_cReceiveBuff[2]!='0') 
 { 
  return false; 
 } 
 
 memset(m_cSendBuff,0,sizeof(m_cSendBuff)); 
 sprintf_s(m_cSendBuff,"AUTH LOGIN\r\n"); 
 send(sock,m_cSendBuff,strlen(m_cSendBuff),0);//請(qǐng)求登錄 
 recv(sock,m_cReceiveBuff,1024,0); 
 if(m_cReceiveBuff[0]!='3' || m_cReceiveBuff[1]!='3' || m_cReceiveBuff[2]!='4') 
 { 
  return false; 
 } 
 
 memset(m_cSendBuff,0,sizeof(m_cSendBuff)); 
 Char2Base64(m_cSendBuff,m_sMailInfo.m_pcUserName,strlen(m_sMailInfo.m_pcUserName)); 
 m_cSendBuff[strlen(m_cSendBuff)]='\r'; 
 m_cSendBuff[strlen(m_cSendBuff)]='\n'; 
 send(sock,m_cSendBuff,strlen(m_cSendBuff),0);//發(fā)送用戶名 
 recv(sock,m_cReceiveBuff,1024,0); 
 if(m_cReceiveBuff[0]!='3' || m_cReceiveBuff[1]!='3' || m_cReceiveBuff[2]!='4') 
 { 
  return false; 
 } 
 
 memset(m_cSendBuff,0,sizeof(m_cSendBuff)); 
 Char2Base64(m_cSendBuff,m_sMailInfo.m_pcUserPassWord,strlen(m_sMailInfo.m_pcUserPassWord)); 
 m_cSendBuff[strlen(m_cSendBuff)]='\r'; 
 m_cSendBuff[strlen(m_cSendBuff)]='\n'; 
 send(sock,m_cSendBuff,strlen(m_cSendBuff),0);//發(fā)送用戶密碼 
 recv(sock,m_cReceiveBuff,1024,0); 
 if(m_cReceiveBuff[0]!='2' || m_cReceiveBuff[1]!='3' || m_cReceiveBuff[2]!='5') 
 { 
  return false; 
 } 
 return true;//登錄成功 
} 
 
 
bool CSendMail::SendHead(SOCKET &sock) 
{ 
 int rt; 
 memset(m_cSendBuff,0,sizeof(m_cSendBuff)); 
 sprintf_s(m_cSendBuff,"MAIL FROM:<%s>\r\n",m_sMailInfo.m_pcSender); 
 rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0); 
  
 if(rt!=strlen(m_cSendBuff)) 
 { 
  return false; 
 } 
 recv(sock,m_cReceiveBuff,1024,0); 
 
 memset(m_cSendBuff,0,sizeof(m_cSendBuff)); 
 sprintf_s(m_cSendBuff,"RCPT TO:<%s>\r\n",m_sMailInfo.m_pcReceiver); 
 rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0); 
 if(rt!=strlen(m_cSendBuff)) 
 { 
  return false; 
 } 
 recv(sock,m_cReceiveBuff,1024,0); 
 
 memset(m_cSendBuff,0,sizeof(m_cSendBuff)); 
 memcpy(m_cSendBuff,"DATA\r\n",strlen("DATA\r\n")); 
 rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0); 
 if(rt!=strlen(m_cSendBuff)) 
 { 
  return false; 
 } 
 recv(sock,m_cReceiveBuff,1024,0); 
 
 memset(m_cSendBuff,0,sizeof(m_cSendBuff)); 
 sprintf_s(m_cSendBuff,"From:\"%s\"<%s>\r\n",m_sMailInfo.m_pcSenderName,m_sMailInfo.m_pcSender); 
 sprintf_s(&m_cSendBuff[strlen(m_cSendBuff)],150,"To:\"INVT.COM.CN\"<%s>\r\n",m_sMailInfo.m_pcReceiver); 
 sprintf_s(&m_cSendBuff[strlen(m_cSendBuff)],150,"Subject:%s\r\nMime-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"INVT\"\r\n\r\n",m_sMailInfo.m_pcTitle); 
 rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0); 
 if(rt!=strlen(m_cSendBuff)) 
 { 
  return false; 
 } 
 
 return true; 
} 
 
bool CSendMail::SendTextBody(SOCKET &sock) 
{ 
 int rt; 
 memset(m_cSendBuff,0,sizeof(m_cSendBuff)); 
 sprintf_s(m_cSendBuff,"--INVT\r\nContent-Type: text/plain;\r\n charset=\"gb2312\"\r\n\r\n%s\r\n\r\n",m_sMailInfo.m_pcBody); 
 rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0); 
 if(rt!=strlen(m_cSendBuff)) 
 { 
  return false; 
 } 
 else 
 { 
  return true; 
 } 
} 
 
bool CSendMail::SendFileBody(SOCKET &sock) 
{ 
 int i; 
 char* filePath; 
 int rt; 
 int len; 
 int pt=0; 
 char fileName[128]; 
 for(i=0;i<m_pcFilePathList.GetCount();i++) 
 { 
  pt=0; 
  memset(fileName,0,128); 
  filePath=m_pcFilePathList.GetAt(m_pcFilePathList.FindIndex(i)); 
  len=GetFileData(filePath); 
  GetFileName(fileName,filePath); 
 
  sprintf_s(m_cSendBuff,"--INVT\r\nContent-Type: application/octet-stream;\r\n name=\"%s\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment;\r\n filename=\"%s\"\r\n\r\n",fileName,fileName); 
  send(sock,m_cSendBuff,strlen(m_cSendBuff),0); 
  while (pt<len) 
  { 
   memset(m_cSendBuff,0,sizeof(m_cSendBuff)); 
   Char2Base64(m_cSendBuff,&m_pcFileBuff[pt],min(len-pt,3000)); 
   m_cSendBuff[strlen(m_cSendBuff)]='\r'; 
   m_cSendBuff[strlen(m_cSendBuff)]='\n'; 
   rt=send(sock,m_cSendBuff,strlen(m_cSendBuff),0); 
   pt+=min(len-pt,3000); 
   if(rt!=strlen(m_cSendBuff)) 
   { 
    return false; 
   } 
  } 
  if(len!=0) 
  { 
   delete [] m_pcFileBuff; 
  } 
 } 
 
 return true; 
} 
 
bool CSendMail::SendEnd(SOCKET &sock) 
{ 
 sprintf_s(m_cSendBuff,"--INVT--\r\n.\r\n"); 
 send(sock,m_cSendBuff,strlen(m_cSendBuff),0); 
 
 sprintf_s(m_cSendBuff,"QUIT\r\n"); 
 send(sock,m_cSendBuff,strlen(m_cSendBuff),0); 
 closesocket(sock); 
 WSACleanup(); 
 return true; 
} 
 
 
bool CSendMail::SendMail(sMailInfo &smailInfo) 
{ 
 memcpy(&m_sMailInfo,&smailInfo,sizeof(smailInfo)); 
 if(m_sMailInfo.m_pcBody==NULL 
  || m_sMailInfo.m_pcIPAddr==NULL 
  || m_sMailInfo.m_pcIPName==NULL 
  || m_sMailInfo.m_pcReceiver==NULL 
  || m_sMailInfo.m_pcSender==NULL 
  || m_sMailInfo.m_pcSenderName==NULL 
  || m_sMailInfo.m_pcTitle==NULL 
  || m_sMailInfo.m_pcUserName==NULL 
  || m_sMailInfo.m_pcUserPassWord==NULL) 
 { 
  return false; 
 } 
 SOCKET sock; 
 if(!CReateSocket(sock))//建立連接 
 { 
  return false; 
 } 
 
 if(!Logon(sock))//登錄郵箱 
 { 
  return false; 
 } 
 
 if(!SendHead(sock))//發(fā)送郵件頭 
 { 
  return false; 
 } 
 
 if(!SendTextBody(sock))//發(fā)送郵件文本部分 
 { 
  return false; 
 } 
 
 if(!SendFileBody(sock))//發(fā)送附件 
 { 
  return false; 
 } 
 
 if(!SendEnd(sock))//結(jié)束郵件,并關(guān)閉sock 
 { 
  return false; 
 } 
 
 return true; 
} 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言從txt文件中逐行讀入數(shù)據(jù)存到數(shù)組中的實(shí)現(xiàn)方法

    C語(yǔ)言從txt文件中逐行讀入數(shù)據(jù)存到數(shù)組中的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇C語(yǔ)言從txt文件中逐行讀入數(shù)據(jù)存到數(shù)組中的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-12-12
  • C++從零配置ffmpeg的詳細(xì)過程

    C++從零配置ffmpeg的詳細(xì)過程

    本博文源于筆者正在做的任務(wù),將視頻mp4每幀轉(zhuǎn)換成jpg格式,前提是需要配置ffmpeg,因此本文從0下載教讀者如何配置ffmpeg,文中通過圖文結(jié)合的方式給大家介紹得非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • C++數(shù)據(jù)結(jié)構(gòu)之鏈表詳解

    C++數(shù)據(jù)結(jié)構(gòu)之鏈表詳解

    這篇文章主要介紹了C++數(shù)據(jù)結(jié)構(gòu)之鏈表的創(chuàng)建的相關(guān)資料,希望通過本文幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語(yǔ)言中volatile關(guān)鍵字的深入講解

    C語(yǔ)言中volatile關(guān)鍵字的深入講解

    在程序設(shè)計(jì)中,尤其是在C語(yǔ)言、C++、C#和Java語(yǔ)言中,使用volatile關(guān)鍵字聲明的變量或?qū)ο笸ǔ>哂信c優(yōu)化、多線程相關(guān)的特殊屬性,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言volatile關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • 一文掌握C++?中使用變量從定義到實(shí)踐

    一文掌握C++?中使用變量從定義到實(shí)踐

    變量是用于存儲(chǔ)數(shù)據(jù)值的容器,在?C++?中,有不同類型的變量(使用不同的關(guān)鍵字定義),這篇文章給大家介紹C++?中使用變量從定義到實(shí)踐記錄,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • C++設(shè)計(jì)模式中的工廠模式詳細(xì)介紹

    C++設(shè)計(jì)模式中的工廠模式詳細(xì)介紹

    工廠模式,是一種實(shí)例化對(duì)象的方式,只要輸入需要實(shí)例化對(duì)象的名字,就可以通過工廠對(duì)象的相應(yīng)工廠函數(shù)來(lái)制造你需要的對(duì)象
    2022-09-09
  • C語(yǔ)言:利用指針編寫程序,用梯形法計(jì)算給定的定積分實(shí)例

    C語(yǔ)言:利用指針編寫程序,用梯形法計(jì)算給定的定積分實(shí)例

    今天小編就為大家分享一篇C語(yǔ)言:利用指針編寫程序,用梯形法計(jì)算給定的定積分實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-12-12
  • C++中函數(shù)使用的基本知識(shí)學(xué)習(xí)教程

    C++中函數(shù)使用的基本知識(shí)學(xué)習(xí)教程

    這篇文章主要介紹了C++中函數(shù)使用的基本知識(shí)學(xué)習(xí)教程,涵蓋了函數(shù)的聲明和參數(shù)以及指針等各個(gè)方面的知識(shí),非常全面,需要的朋友可以參考下
    2016-01-01
  • 使用C++11實(shí)現(xiàn)Android系統(tǒng)的Handler機(jī)制

    使用C++11實(shí)現(xiàn)Android系統(tǒng)的Handler機(jī)制

    這篇文章主要介紹了使用C++11實(shí)現(xiàn)Android系統(tǒng)的Handler機(jī)制,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 一文總結(jié)C++中的異常

    一文總結(jié)C++中的異常

    異常是一種處理錯(cuò)誤的方式,當(dāng)一個(gè)函數(shù)發(fā)現(xiàn)自己無(wú)法處理的錯(cuò)誤時(shí)就可以拋出異常,讓函數(shù)的直接或間接調(diào)用者處理這個(gè)錯(cuò)誤,本文給大家總結(jié)了C++中的異常,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

汕头市| 泰和县| 晋江市| 甘南县| 浪卡子县| 新乡县| 陇西县| 淳安县| 北安市| 荣昌县| 桃园县| 乌兰浩特市| SHOW| 贡山| 色达县| 五华县| 筠连县| 金川县| 黄梅县| 普兰县| 噶尔县| 闽清县| 宜黄县| 淮滨县| 义马市| 灵璧县| 亳州市| 都匀市| 凌源市| 普兰店市| 雅安市| 黎城县| 乌拉特后旗| 盐津县| 甘孜县| 龙岩市| 永仁县| 克山县| 遂平县| 富源县| 景谷|