当前位置: 技术问答>linux和unix
使用sendmail发信时,subject出现乱码的问题。(使用了标准的base64编码,outlook的时候看是正常编码,别的服务器还是有乱码例如mozilla收
来源: 互联网 发布时间:2015-09-12
本文导语: 各位大哥,有个问题要请教,马上就要发行站点了,但是这个问题却没有解决。 是对日文的编码。。。 问题描述: 使用sendmail发信时,subject出现乱码的问题。(使用了标准的base64编码,outlook的时候看是正常编码,...
各位大哥,有个问题要请教,马上就要发行站点了,但是这个问题却没有解决。
是对日文的编码。。。
问题描述:
使用sendmail发信时,subject出现乱码的问题。(使用了标准的base64编码,outlook的时候看是正常编码,别的服务器还是有乱码例如mozilla收信的时候)
急!!!
编码SRC:
下面的src中每76个字节换行处理已经删除,因为只对subject编码,加了换行处理,好像连outlook看也是乱码的
static int base64_encode(char *pSrc, unsigned int nSize, char *pDest)
{
const unsigned int BASE64_ENCODE_TABLE[64] = {
65, 66, 67, 68, 69, 70, 71, 72, // 00 - 07
73, 74, 75, 76, 77, 78, 79, 80, // 08 - 15
81, 82, 83, 84, 85, 86, 87, 88, // 16 - 23
89, 90, 97, 98, 99, 100, 101, 102, // 24 - 31
103, 104, 105, 106, 107, 108, 109, 110, // 32 - 39
111, 112, 113, 114, 115, 116, 117, 118, // 40 - 47
119, 120, 121, 122, 48, 49, 50, 51, // 48 - 55
52, 53, 54, 55, 56, 57, 43, 47 };// 56 - 63
unsigned int iB, iInMax3, Len;
char *pInPtr, *pInLimitPtr;
char *OutPtr ;
unsigned int m_LineWidth = 76;
if ((pSrc == NULL) || (nSize 6;
OutPtr[0] = BASE64_ENCODE_TABLE[iB];
OutPtr+=4;
Len+=4;
}
}
switch (nSize - iInMax3)
{
case 1:
iB = (unsigned char) *pInPtr;
iB = iB 6;
OutPtr[0] = BASE64_ENCODE_TABLE[iB];
OutPtr[2] = '=';
OutPtr[3] = '=';
OutPtr+=4;
break;
case 2:
iB = (unsigned char) *pInPtr++;
iB = iB 6;
OutPtr[0] = BASE64_ENCODE_TABLE[iB];
OutPtr[3] = '='; // Fill remaining byte.
OutPtr+=4;
break;
}
return (unsigned int) (OutPtr - pDest);
}
使用的时候:
。。。。。。。
memset(szBuff, 0, sizeof(szBuff));
base64_encode(subject, strlen(subject), szBuff);
fprintf(msg, "Subject: =?iso-2022-jp?B?%s?=n",szBuff);
。。。。。。。
sendmail -oi -t
是对日文的编码。。。
问题描述:
使用sendmail发信时,subject出现乱码的问题。(使用了标准的base64编码,outlook的时候看是正常编码,别的服务器还是有乱码例如mozilla收信的时候)
急!!!
编码SRC:
下面的src中每76个字节换行处理已经删除,因为只对subject编码,加了换行处理,好像连outlook看也是乱码的
static int base64_encode(char *pSrc, unsigned int nSize, char *pDest)
{
const unsigned int BASE64_ENCODE_TABLE[64] = {
65, 66, 67, 68, 69, 70, 71, 72, // 00 - 07
73, 74, 75, 76, 77, 78, 79, 80, // 08 - 15
81, 82, 83, 84, 85, 86, 87, 88, // 16 - 23
89, 90, 97, 98, 99, 100, 101, 102, // 24 - 31
103, 104, 105, 106, 107, 108, 109, 110, // 32 - 39
111, 112, 113, 114, 115, 116, 117, 118, // 40 - 47
119, 120, 121, 122, 48, 49, 50, 51, // 48 - 55
52, 53, 54, 55, 56, 57, 43, 47 };// 56 - 63
unsigned int iB, iInMax3, Len;
char *pInPtr, *pInLimitPtr;
char *OutPtr ;
unsigned int m_LineWidth = 76;
if ((pSrc == NULL) || (nSize 6;
OutPtr[0] = BASE64_ENCODE_TABLE[iB];
OutPtr+=4;
Len+=4;
}
}
switch (nSize - iInMax3)
{
case 1:
iB = (unsigned char) *pInPtr;
iB = iB 6;
OutPtr[0] = BASE64_ENCODE_TABLE[iB];
OutPtr[2] = '=';
OutPtr[3] = '=';
OutPtr+=4;
break;
case 2:
iB = (unsigned char) *pInPtr++;
iB = iB 6;
OutPtr[0] = BASE64_ENCODE_TABLE[iB];
OutPtr[3] = '='; // Fill remaining byte.
OutPtr+=4;
break;
}
return (unsigned int) (OutPtr - pDest);
}
使用的时候:
。。。。。。。
memset(szBuff, 0, sizeof(szBuff));
base64_encode(subject, strlen(subject), szBuff);
fprintf(msg, "Subject: =?iso-2022-jp?B?%s?=n",szBuff);
。。。。。。。
sendmail -oi -t