c语言的程序怎么发邮件,C语言发送邮件相关,该怎么处理

当前位置:我的异常网» Linux/Unix » C语言发送邮件相关,该怎么处理

C语言发送邮件相关,该怎么处理

www.myexceptions.net  网友分享于:2013-03-01  浏览:91次

C语言发送邮件相关

各位大侠,帮个忙!

最近我在Linux下用C写一个用来发送邮件的程序。

邮件的内容和附件分别从两个文件中读取,都采用base64编码。

附件的处理没有任何问题,但在处理邮件内容时出现问题。

当邮件内容从存文本文件中读取的时候,没有任何问题。

但是,当邮件内容从word文件中读取的时候,经发送后,收到的都是乱码,请高手指点其中原委!

另外,还有一个问题,如果无法确定word文件中是否含有图片等非ascii字符,但又要以此word文件中的内容作为邮件内容发送时,应该如何进行处理?

谢谢!!!

------解决方案--------------------

发邮件只能转化成base64编码,utf8只是对字符编码,而不是对字节和位编码。

------解决方案--------------------

能直接对word文件进行编码,下面是一个jpg图片作为附件的邮件发送程序,只要把mime类型改为msword就可以:

/*

funtion : send email

data : 2007-01-30

*/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ETH_NAME "eth0"

#define SD_BOTH 2

#define SOCKET_ERROR -1

#define INVALID_SOCKET -1

#define CHAR64(c) (((c) < 0 || (c) > 127) ? -1 : index_64[(c)])

#define B0(a) (a & 0xFF)

#define B1(a) (a >> 8 & 0xFF)

#define B2(a) (a >> 16 & 0xFF)

#define B3(a) (a >> 24 & 0xFF)

int s;

struct sockaddr_in remote;

unsigned short port;

int rt;

char *send_data;

char *recv_data;

char *hostname;

struct hostent *ht;

char *usersrc,*userdes,*passsrc,*passdes;

char *From,*To,*Date,*Subject,*tmpbuf;

char *Filename;

// base64 tables

static char basis_64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

static signed char index_64[128] = {

-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,

-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,

-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,

52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1,

-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,

15,16,17,18, 19,20,21,22, 23,24,25,

-1, -1,-1,-1,-1,

-1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,

41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1

};

char * base64_encode(const unsigned char *value, int vlen);

unsigned char * base64_decode(const char *value, int *rlen);

int Base64Encode(char * base64code, const char * src, int src_len );

int Base64Decode(char * buf, const char * base64code, int src_len);

void Destory()

{

if(s!=INVALID_SOCKET)

{

shutdown(s,SD_BOTH);

close(s);

}

free(From);

free(To);

free(Date);

free(Subject);

free(Filename);

free(tmpbuf);

free(recv_data);

free(userdes);

free(passdes);

}

// Base64 code table

// 0-63 : A-Z(25) a-z(51), 0-9(61), +(62), /(63)

char Base2Chr( unsigned char n )

{

n &= 0x3F;

if ( n < 26 )

return ( char )( n + 'A' );

else if ( n < 52 )

return ( char )( n - 26 + 'a' );

else if ( n < 62 )

return ( char )( n - 52 + '0' );

else if ( n == 62 )

return '+';

else

return '/';

}

int Base64Encode22( char * const aDest, const unsigned char * aSrc, int aLen )

{

char * p = aDest;

int i;

unsigned char t;

for ( i = 0; i < aLen; i++ )

{

switch ( i % 3 )

{

case 0 :

*p++ = Base2Chr( *aSrc >> 2 );

t = ( *aSrc++ << 4 ) & 0x3F;

break;

case 1 :

*p++ = Base2Chr( t | ( *aSrc >> 4 ) );

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该压缩包包含三个文档,分别是SMTP协议详解,POP3协议详解,MIME规范详解,文档中详细介绍了一个邮件发送和接收的过程分析,协议本身的包含的命令和工作过程,为开发邮件代理的客户端提供技术基础。如下是部分SMTP协议部分内容: 1.1 SMTP在邮件通信中的位置 SMTP,即简单邮件传送协议,所对应RFC文档为RFC821。同http等多数应用层协议一样,它工作在C/S模式下,用来实现因特网上的邮件传送。SMTP在整个电子邮件通信中所处的位置。可以看出,SMTP是用来将客户机上的邮件传送到服务器上。这里的客户机是指某次连接中的发送方,服务器是指相应的接收方。在讲解发送邮件的整个通信过程前,先解释一下面几个术语。 1.2几个术语 1.2.1.邮件 邮件是一种消息的格式,由信封、首部和正文组成。 信封上最重要的是收信人的地址。邮件服务器用这个地址将邮件发送到收信人所在的邮件服务器上。 首部是由用户代理或邮件服务器添加的一些信息。包括Received、Message-ID、From、Data、Reply-To、X-Phone、X-Mailer、To和Subject等字段。 正文是是发送用户发给接收用户报文的内容。RFC 822 规定正文为NVT ASCII文字行。 更为详细的说明,请参考RFC821和RFC822等协议。 1.2.2.用户代理 用户代理UA(User Agent)是用户与电子邮件系统的交互接口,一般来说它就是我们PC机上的一个程序。Windows上常见的用户代理是Foxmail和Outlook Express。 用户代理提供一个好的用户界面,它提取用户在其界面填写的各项信息,生成一封符合SMTP等邮件标准的邮件,然后采用SMTP协议将邮件发送发送邮件服务器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值