Mail Sender

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netdb.h>

int senderr(int s, char * message){
 if((send(s, message, strlen(message), 0)) < 0){
  printf("send() error, while sending \"%s\"\n", message);
  return -1;
 }
 return 0;
}

int main(int argc, char** argv){
 if(argc < 4){
  printf("Usage: ./email <to> <from> <message>\n");
  return 0;
 }
 const struct addrinfo hints = {AI_CANONNAME, AF_INET, SOCK_STREAM, IPPROTO_TCP};
 struct addrinfo *res;
 int s;
 char * buffer;
 if((buffer = calloc(512, 1)) == NULL){
  printf("calloc() error.\n");
  return 0;
 }
 if(getaddrinfo("smtp.charter.net", "25", &hints, &res) != 0){ //or w/e server you use.
  printf("getaddrinfo() error.\n");
  return 0;
 }
 if((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){
  printf("socket() error.\n");
  return 0;
 }
 if(connect(s, res->ai_addr, res->ai_addrlen) < 0){
  printf("connect() error.\n");
  return 0;
 }
 senderr(s, "HELO hi\r\n");
 sprintf(buffer, "MAIL FROM: %s\r\n", argv[2]);
 if(senderr(s, buffer) < 0) return 0;
 memset(buffer, 0, 512);
 sprintf(buffer, "RCPT TO: %s\r\n", argv[1]);
 if(senderr(s, buffer) < 0) return 0;
 memset(buffer, 0, 512);
 if(senderr(s, "DATA\r\n") < 0) return 0;
 sprintf(buffer, "%s\r\n.\r\n", argv[3]);
 if(senderr(s, buffer) < 0) return 0;
 senderr(s, "QUIT\r\n");
 return 0;
}

posted on 2011-03-08 21:45 挑灯看剑 阅读(208) 评论(0)  编辑 收藏 引用 所属分类: C/C++

只有注册用户登录后才能发表评论。
<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

公告

【自我介绍】 08年南开大学硕士毕业 最近关注:算法、Linux、c++、高并发 爱好:滑旱冰、打乒乓球、台球、保龄球

常用链接

随笔分类(139)

文章分类

我常去的网站

技术博客(都是大牛)

技术站点

搜索

积分与排名