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\n");
31exit(0);
32}
33memset(fileContent,'\0',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,'\0',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("\nServer:%s\n",buf);
66memset(sentmsg,'\0',sizeof(sentmsg));
67strcpy(sentmsg,"HELO SERVER\r\n");
68retConnect =send(sockfd,sentmsg,strlen(sentmsg),0);
69if(retConnect==-1)
70{
71printf("\nFailed to send meg to smtp port in step 2.\n");
72exit(1);
73}
74else
75{
76printf("%s",sentmsg);
77}
78memset(buf,'\0',sizeof(buf));
79retConnect=recv(sockfd,buf,sizeof(buf),0);
80if(retConnect ==-1)
81{
82printf("\nFailed to recive meg from smtp port in step 3.\n");
83exit(1);
84}
85else
86{
87printf("%s\n",buf);
88}
89
90memset(sentmsg,'\0',sizeof(sentmsg));
91strcpy(sentmsg,"MAIL FROM: qdcm@163.com\r\n"); 
92strcat(sentmsg,"RCPT TO: ");
93strcat(sentmsg,argv[1]);
94strcat(sentmsg,"\r\n");
95retConnect =send(sockfd,sentmsg,strlen(sentmsg),0);
96if(retConnect>0)
97printf("%s",sentmsg);
98memset(buf,'\0',sizeof(buf));
99retConnect=recv(sockfd,buf,sizeof(buf),0);
100if(retConnect>0)
101printf("%s\n",buf);
102
103memset(sentmsg,'\0',sizeof(sentmsg));
104strcpy(sentmsg,"DATA\r\n");
105retConnect =send(sockfd,sentmsg,strlen(sentmsg),0);
106if(retConnect>0)
107printf("%s",sentmsg);
108memset(buf,'\0',sizeof(buf));
109retConnect=recv(sockfd,buf,sizeof(buf),0);
110if(retConnect>0)
111printf("%s\n",buf);
112
113memset(sentmsg,'\0',sizeof(sentmsg));
114strcpy(sentmsg,"From:qdcm@163.com\r\n");
115strcat(sentmsg,"To:");
116strcat(sentmsg,argv[1]);
117strcat(sentmsg,"\r\n");
118strcat(sentmsg,"Subject:QDCM Host Check Data\r\n\r\n");
119strcat(sentmsg,fileContent);
120strcat(sentmsg,"\r\n"); 
121strcat(sentmsg,"\r\n.\r\n");
122retConnect =send(sockfd,sentmsg,strlen(sentmsg),0);
123memset(sentmsg,'\0',sizeof(sentmsg));
124
125strcpy(sentmsg,"QUIT\r\n");
126retConnect =send(sockfd,sentmsg,strlen(sentmsg),0);
127if(retConnect>0)
128printf("%s",sentmsg);
129memset(buf,'\0',sizeof(buf));
130retConnect=recv(sockfd,buf,sizeof(buf),0);
131if(retConnect>0)
132printf("%s\n",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
出处:http://hi.baidu.com/zsg86/item/2b31af2a1ab19bdca417b637

转载于:https://www.cnblogs.com/mq0036/p/3414524.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux虚拟主机泛解析,Apache虚拟主机的配置和泛域名解析实现代码

Apache虚拟主机的配置和泛域名解析实现代码更新时间&#xff1a;2012年03月11日 00:28:19 作者&#xff1a;Apache虚拟主机的配置和泛域名解析实现代码&#xff0c;需要的朋友可以参考下虚拟主机的配置基于IP地址的虚拟主机配置Listen 80DocumentRoot /www/jb51ServerName ww…

GetBuffer与ReleaseBuffer的用法

GetBuffer与ReleaseBuffer的用法&#xff0c;CString剖析2008-06-07 22:39 这是一个非常容易被用错的函数&#xff0c;主要可能是由于大家对它的功能不太了解。其实点破的话&#xff0c;也不是那么深奥。 GetBuffer(int size)是用来返回一个你所指定大小可写内存的成员方法。它…

Linux 路径和目录问题

相对路径和绝对路径 绝对路径&#xff1a; 一定要从跟目录写起&#xff0c;比如/usr/share.doc 相对路径&#xff0c;不是由/写起的&#xff0c;相对指的是相对于目前的工作目录的路径。比如cd ../man&#xff0c;..指的是上一级目录 目录的相关操作&#xff1a; . 此层目录 ..…

关于js中function(e) e的理解

e是事件&#xff0c;在firefox中只能在事件现场使用window.event&#xff0c;所以只有把event传给函数使用。 为了兼容FF和其它浏览器&#xff0c;一般会在函数里重新给e赋值&#xff1a;e window.event || e;也就是说&#xff0c;如果window.event存在&#xff0c;则该浏览器…

socket用法linux,linux socket编程,要用到哪些函数,和用法介绍?_Linux_天涯问答_天涯社区...

4、获得地址信息/* 来源: http://www.jfox.info/c/a/ic/18071a.html */#include #include /* for strncpy */#include #include #include #include #include intmain(){int fd;struct ifreq ifr;fd socket(AF_INET, SOCK_DGRAM, 0);/* I want to get an IPv4 IP address */if…

深入浅出 RPC - 浅出篇+深入篇

摘自: http://blog.csdn.net/mindfloating/article/details/39473807 近几年的项目中&#xff0c;服务化和微服务化渐渐成为中大型分布式系统架构的主流方式&#xff0c;而 RPC 在其中扮演着关键的作用。在平时的日常开发中我们都在隐式或显式的使用 RPC&#xff0c;一些刚入行…

[iPhone开发]UIWebview 嵌入 UITableview

UIWebview 嵌入UITableview, 将UIWebview 加入到UITableview的cell里面&#xff0c;而且&#xff0c;将UIWebview 的高度设为内容的高度&#xff0c;内容的高度&#xff0c;可以当UIWebview 载入完成之后&#xff0c;从UIWebview 的子view中找到scrollView&#xff0c;这个scro…

把A表中的a字段和b字段数据 复制到B表中的aa字段和bb字段

insert into tab2 (column1,column2) select column1,column2 from tab1 转载于:https://www.cnblogs.com/jthb/p/3423175.html

linux如何备份网站,linux怎么备份网站

云服务器备份 CSBS云服务器备份(Cloud Server Backup Service)为云服务器下所有云硬盘创建一致性在线备份&#xff0c;无需关机。针对病毒入侵、人为误删除、软硬件故障等场景&#xff0c;可将数据恢复到任意备份点&#xffe5;0.268&#xffe5;0.2/GB/月通过自定义脚本实现SA…

Docker热点文章链接 - 持续更新

docker技术的不断更新让我只能不停奔跑&#xff1a;Docker官方网站Chris Richardson 微服务系列DaoCloud博客 2016/6/23 (周四) 12:48 DockerCon 2016 D1&#xff5c;自身集成编排&#xff0c;Docker 意欲清场&#xff1f;DockerCon 2016 D2&#xff5c;剑指商业化Docker 1.11&…

图灵访谈系列之一:陈世欣谈产品经理与社区

原文链接地址&#xff1a;点击打开链接 10月20日&#xff0c;产品经理社区PMCamp、极客社区TopGeek的发起者和组织者陈世欣先生来图灵做客&#xff0c;畅谈对产品经理成长和社区发展的看法。以下为图灵社区整理的相关谈话内容。 人物简介&#xff1a; 陈世欣 StingChen产品经理…

C#中Hashtable的用法

在封装题库的时候&#xff0c;发现传实体很受限制&#xff0c;每个题型都需要建立不同的实体&#xff0c;这 样封装的时候就需要将实体一起封装&#xff0c;而且添加新题型的也不够灵活&#xff0c;这样就想到了 HashTable&#xff0c;让所有的题型都使用HashTable来传参&#…

kdbg调试linux汇编,Ubuntu 16.04安装Kdbg替代Insight实现汇编的调试

ibatis XML标签的含义selectKey: 有3个主要的属性: 1)resultClass:返回的主键的数据类型,跟sqlMap中的数据类型一致: 2)type:表示主键在insert之前或之后生成(取决于 ...raspberry 烧写镜像到SD卡刚开始接触树莓派,需要烧写系统镜像到SD卡,网上找了些资料,记录于此. ra…

Jenkins 使用 maven 出现C:\Windows\system32\config\systemprofile的解决

jenkins 使用 maven 出现 C:\Windows\system32\config\systemprofile 的原因是 Jenkins 服务启动的账号使用了系统的账号&#xff0c;在服务里改成具体的桌面用户账号即可。 If your command runs fine on Win command prompt as user X, then you should run Jenkins with the…

mediawiki禁止注册

只允许管理员代为注册&#xff0c;在LocalSettings.php中增加: $wgGroupPermissions array(); $wgGroupPermissions[’*’ ][’createaccount’] false; $wgGroupPermissions[’*’ ][’read’] true; $wgGroupPermissions[’*’ ][’edit’] false; $wgGroupPermissions[’…

在Linux下用源码编译安装apache2

Linux下安装一个软件&#xff0c;最好去看下它的官方guide&#xff0c;apache2.4的安装安装guide 0. installation guide http://httpd.apache.org/docs/2.4/install.html 然后是下载源码 1. download http2.4&#xff0c; 下载地址 下载好了以后&#xff0c;把它解压到一个路…

c语言第十五周答案,C语言考前练习试题及答案

C语言考前练习试题及答案天行健&#xff0c;君子以自強不息&#xff0c;地勢坤&#xff0c;君子以厚德载物。以下是小编为大家搜索整理的C语言考前练习试题及答案&#xff0c;希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!一、选择题(每小题1分&#xff0…

表格存储技术方案实践及客户案例分享

表格存储是一款2014年10月份正式商业化的NoSQL数据存储服务&#xff0c;在商业化之前&#xff0c;早在2010年就在阿里云内部开始使用&#xff0c;云邮箱和云OS都是表格存储最早的一批用户。到目前&#xff0c;无论是在阿里集团内部还是在公共云环境上&#xff0c;在移动社交、金…

delphi 打开资源管理器并定位到指定目录下的文件

可以与 Explorer.exe 一起使用的命令行选项有&#xff1a;/n、/e、/root&#xff08;加上一个对象&#xff09;和 /select&#xff08;加上一个对象&#xff09;。 usesShellAPI;ShellExecute(Handle,nil,Explorer.exe,PChar(Format(/e,/select,%s, [GLogger.CurrFileName])),n…

psp前景与范围文档

前景与范围文档 文档状态: [ ]草稿 [ ]正式发布 [√]正在修改 当前版本版本1作者XXX,XX完成日期2013-11-14 1.业务需求 1.1应用背景 在规定时间内不能完成任务的情况时有发生,这对整个项目的研发带来了很大的困扰,阻碍了项目的进展速度.对于如何去分配给一个开发人员的任务量…