您的位置:首页 > 编程语言 > PHP开发

SMTP 发送邮件 字符串拼接

2016-06-28 12:12 639 查看

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: