zoukankan      html  css  js  c++  java
  • C语言发送邮件

    c语言发送邮件
    Linux下使用c语言发送邮件 

    领导交代一个任务,需要将服务器上的df -hl的执行结果定时发给他。

    尝试使用sendmail来发邮件,但是后来放弃了,并不是所有的服务器上都安装了sendmail。

    于是,就用c写一个吧,还能够指定邮件服务器地址和端口,会更灵活些。

    目标是创建程序qmail,然后通过命令qmail my@163.com your.txt将your.txt的内容发送给my@163.com。

    在网上找了半天,没有一个例子能够完全跑起来,有些是提问题的,最总问题解决了却不告诉别人,这人真可恨。

    虽然这些代码都是复制粘贴来的,但是本着公益的宗旨,就不追究版权了。

     
    1
    2#include <stdio.h>
    3#include <sys/socket.h>
    4#include <sys/types.h>
    5#include <netinet/in.h>
    6#include <stdlib.h>
    7#include <string.h>
    8
    9intmain(intargc,char*argv[])
    10{
    11intsockfd =-1;
    12inticonn =-2;
    13ssize_t retConnect =-2;
    14structsockaddr_in servaddr;
    15charip[20="192.168.0.251";//设置SMTP地址
    16charsentmsg[2048="";
    17charbuf[255="";
    18charfileContent[1024="";
    19FILE*file;
    20charcin[255="";
    21
    22intlen =0;
    23while(!(argv[len]==NULL))
    24{
    25len++;
    26}
    27
    28if(len!=3)
    29{
    30printf("Usage:qmail yourname@163.com df.log ");
    31exit(0);
    32}
    33memset(fileContent,'',sizeof(fileContent));
    34if((file =fopen(argv[2], "r")) ==NULL)
    35printf("Not find file");
    36else
    37{
    38while(fgets(cin, sizeof(cin), file) !=NULL)
    39{
    40strcat(fileContent,cin);
    41memset(cin,'',sizeof(cin));
    42}
    43
    44fclose(file);
    45printf("%s",fileContent);
    46setvbuf(stdout,NULL,_IONBF,0);
    47sockfd =socket(AF_INET,SOCK_STREAM,0);//以scoket方式和邮件服务器通讯
    48if(sockfd>0)
    49{
    50printf("socket is open");
    51bzero(&servaddr,sizeof(servaddr));
    52servaddr.sin_family=AF_INET;
    53servaddr.sin_port=htons(25);
    54inet_pton(AF_INET,ip,&servaddr.sin_addr);
    55iconn =connect(sockfd,(structsockaddr *)&servaddr,sizeof(servaddr)); 
    56if(iconn==0)
    57{
    58printf("connect to 192.168.0.251 25 success!");
    59retConnect =recv(sockfd,buf,sizeof(buf),0);
    60if(retConnect==-1)
    61{
    62printf("Failed to receive msg from smtp port");
    63}
    64else
    65printf(" Server:%s ",buf);
    66memset(sentmsg,'',sizeof(sentmsg));
    67strcpy(sentmsg,"HELO SERVER ");
    68retConnect =send(sockfd,sentmsg,strlen(sentmsg),0);
    69if(retConnect==-1)
    70{
    71printf(" Failed to send meg to smtp port in step 2. ");
    72exit(1);
    73}
    74else
    75{
    76printf("%s",sentmsg);
    77}
    78memset(buf,'',sizeof(buf));
    79retConnect=recv(sockfd,buf,sizeof(buf),0);
    80if(retConnect ==-1)
    81{
    82printf(" Failed to recive meg from smtp port in step 3. ");
    83exit(1);
    84}
    85else
    86{
    87printf("%s ",buf);
    88}
    89
    90memset(sentmsg,'',sizeof(sentmsg));
    91strcpy(sentmsg,"MAIL FROM: qdcm@163.com "); 
    92strcat(sentmsg,"RCPT TO: ");
    93strcat(sentmsg,argv[1]);
    94strcat(sentmsg," ");
    95retConnect =send(sockfd,sentmsg,strlen(sentmsg),0);
    96if(retConnect>0)
    97printf("%s",sentmsg);
    98memset(buf,'',sizeof(buf));
    99retConnect=recv(sockfd,buf,sizeof(buf),0);
    100if(retConnect>0)
    101printf("%s ",buf);
    102
    103memset(sentmsg,'',sizeof(sentmsg));
    104strcpy(sentmsg,"DATA ");
    105retConnect =send(sockfd,sentmsg,strlen(sentmsg),0);
    106if(retConnect>0)
    107printf("%s",sentmsg);
    108memset(buf,'',sizeof(buf));
    109retConnect=recv(sockfd,buf,sizeof(buf),0);
    110if(retConnect>0)
    111printf("%s ",buf);
    112
    113memset(sentmsg,'',sizeof(sentmsg));
    114strcpy(sentmsg,"From:qdcm@163.com ");
    115strcat(sentmsg,"To:");
    116strcat(sentmsg,argv[1]);
    117strcat(sentmsg," ");
    118strcat(sentmsg,"Subject:QDCM Host Check Data ");
    119strcat(sentmsg,fileContent);
    120strcat(sentmsg," "); 
    121strcat(sentmsg," . ");
    122retConnect =send(sockfd,sentmsg,strlen(sentmsg),0);
    123memset(sentmsg,'',sizeof(sentmsg));
    124
    125strcpy(sentmsg,"QUIT ");
    126retConnect =send(sockfd,sentmsg,strlen(sentmsg),0);
    127if(retConnect>0)
    128printf("%s",sentmsg);
    129memset(buf,'',sizeof(buf));
    130retConnect=recv(sockfd,buf,sizeof(buf),0);
    131if(retConnect>0)
    132printf("%s ",buf);
    133
    134}
    135else
    136{
    137printf("connect 192.168.0.251 25 failed!");
    138sleep(1);
    139}
    140close(sockfd);
    141}
    142else
    143{
    144printf("open socket failed!");
    145}
    146return0;
    147}
    148
     

    使用gcc编译

    如果你是在高版本的linux下编译的,在低版本上的linux使用时会报错

    此时需要在编译时追加参数:

    gcc -Wl,--hash-style=sysv qmail.c -o qmail
  • 相关阅读:
    统一回复《怎么学JavaScript?》
    nodejs配置简单HTTP服务器
    web跨域解决方案
    JavaScript 调试小技巧
    我从编程总结的 22 个经验
    Sublime Text 3103 Crack 破解 注册码(亲测有效)
    mstsc 远程序桌面登录的 c#开发
    突然顿悟的Javascript中的this
    解决Electron加载带jquery的项目报错问题
    ES6+ 开发 React 组件
  • 原文地址:https://www.cnblogs.com/mq0036/p/3414524.html
Copyright © 2011-2022 走看看