原文:http://apps.hi.baidu.com/share/detail/18176963

#ifdef WIN32

#include

#include

#else

#include

#include

#include

#include

#include

#include

#include

#endif

struct data6

{

unsigned int d4:6;

unsigned int d3:6;

unsigned int d2:6;

unsigned int d1:6;

};

// 协议中加密部分使用的是base64方法

char con628(char c6);

void base64(char *dbuf,char *buf128,int len);

void sendemail(char *email,char *body);

int open_socket(struct sockaddr *addr);

int main()

{

char email[] = "987654321@qq.com";

char body[] = "From: \"lucy\"<123456789@qq.com>\r\n"

"To: \"dasiy\"<987654321@qq.com>\r\n"

"Subject: Hello\r\n\r\n"

"Hello World, Hello Email!";

sendemail(email, body);

return 0;

}

char con628(char c6)

{

char rtn = '\0';

if (c6 < 26) rtn = c6 + 65;

else if (c6 < 52) rtn = c6 + 71;

else if (c6 < 62) rtn = c6 - 4;

else if (c6 == 62) rtn = 43;

else rtn = 47;

return rtn;

}

// base64的实现

void base64(char *dbuf, char *buf128, int len)

{

struct data6 *ddd = NULL;

int i = 0;

char buf[256] = {0};

char *tmp = NULL;

char cc = '\0';

memset(buf, 0, 256);

strcpy(buf, buf128);

for(i = 1; i <= len/3; i++)

{

tmp = buf+(i-1)*3;

cc = tmp[2];

tmp[2] = tmp[0];

tmp[0] = cc;

ddd = (struct data6 *)tmp;

dbuf[(i-1)*4+0] = con628((unsigned int)ddd->d1);

dbuf[(i-1)*4+1] = con628((unsigned int)ddd->d2);

dbuf[(i-1)*4+2] = con628((unsigned int)ddd->d3);

dbuf[(i-1)*4+3] = con628((unsigned int)ddd->d4);

}

if(len%3 == 1)

{

tmp = buf+(i-1)*3;

cc = tmp[2];

tmp[2] = tmp[0];

tmp[0] = cc;

ddd = (struct data6 *)tmp;

dbuf[(i-1)*4+0] = con628((unsigned int)ddd->d1);

dbuf[(i-1)*4+1] = con628((unsigned int)ddd->d2);

dbuf[(i-1)*4+2] = '=';

dbuf[(i-1)*4+3] = '=';

}

if(len%3 == 2)

{

tmp = buf+(i-1)*3;

cc = tmp[2];

tmp[2] = tmp[0];

tmp[0] = cc;

ddd = (struct data6 *)tmp;

dbuf[(i-1)*4+0] = con628((unsigned int)ddd->d1);

dbuf[(i-1)*4+1] = con628((unsigned int)ddd->d2);

dbuf[(i-1)*4+2] = con628((unsigned int)ddd->d3);

dbuf[(i-1)*4+3] = '=';

}

return;

}

// 发送邮件

void sendemail(char *email, char *body)

{

int sockfd = 0;

struct sockaddr_in their_addr = {0};

char buf[1500] = {0};

char rbuf[1500] = {0};

char login[128] = {0};

char pass[128] = {0};

#ifdef WIN32

WSADATA WSAData;

WSAStartup(MAKEWORD(2, 2), &WSAData);

#endif

memset(&their_addr, 0, sizeof(their_addr));

their_addr.sin_family = AF_INET;

their_addr.sin_port = htons(25);

their_addr.sin_addr.s_addr = inet_addr("112.90.141.71");//qq smtp 服务器

// 连接邮件服务器,如果连接后没有响应,则2 秒后重新连接

sockfd = open_socket((struct sockaddr *)&their_addr);

memset(rbuf,0,1500);

while(recv(sockfd, rbuf, 1500, 0) == 0)

{

printf("reconnect...\n");

Sleep(2);

//close(sockfd);

sockfd = open_socket((struct sockaddr *)&their_addr);

memset(rbuf,0,1500);

}

printf("%s\n", rbuf);

// EHLO

memset(buf, 0, 1500);

sprintf(buf, "EHLO abcdefg-PC\r\n");

send(sockfd, buf, strlen(buf), 0);

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

printf("%s\n", rbuf);

// AUTH LOGIN

memset(buf, 0, 1500);

sprintf(buf, "AUTH LOGIN\r\n");

send(sockfd, buf, strlen(buf), 0);

printf("%s\n", buf);

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

printf("%s\n", rbuf);

// USER

memset(buf, 0, 1500);

sprintf(buf,"12345678");//你的qq号

memset(login, 0, 128);

base64(login, buf, strlen(buf));

sprintf(buf, "%s\r\n", login);

send(sockfd, buf, strlen(buf), 0);

printf("%s\n", buf);

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

printf("%s\n", rbuf);

// PASSWORD

sprintf(buf, "qqpassword");//你的qq密码

memset(pass, 0, 128);

base64(pass, buf, strlen(buf));

sprintf(buf, "%s\r\n", pass);

send(sockfd, buf, strlen(buf), 0);

printf("%s\n", buf);

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

printf("%s\n", rbuf);

// MAIL FROM

memset(buf, 0, 1500);

sprintf(buf, "MAIL FROM: <123456789@qq.com>\r\n");

send(sockfd, buf, strlen(buf), 0);

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

printf("%s\n", rbuf);

// RCPT TO 第一个收件人

sprintf(buf, "RCPT TO:\r\n", email);

send(sockfd, buf, strlen(buf), 0);

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

printf("%s\n", rbuf);

// DATA 准备开始发送邮件内容

sprintf(buf, "DATA\r\n");

send(sockfd, buf, strlen(buf), 0);

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

printf("%s\n", rbuf);

// 发送邮件内容,\r\n.\r\n内容结束标记

sprintf(buf, "%s\r\n.\r\n", body);

send(sockfd, buf, strlen(buf), 0);

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

printf("%s\n", rbuf);

// QUIT

sprintf(buf, "QUIT\r\n");

send(sockfd, buf, strlen(buf), 0);

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

printf("%s\n", rbuf);

// VC2005 需要使用

closesocket(sockfd);

//close(sockfd);

#ifdef WIN32

WSACleanup();

#endif

return;

}

// 打开TCP Socket连接

int open_socket(struct sockaddr *addr)

{

int sockfd = 0;

sockfd=socket(PF_INET, SOCK_STREAM, 0);

if(sockfd < 0)

{

fprintf(stderr, "Open sockfd(TCP) error!\n");

exit(-1);

}

if(connect(sockfd, addr, sizeof(struct sockaddr)) < 0)

{

fprintf(stderr, "Connect sockfd(TCP) error!\n");

exit(-1);

}

return sockfd;

}

c语言发邮件,c语言利用SMTP协议发送邮件相关推荐

  1. php smtp邮件类,php利用smtp类发送邮件

    本篇文章主要介绍php利用smtp类发送邮件,感兴趣的朋友参考下,希望对大家有所帮助. 以下就是核心代码:<?php require_once "email.class.php&quo ...

  2. 利用smtp协议实现命令行发送邮件

    事实上只要知道邮件准确服务器的地址,即使没有邮箱也能给它发邮件,这里使用smtp协议演示使用电脑黑框发邮件. 先介绍一下smtp协议,smtp协议是简单邮件传输协议,在本例中相当于中转服务器. 任务 ...

  3. 如何用c语言编写发邮件程序,想学C语言发邮件程序?5分钟教会你:附送源码+教学!...

    关注<一碳科技>,获取更多知识! 前言 相信大家都有过被C语言网络编程所支配的恐惧吧?其实,小编在刚刚学习这方面的知识的时候也有这样的感受,并且所有的资料都是从网络寻找的,但是,现在你们不 ...

  4. python3:利用SMTP协议发送QQ邮件+附件

    转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...

  5. Linux 平台使用smtp协议发送邮件

    Linux平台使用smtp协议 发送邮件 前言 项目简介 项目开发环境 项目代码 测试结果以及存在问题 写在最后 前言 本人第一次写博客,主要目的是想记录一下自己的学习结果,本篇博客内容纯手打,参考资 ...

  6. SMTP协议发送邮件

    网上找了一个smtp邮箱的发送工具类,还行,用我自己的qq测试可以发送package com.exampleimport javax.mail.Address; import javax.mail.S ...

  7. smtp协议源ip是服务器地址吗,Smtp协议发送邮件

    Smtp协议发送邮件,是最全面的smtp协议发送邮件教程!有助于新手快速入门,从而跟好的进阶学习.本文档内容丰富,知识全面,简单易懂 Smtp协议发送邮件 MTP(Simple Mail Transf ...

  8. Python 使用SMTP协议发送邮件

    引言 问题基于<计算机网络自定向下>第二章的课后套接字编程作业:邮件客户 题目的下载链接:python 压缩包 题目如下: 这个实验结束时,您将能够更好地了解SMTP协议.您还将获得使用P ...

  9. 利用SMTP协议实现邮件的发送(以163和qq邮箱为例)

    1.实验的准备即环境 1.windows系统 2.telnet 客户端 win10除了需要开启客户端之外还不够,还需要自己下载 telnet server并安装,下载官网:GoodTech Syste ...

最新文章

  1. 2020长沙“科技之星”榜单重磅揭晓,近百家企业凭实力“出道”!
  2. 判断滚动条是否到某个位置,还有滑动的方向,以此来判断什么时候阻止滚动条滚动...
  3. 戏说 Windows GDI (2)
  4. Struts自定义拦截器拦截器工作原理
  5. python自然语言分析 何翠仪_如何用 Python 中的 NLTK 对中文进行分析和处理?
  6. 新年中国节必备背景素材|传统纹样,这便是中国之美!
  7. javascript 模拟滚动 隐藏滚动条
  8. SQL Server和Oracle数据库索引介绍
  9. 能解决 80% 故障的排查思路
  10. win7 计算机定时关机脚本,win7定时关机命令是什么 如何设置定时关机【图解】...
  11. 十一、 人工变量之 “大M” 法
  12. 量子计算基础——量子测量
  13. 神州数码笔试题C语言,神州数码笔试
  14. 三亚旅游攻略-自由人实用指南
  15. android登录功能实现代码,功能强大的登录界面Android实现代码
  16. 刘宇凡:海子,一个孤独的灵魂诗人
  17. 「win10右键菜单修改名称」
  18. centos 防火墙关闭 不能访问3306端口
  19. 查看创表语句 SHOW CREATE TABLE t_idcard
  20. 弘辽科技:淘宝直通车智能推广报告如何解?

热门文章

  1. 大数据笔记9—java基础篇5(API)
  2. 面试经验|2月最新映客直播一面+二面
  3. Windows 7系统中被忽略的七个实用功能
  4. 岁月不居,天道酬勤,业道酬精
  5. android alarmmanager定时任务,AlarmManager 定时任务详解
  6. 计算机病毒的基本知识
  7. kpw1 5.6降级
  8. 全角转半角与半角转全角
  9. 2021年中式烹调师(初级)考试题库及中式烹调师(初级)作业考试题库
  10. 互联网金融大事件,从泛亚到e租宝敲响的警示钟?