⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smtptest.c

📁 linux发送邮件程序。可发送邮件正文和附件。已经在redhat linux 4通过测试。
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
 char tmp[20] = "0";
 usersrc = tmp; 	
printf("==%s\n",userdes);
printf("=%s\n",usersrc);
Base64_Decode((unsigned char *)userdes,(unsigned char *)usersrc);
printf("=%s\n",usersrc);
 */

 send_data = "EHLO Localhost\r\n";
 
 rt = send(s,send_data,strlen(send_data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }


 if(!GetResponse())
  return -1;
	
        send_data = "AUTH LOGIN\r\n";
 rt = send(s,send_data,strlen(send_data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 if(!GetResponse())
  return -1;
        sprintf(ch,"%s\r\n",userdes);
 rt = send(s,(char *)ch,strlen(ch),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }

 if(!GetResponse())
  return -1;

 sprintf(ch,"%s\r\n",passdes);
 rt = send(s,(char *)ch,strlen(ch),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }

 if(!GetResponse())
  return -1;
 
 return 1;
}
int SendMail(const char *from,const char *to,const char *date,const char *subject,const char *data)
{
 if(from == NULL || to == NULL || date == NULL || subject == NULL)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 sprintf(From,"MAIL FROM: <%s>\r\n",from);
 rt = send(s,From,strlen(From),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 if(!GetResponse())
  return -1;

 sprintf(To,"RCPT TO: <%s>\r\n",to);
 rt = send(s,To,strlen(To),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 if(!GetResponse())
  return -1;

 send_data = "DATA\r\n";
 rt = send(s,send_data,strlen(send_data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 if(!GetResponse())
  return -1;

 sprintf(From,"From: %s\r\n",from);
 rt = send(s,From,strlen(From),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
    
 sprintf(To,"To: %s\r\n",to);
 rt = send(s,To,strlen(To),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 

 sprintf(Date,"Date: %s\r\n",date);
 rt = send(s,Date,strlen(Date),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }

 sprintf(Subject,"Subject: %s\r\n",subject);
 rt = send(s,Subject,strlen(Subject),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 
//添加版本号
 sprintf(tmpbuf,"MIME-Version: 1.0\r\n");
 rt = send(s,tmpbuf,strlen(tmpbuf),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 sprintf(tmpbuf,"Content-Type: multipart/mixed;boundary=\"boundary=_xiezhiqiang\"\r\n");
 rt = send(s,tmpbuf,strlen(tmpbuf),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }

 send_data = "\r\n";
 rt = send(s,send_data,strlen(send_data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }

  send_data = "\r\n";
 rt = send(s,send_data,strlen(send_data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 } 
 
  sprintf(tmpbuf,"Content-Transfer-Encoding: 7bit\r\n");
 rt = send(s,tmpbuf,strlen(tmpbuf),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }

 send_data = "\r\n";
 rt = send(s,send_data,strlen(send_data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 
send_data = "This is a MIME Encoded Message\r\n";
 rt = send(s,send_data,strlen(send_data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 
 send_data = "\r\n";
 rt = send(s,send_data,strlen(send_data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 
 sprintf(tmpbuf,"--boundary=_xiezhiqiang\r\n");
 rt = send(s,tmpbuf,strlen(tmpbuf),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 sprintf(tmpbuf,"Content-Type: text/plain; charset=us-ascii\r\n");
 rt = send(s,tmpbuf,strlen(tmpbuf),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
  sprintf(tmpbuf,"Content-Transfer-Encoding: 7bit\r\n");
 rt = send(s,tmpbuf,strlen(tmpbuf),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 } 
 send_data = "\r\n";
 rt = send(s,send_data,strlen(send_data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }

 rt = send(s,(char *)data,strlen(data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }

 return 1;
}

int SendAffix(const char *filename )
{
        int  len;
	int length;
	char attachname[1000] = "0";
	
        FILE *fp=NULL;        
  	unsigned char datasrc[58],datades[100];        
	unsigned char  *datades1;
        fp = fopen(filename,"rb");
        if(fp==NULL)
        {
                printf("can not open file");
                return -1;
        }

	fseek(fp,0,SEEK_END);
	length = ftell(fp);
	fseek(fp,0,SEEK_SET);
		
	 send_data = "\r\n";
	 rt = send(s,send_data,strlen(send_data),0);
	 if(rt == SOCKET_ERROR)
	 {
	  shutdown(s,SD_BOTH);
	  close(s);
	  return -1;
	 }
		
        send_data = "--boundary=_xiezhiqiang\r\n";
        rt = send(s,send_data,strlen(send_data),0);
        if(rt == SOCKET_ERROR)
        {
                printf("send error");
                shutdown(s,SD_BOTH);
                close(s);
                return -1;
        }
   	sprintf(Filename,"Content-Type: text/plain;name=\"%s\"\r\n",filename);
        rt = send(s,Filename,strlen(Filename),0);
        if(rt == SOCKET_ERROR)
        {
                printf("sendfilenameerror");
                shutdown(s,SD_BOTH);
                close(s);
                return -1;
        }                
        send_data = "Content-Transfer-Encoding: base64\r\n";
        rt = send(s,send_data,strlen(send_data),0);
        if(rt == SOCKET_ERROR)
        {
                printf("sendcodemethoderror");
                shutdown(s,SD_BOTH);
                close(s);
                return -1;
        }
		
       sprintf(attachname,"Content-Disposition: attachment;filename=\"%s\"\r\n",filename);
        rt = send(s,attachname,strlen(attachname),0);
        if(rt == SOCKET_ERROR)
        {
                printf("sendfilenameerror");
                shutdown(s,SD_BOTH);
                close(s);
                return -1;
        }
		
        send_data = "\r\n";
        rt = send(s,send_data,strlen(send_data),0);
        if(rt == SOCKET_ERROR)
        {
                shutdown(s,SD_BOTH);
                close(s);
                return -1;
        }
		int sendlen = 0;
	int stringlen = 0;
	int timedelay,timedelay1;
        len = length;

//	bbase64 mybase64;
		
        while(!feof(fp))
        {                
                if(len>=57)
                {
          fread(datasrc,57,1,fp);
                  datasrc[57]='\0';
		 stringlen = 57;
                  len -= 57;
                }
                else if(len>0)
                {
                        fread(datasrc,len,1,fp);
                        datasrc[len]='\0';
			stringlen = len;
                        len = 0;
                }
                else
                        break;

			//	mybase64.b64encode((char *)datasrc, (char *)datades);
            //  sendlen =  Base64Enc11((unsigned char *)datades,(unsigned char *)datasrc,stringlen);

			Base64Encode22((unsigned char *)datades,(unsigned char *)datasrc,stringlen);
			// Base64Enc11((unsigned char *)datades,(unsigned char *)datasrc,stringlen);

			//	datades = (unsigned char *)encode((unsigned char *)datasrc,stringlen);
                for( timedelay=0;timedelay<1000;timedelay++)
                      for( timedelay1=0;timedelay1<1000;timedelay1++);                
     rt = send(s,(char *)datades,strlen((char *)datades),0);  
   //    rt = send(s,(char *)datades,sendlen,0);   
                if(rt == SOCKET_ERROR)
                {
                        printf("sendbase64dataerror");
                        shutdown(s,SD_BOTH);
                        close(s);
                        return -1;
                }
        }
        fclose(fp);
        send_data = "\r\n";
        rt = send(s,send_data,strlen(send_data),0);
        if(rt == SOCKET_ERROR)
        {
                shutdown(s,SD_BOTH);
                close(s);
                return -1;
        }
	
	 sprintf(tmpbuf,"--boundary=_xiezhiqiang--");
	 rt = send(s,tmpbuf,strlen(tmpbuf),0);
	 if(rt == SOCKET_ERROR)
	 {
	  shutdown(s,SD_BOTH);
	  close(s);
	  return -1;
	 }
	printf("send affix ok\n");
        return 1;
}

int End()
{
 send_data = "\r\n";
 rt = send(s,send_data,strlen(send_data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 send_data = "\r\n.\r\n";
 rt = send(s,send_data,strlen(send_data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 if(!GetResponse())
  return -1;

        send_data = "QUIT\r\n";
 rt = send(s,send_data,strlen(send_data),0);
 if(rt == SOCKET_ERROR)
 {
  shutdown(s,SD_BOTH);
  close(s);
  return -1;
 }
 if(!GetResponse())
  return -1;
 return 1;
}

int main(int argc,char *argv[])
{
/*
 char *host      = "202.108.252.140";  //smtp.tom.com
 char *username  = "****";
 char *password  = "****";
 char *m_From    = "****@****";
 char *m_To      = "****@****";
 */

 char *host      ="202.108.255.203";//"202.108.255.203";//"218.30.111.171";// "202.108.252.140";  //smtp.tom.com
 char *username  = "geejunser";
 char *password  = "19811205";
 char *m_From    = "geejunser@tom.com";
 char *m_To      = "geejunser@tom.com";

 char *m_date    = "2006-4-7,22:27";
 char *m_Subject = "the ip and mac address for ddns";
 char *m_data    = (char*)malloc(100);
        char *ip = (char*)malloc(20);
        if(argc < 1)
        {
            printf("agrv error\n");
            free(m_data);
            free(ip);
        }
        if(GetLocalAddress(ip) == -1)
 {
  printf("get lcoal ip fail\n");
  free(ip);
  return -1;
 }
 char *vmac = (char*)malloc(20);
    if(GetLocalMac(vmac) == -1)
 {
  printf("get local mac fail\n");
  free(ip);
  free(vmac);
  return -1;
 }
 sprintf(m_data,"The IP Address :%s\nThe Mac Address:%s",ip,vmac);
 //printf("%s\n",m_data);
 From      = (char*)malloc(40);//new char[40];
 To        = (char*)malloc(40);//new char[40];
 Date      = (char*)malloc(40);//new char[40];
 Subject   = (char*)malloc(40);//new char[40];
 Filename  = (char*)malloc(100);
 tmpbuf  = (char*)malloc(100);

 recv_data = (char*)malloc(512);
 userdes   = (char*)malloc(40);
 passdes   = (char*)malloc(40);
 port = 25;
 s    = INVALID_SOCKET;
 
 if(!CreateSocket())
 {
  printf("socket create error\n");
  return -1;
 }
 printf("create the scoket\n");
 if(!ConnectHost(host))
 {
  printf("can not connect the host\n");
  return -1;
 }
 printf("connect the smtp host\n");

 if(!LogIn(username,password))
 {
  printf("login error\n");
  return -1;
 }

 printf("login\n");
 if(!SendMail(m_From,m_To,m_date,m_Subject,m_data))
 {
  printf("send mail error\n");
  return -1;
 }
  printf("send mail \n");
 if(SendAffix("test.txt") != 1)
 {
	printf("send affix error\n");
 }
 if(!End())
 {
  printf("End error\n");
  return -1;
 }
 printf("send over\n");
 Destory();
 return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -