怎样用SMTP类发关邮件时通过服务器的验证?(100分) 在自己的程序里实现自动发送邮件给固定邮箱时,用mail to 时出错说需要Authtication验证,这时候应该怎么样通过验证呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把用户名和口令采用base64编码后再发送给服务器,给你一个base64编码的函数ANSIToBase64(const char *szInANSI, int nInLen, char *szOutBase64, int nOutLen){ //Input Parameter validation if ((szInANSI == NULL) || (nInLen == 0) || (szOutBase64 == NULL) || (nOutLen == 0)) return 0; if (nOutLen < (nInLen*4/3 + 1 + nInLen*4/3/BASE64_MAXLINE*2 + 1 + 4)) return 0; //Set up the parameters prior to the main encoding loop int nInPos = 0; int nOutPos = 0; int nLineLen = 0; int c1, c2, c3; int i; // Get three characters at a time from the input buffer and encode them for (i=0; i<nInLen/3; ++i) { //Get the next 2 characters c1 = szInANSI[nInPos++] & 0xFF; c2 = szInANSI[nInPos++] & 0xFF; c3 = szInANSI[nInPos++] & 0xFF; //Encode into the 4 6 bit characters szOutBase64[nOutPos++] = BASE64_TAB[c1 >> 2]; szOutBase64[nOutPos++] = BASE64_TAB[((c1 << 4) | (c2 >> 4)) & 0x3F]; szOutBase64[nOutPos++] = BASE64_TAB[((c2 << 2) | (c3 >> 6)) & 0x3F]; szOutBase64[nOutPos++] = BASE64_TAB[c3 & 0x3F]; nLineLen += 4; //Handle the case where we have gone over the max line boundary if (nLineLen > BASE64_MAXLINE - 4) { szOutBase64[nOutPos++] = EOL[0]; szOutBase64[nOutPos++] = EOL[1]; nLineLen = 0; } } // Encode the remaining one or two characters in the input buffer switch (nInLen % 3) { case 0: { szOutBase64[nOutPos++] = EOL[0]; szOutBase64[nOutPos++] = EOL[1]; break; } case 1: { c1 = szInANSI[nInPos] & 0xFF; szOutBase64[nOutPos++] = BASE64_TAB[(c1 & 0xFC) >> 2]; szOutBase64[nOutPos++] = BASE64_TAB[((c1 & 0x03) << 4)]; szOutBase64[nOutPos++] = '='; szOutBase64[nOutPos++] = '='; szOutBase64[nOutPos++] = EOL[0]; szOutBase64[nOutPos++] = EOL[1]; break; } case 2: { c1 = szInANSI[nInPos++] & 0xFF; c2 = szInANSI[nInPos] & 0xFF; szOutBase64[nOutPos++] = BASE64_TAB[(c1 & 0xFC) >> 2]; szOutBase64[nOutPos++] = BASE64_TAB[((c1 & 0x03) << 4) | ((c2 & 0xF0) >> 4)]; szOutBase64[nOutPos++] = BASE64_TAB[((c2 & 0x0F) << 2)]; szOutBase64[nOutPos++] = '='; szOutBase64[nOutPos++] = EOL[0]; szOutBase64[nOutPos++] = EOL[1]; break; } default: { return 0; } } szOutBase64[nOutPos] = 0; return nOutPos;} 谁用VS2003的来救救我。。 光知道应用程序名能判断它是32位应用程序还是64位应用程序吗 错误分析 请教高人 VC 图形操作问题 在线等待 关于属性表的使用问题 窗口切分的问题. 请教怎样制作安装程序 SDK 下怎样创建像 Word 那样的平滑工具栏?(就是像 MFC 默认生成的那样,按钮是平的,而不是像写字板的按钮那样凸起来) Active控件中如何传入大容量数据 奇怪的Connect atl、activex、 com有什么区别? 请问如何在资源中定义常量,并进行关联?
ANSIToBase64(const char *szInANSI, int nInLen, char *szOutBase64, int nOutLen)
{
//Input Parameter validation
if ((szInANSI == NULL) || (nInLen == 0) || (szOutBase64 == NULL) || (nOutLen == 0))
return 0;
if (nOutLen < (nInLen*4/3 + 1 + nInLen*4/3/BASE64_MAXLINE*2 + 1 + 4))
return 0; //Set up the parameters prior to the main encoding loop
int nInPos = 0;
int nOutPos = 0;
int nLineLen = 0;
int c1, c2, c3;
int i; // Get three characters at a time from the input buffer and encode them
for (i=0; i<nInLen/3; ++i)
{
//Get the next 2 characters
c1 = szInANSI[nInPos++] & 0xFF;
c2 = szInANSI[nInPos++] & 0xFF;
c3 = szInANSI[nInPos++] & 0xFF; //Encode into the 4 6 bit characters
szOutBase64[nOutPos++] = BASE64_TAB[c1 >> 2];
szOutBase64[nOutPos++] = BASE64_TAB[((c1 << 4) | (c2 >> 4)) & 0x3F];
szOutBase64[nOutPos++] = BASE64_TAB[((c2 << 2) | (c3 >> 6)) & 0x3F];
szOutBase64[nOutPos++] = BASE64_TAB[c3 & 0x3F];
nLineLen += 4; //Handle the case where we have gone over the max line boundary
if (nLineLen > BASE64_MAXLINE - 4)
{
szOutBase64[nOutPos++] = EOL[0];
szOutBase64[nOutPos++] = EOL[1];
nLineLen = 0;
}
} // Encode the remaining one or two characters in the input buffer
switch (nInLen % 3)
{
case 0:
{
szOutBase64[nOutPos++] = EOL[0];
szOutBase64[nOutPos++] = EOL[1];
break;
}
case 1:
{
c1 = szInANSI[nInPos] & 0xFF;
szOutBase64[nOutPos++] = BASE64_TAB[(c1 & 0xFC) >> 2];
szOutBase64[nOutPos++] = BASE64_TAB[((c1 & 0x03) << 4)];
szOutBase64[nOutPos++] = '=';
szOutBase64[nOutPos++] = '=';
szOutBase64[nOutPos++] = EOL[0];
szOutBase64[nOutPos++] = EOL[1];
break;
}
case 2:
{
c1 = szInANSI[nInPos++] & 0xFF;
c2 = szInANSI[nInPos] & 0xFF;
szOutBase64[nOutPos++] = BASE64_TAB[(c1 & 0xFC) >> 2];
szOutBase64[nOutPos++] = BASE64_TAB[((c1 & 0x03) << 4) | ((c2 & 0xF0) >> 4)];
szOutBase64[nOutPos++] = BASE64_TAB[((c2 & 0x0F) << 2)];
szOutBase64[nOutPos++] = '=';
szOutBase64[nOutPos++] = EOL[0];
szOutBase64[nOutPos++] = EOL[1];
break;
}
default:
{
return 0;
}
} szOutBase64[nOutPos] = 0; return nOutPos;
}