在自己的程序里实现自动发送邮件给固定邮箱时,用mail to 时出错说需要Authtication验证,这时候应该怎么样通过验证呢?

解决方案 »

  1.   

    把用户名和口令采用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;
    }