仿照,SMTP协议初探(一)--我的前一篇博客,结合网上的材料,利用socket,写了个Linux下c编程实现的发邮件程序。

大家可以拿自己的邮箱去做实验啦,base64是一种编码方式,网上可以找到一个网页,可以查询密码的base64编码是多少。当然也可以自己手工计算(我没试过)。

具体源码如下:

//#include<iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
//using namespace std;
#define EHLO "EHLO ***\r\n" //***为邮箱用户名
#define DATA "data\r\n"
#define QUIT "QUIT\r\n" //#define h_addr h_addr_list[0]
//FILE *fin;
int sock;
struct sockaddr_in server;
struct hostent *hp, *gethostbyname();
char buf[BUFSIZ+1];
int len;
char *host_id="smtp.126.com";
char *from_id="***@126.com";
char *to_id="60462****@qq.com";
char *sub="testmail\r\n";
char wkstr[100]="hello how r u\r\n";      /*=====Send a string to the socket=====*/
void send_socket(char *s)
{         write(sock,s,strlen(s));         //write(1,s,strlen(s));         //printf("Client:%s\n",s);
}      //=====Read a string from the socket=====*/
void read_socket()
{len = read(sock,buf,BUFSIZ);write(1,buf,len);//printf("Server:%s\n",buf);
}      /*=====MAIN=====*/
int main(int argc, char* argv[])
{      /*=====Create Socket=====*/sock = socket(AF_INET, SOCK_STREAM, 0);     if (sock==-1)     {perror("opening stream socket");//exit(1);  return 1;   }     else       //cout << "socket created\n";printf("socket created\n");/*=====Verify host=====*/server.sin_family = AF_INET;hp = gethostbyname(host_id);if (hp==(struct hostent *) 0){fprintf(stderr, "%s: unknown host\n", host_id);//exit(2);return 2;}/*=====Connect to port 25 on remote host=====*/memcpy((char *) &server.sin_addr, (char *) hp->h_addr, hp->h_length);                       server.sin_port=htons(25); /* SMTP PORT */if (connect(sock, (struct sockaddr *) &server, sizeof server)==-1){perror("connecting stream socket");//exit(1);return 1;}     else       //cout << "Connected\n";printf("Connected\n");/*=====Write some data then read some =====*/read_socket(); /* SMTP Server logon string */send_socket(EHLO); /* introduce ourselves */read_socket(); /*Read reply *//***added by fupeng*/send_socket("AUTH LOGIN");send_socket("\r\n");read_socket();send_socket("*******");//用户名的base64编码send_socket("\r\n");read_socket();send_socket("******");//密码的base64编码send_socket("\r\n");read_socket();send_socket("mail from <");send_socket(from_id);send_socket(">");send_socket("\r\n");read_socket(); /* Sender OK *///send_socket("VRFY ");//send_socket(from_id);//send_socket("\r\n");     //read_socket(); // Sender OK */send_socket("rcpt to <"); /*Mail to*/send_socket(to_id);send_socket(">");send_socket("\r\n");read_socket(); // Recipient OK*/send_socket(DATA);// body to follow*/read_socket(); //send_socket("from:***@126.com");send_socket("subject:");send_socket(sub);//read_socket(); // Recipient OK*/send_socket("\r\n\r\n");send_socket(wkstr);send_socket(".\r\n");read_socket();send_socket(QUIT); /* quit */read_socket(); // log off *///=====Close socket and finish=====*/close(sock);//exit(0);return 0;
} 

具体结果如下图片所示:

转载于:https://www.cnblogs.com/hehehaha/archive/2013/02/25/6332950.html

SMTP协议初探(二)----linux下c编程实现发邮件相关推荐

  1. 【协议森林】Linux下socket编程KEEPALIVE使用与原理

    1.简介 在实际项目开发中,TCP连接关闭主要有两种情况: 1.连接正常关闭,调用close() .shutdown()连接优雅关闭,send与recv立马返回错误: 2.连接的对端异常关闭,比如拔掉 ...

  2. linux下使用网易邮箱发邮件

    0x0 最近要写个脚本监视系统运行情况,有异常及时通过邮件通知我. 本次测试中使用网易的邮箱作为邮件发送服务器(邮箱账号需要开启smtp服务如下图),由于网易邮箱验证比较严格,需要进行一些额外操作才可 ...

  3. Linux下网络编程

    Linux下网络编程初步 Linux以其源代码公开闻名于世,并以其稳定性和可靠性雄霸操作系统领域,在网络应用技术方面使用得更加广泛.很久以来它就是Windows的重要对手之一.随着网络时代的来临,Li ...

  4. Linux 下的编程工具

    Linux 下的编程工具 BBS水木清华站∶精华区 发信人: Kongming (没日没夜...), 信区: Linux         标  题: Re: 如何学习linux下编程?  发信站: B ...

  5. Linux下Socket编程

    Linux下Socket编程    网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的S ...

  6. linux实验串行端口程序设计,Linux下串口编程心得(转)

    最近一段时间,需要完成项目中关于Linux下使用串口的一个部分,现在开帖记录过程点滴. 项目的要求是这样的,Qt应用程序主要完成数据采集和发送功能,一开始在google中海搜关键字"Qt串口 ...

  7. Linux下libxml2编程基础

    Linux下libxml2编程基础 一.libxml2的简介 xml是一个实现读.创建.以及操作xml数据功能的C语言库.并且支持XPATH查询,以及部分的支持XSLT转换等的功能. libxml2的 ...

  8. linux下C++编程学习

    前言(废话,可略过):之前一直在windows下做C++编程,后来换后台工作接触到linux下C++开发.期间磨磨唧唧浪费了很多时间.记录下历程,给后来的小伙伴提个醒,免得浪费宝贵时间. 一.关于换系 ...

  9. Linux 下串口编程(C++ 程序设计)

    串口通信是最简单的通信方式.即使在USB 非常流行的今天,依然保留了串行通信的方式.网络上已经有大量关于Linux下 C++ 串口编程的文章,但是我依然要写这篇博文.因为网络上的资料不是内容太多,就是 ...

最新文章

  1. Powershell管理系列(八)Exchange 2013通讯组管理
  2. Unity3D 集成 Face++ FacePlusPlus httpClient http协议 byte数组转string
  3. LightOJ 1259 Goldbach`s Conjecture 素数打表
  4. python 类属性排序_Python实现多属性排序的方法
  5. 如何安装最新版本的 SAP ABAP Development Tool ( ADT ) 2021年度更新
  6. mapreduce排序算法_MapReduce算法–二级排序
  7. 你会给别人提反馈吗?
  8. .netframework3.5 中TimeZoneInfo 类的使用
  9. MYSQL 表 部分数据导出、导入
  10. Java 中的线程管理概念梳理
  11. rust腐蚀服务端设置_腐蚀怎么联机?搭建服务器教程一览
  12. ad19pcb所有元件都在报错_AD09如何放置过孔阵列?Allegro PCB,元器件高度限制区域设置?...
  13. QT中关于书签的操作
  14. c# 使用NOPI 操作Excel
  15. 查看文件和文件夹大小
  16. android微信hook过滤检测,Hook实现Android 微信,陌陌 ,探探位置模拟
  17. 如何利用魔棒工具抠图_PS怎么抠图?魔棒工具抠图详细步骤教程-Photoshop教程
  18. js在赛码网中的输入/输出问题
  19. 基于安卓Android和SSH的汽车票管理系统设计与实现
  20. 2023年深圳Java培训机构排名,不看后悔系列!

热门文章

  1. C语言第12轮:指针
  2. 每个Java程序员必须知道的5个JVM命令行标志
  3. channel9.msdn.com 微软虚拟学院MVA系列视频课程
  4. 图示SaaS:走向平台化,会产生什么变化?
  5. “2007中国软件技术英雄会”之微软中国研发集团开放日
  6. python实现get请求 模块_python爬虫 基于requests模块发起ajax的get请求实现解析
  7. android中json解析及使用(中)
  8. 动态添加TemplateField列
  9. flash(as3.0)在线聊天室
  10. 由“从按下回车到网页显示”粗谈网页优化