if(EmailSendCfg_St.stEmailTransCfg.battachment)
{
if((NULL == EmailSendCfg_St.stEmailTransCfg.attachment)||(EmailSendCfg_St.stEmailTransCfg.attachment_len <= 0))
{
ERROR( " failed: stEmailTransCfg.attachment is NULL or attachment_len is 0 \n" );
return BC_FAILURE;
}
u32AttachmentLen = EmailSendCfg_St.stEmailTransCfg.attachment_len;
pAttachment_addr = EmailSendCfg_St.stEmailTransCfg.attachment;
len = snprintf( (char *) arBodyHead, sizeof(arBodyHead),
"From: \"%s\"<%s>\r\n"
"To:%s\r\n"
"Subject:%s\r\n"
"MIME-Version:1.0\r\n"
"Content-Type: multipart/mixed; boundary=PartBoundary12345678\r\n"
"Content-Transfer-Encoding:8Bit\r\n"
"\r\n"
"--PartBoundary12345678\r\n"
"Content-Type: text/plain; charset=ISO-8859-1\r\n"
"\r\n"
"%s\r\n" //send txt content
"\r\n\r\n"
"--PartBoundary12345678\r\n"
"Content-Type: application/octet-stream; name=%s\r\n"
"Content-Disposion:attachment; filename=%s\r\n"
"Content-Transfer-Encoding: base64\r\n"
"\r\n",
EmailSendCfg_St.mail_from,EmailSendCfg_St.mail_from,arMailRecvAddr,\
EmailSendCfg_St.stEmailTransCfg.subject,\
EmailSendCfg_St.stEmailTransCfg.content,\
EmailSendCfg_St.stEmailTransCfg.attachment_name,\
EmailSendCfg_St.stEmailTransCfg.attachment_name
);
// MinBase64Encode_len防止传入的附件内容小于2字节,因分配的空间太小在bsae64en时出错,len为头信息长度
u32MallcAchmentLen = u32AttachmentLen*2+len+strlen(arBodyEnd)+MinBase64Encode_len;
pMallocEmail = (char *)malloc(u32MallcAchmentLen);
if(NULL == pMallocEmail)
{
ERROR("malloc() faile \n");
return -1;
}
memset(pMallocEmail, 0x0, u32MallcAchmentLen);
pSendEmailBody = pMallocEmail;
pTemporaryBody = pMallocEmail;
len = sprintf(pTemporaryBody, arBodyHead);
pTemporaryBody += len;
u32TotalLen = len;
#if 0 //分段编码
char arOutBuf[256] = {0};
while(u32AttachmentLen > 0)
{
if(u32AttachmentLen > ENCODE_LEN)
{
ret = mbedtls_base64_encode( arOutBuf, sizeof( arOutBuf ), &len, pAttachment_addr, ENCODE_LEN );
if(BC_SUCCESS != ret)
{
ERROR("fail mbedtls_base64_encode %d \n",ret);
free(pMallocEmail);
return BC_FAILURE;
}
len = sprintf(arOutBuf, "%s\r\n", arOutBuf);
sprintf(pTemporaryBody, arOutBuf);
memset(arOutBuf, 0x0, 256);
pTemporaryBody += len;
u32TotalLen += len;
pAttachment_addr += ENCODE_LEN;
u32AttachmentLen -= ENCODE_LEN;
}
else
{
ret = mbedtls_base64_encode( arOutBuf, sizeof( arOutBuf ), &len, pAttachment_addr, u32AttachmentLen );
if(BC_SUCCESS != ret)
{
ERROR(" fail mbedtls_base64_encode %d \n",ret);
free(pMallocEmail);
return BC_FAILURE;
}
len = sprintf(arOutBuf, "%s\r\n", arOutBuf);
sprintf(pTemporaryBody, arOutBuf);
memset(arOutBuf, 0x0, 256);
pTemporaryBody += len;
u32TotalLen += len;
u32AttachmentLen -= ENCODE_LEN;
break;
}
}
#else // 一次完成编码
ret = mbedtls_base64_encode( (unsigned char *)pTemporaryBody, u32AttachmentLen*2+MinBase64Encode_len, &len, (const unsigned char *)pAttachment_addr, u32AttachmentLen );
if(BC_SUCCESS != ret)
{
ERROR("fail mbedtls_base64_encode %d \n",ret);
free(pMallocEmail);
return BC_FAILURE;
}
len = sprintf(pTemporaryBody, "%s\r\n", pTemporaryBody);
// ERROR("u32TotalLen %d ,len = %d ,pTemporaryBody %d \n",u32TotalLen,len,strlen(pTemporaryBody));
pTemporaryBody += len;
u32TotalLen += len;
#endif
len = sprintf(pTemporaryBody, arBodyEnd);
u32TotalLen += len;
}
else //no attachment
{
len = snprintf( (char *) arBodyHead, sizeof(arBodyHead),
"From:%s\r\n"
"To:%s\r\n"
"MIME-Version:1.0\r\n"
"Subject:%s\r\n"
"\r\n"
"%s\r\n", //sent txt content
EmailSendCfg_St.mail_from, arMailRecvAddr,\
EmailSendCfg_St.stEmailTransCfg.subject,\
EmailSendCfg_St.stEmailTransCfg.content
);
u32MallcAchmentLen = len*2;
pMallocEmail = (char *)malloc(u32MallcAchmentLen);
if(NULL == pMallocEmail)
{
ERROR("malloc(): fail \n");
return -1;
}
memset(pMallocEmail, 0x0, u32MallcAchmentLen);
pSendEmailBody = pMallocEmail;
u32TotalLen = sprintf(pSendEmailBody, arBodyHead);
}