最近寫了一個小程式 就是自己撰寫代碼不適用其他軟體將檔案以附件的形式發送出去,最后結果是如果這個檔案可以使用文本檔案正確打開那么則發送正確,但是如果為word或者圖片則會出現亂碼,下面是我Mime格式定義的代碼,不知道有什么問題大家看一下。
strCmd = szdate; //日期
strCmd += "From: " + szFrom + "\r\n";
strCmd += "To: " + szTo + "\r\n";
strCmd += "Subject: "+ szsubject +"\r\n";
strCmd += "Mime-Version: 1.0\r\n";
strCmd += "Content-Type: multipart/mixed;\r\n";
//注意上面這些字串 前面不能有空格 要頂到
strCmd +=" boundary=\"__=_Part_Boundary_001_011991.029871\"\r\n\r\n"; //這個必須保留一個或多個空格前面
strCmd +="--__=_Part_Boundary_001_011991.029871\r\n";
strCmd +="Content-Description: enclosed photo\r\n";
strCmd +="Content-Type: text/plain;\r\n";
//前面頂到
strCmd +=" charset=\"gb2312\"\r\n";//至少前面空一格 可以知道了 引數和前面型別之間需要空格隔開的
strCmd +="Content-Transfer-Encoding: base64\r\n\r\n";
strCmd +=Base64Encode(mailContent.c_str())+"\r\n\r\n"; //郵件內容
strCmd +="--__=_Part_Boundary_001_011991.029871\r\n";
strCmd +="Content-Type: .png image/png;\r\n";
//上面的頂到
printf("filename==========");
const char* pszName = ::strrchr(pszFilename, '\\');
if (!pszName)
pszName = pszFilename;
else
pszName++;
filename = pszName;
cout<<filename<<endl;
strCmd +=" name="+filename+"\r\n"; //同理至少空一格
strCmd +="Content-Transfer-Encoding: base64\r\n\r\n";
send(sockfd,strCmd.c_str(), strCmd.length(),0);
//strCmd.delete(0,strCmd.length());
//strCmd += fileDate+"\r\n\r\n"; //檔案資料 二進制編碼成base64
/*多個附件傳送
strCmd +="--__=_Part_Boundary_001_011991.029871\r\n";
strCmd +="Content-Type: application/octet-stream;\r\n";
strCmd +=" name="+filename+"\r\n"; //同理至少空一格
strCmd +="Content-Transfer-Encoding: base64\r\n\r\n";
strCmd += fileDate+"\r\n\r\n"; //檔案資料 二進制編碼成base64
*/
//發送正文部分
printf("正在讀取檔案...\n");
if(ReadFromFile(pszFilename,filename,sockfd)==false)
{
printf("檔案讀取失敗\n");
return ;
}
string strCmd1;
strCmd1 +="\r\n\r\n--__=_Part_Boundary_001_011991.029871--\r\n";
strCmd1 +="\r\n.\r\n";
//結束符. 注意這里要多個空行
//上面字串拼好了 發送給服務器了可以
send(sockfd,strCmd1.c_str(), strCmd1.length(),0);
memset(buff,0,sizeof(buff));
recv(sockfd,buff,sizeof(buff),0);
printf("發送成功啦\n");
return ;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/143323.html
標籤:網絡及通訊開發
