文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言如何实现发送邮件功能

2023-07-02 09:23

关注

这篇文章主要介绍了C语言如何实现发送邮件功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言如何实现发送邮件功能文章都会有所收获,下面我们一起来看看吧。

首先需要知道发送邮件的服务器IP地址和端口,我这里使用的是网易的126邮箱,如果是其他邮箱需要替换成其他的邮箱域名,域名和端口一般可以在邮箱网页的帮助项里面找到。用域名比较方便维护以免后续更换ip之后还要修改代码。

发送邮件一共需要8个步骤,具体见代码main函数里面的注释

代码中的用户名密码以及收件人发件人等信息需要修改为你自己的。而且用户名和密码需要进行base64编码后才能发送,具体base64算法没有贴了,百度上到处都是。

完整代码如下:

#include <stdio.h>#include <stdlib.h>#include "winsock2.h"extern int Base64Encod(char * data,char *output,int len,int *oputlen);#define EMAIL_SERVER     "smtp.126.com"  //按需修改int CreateSocketAndConnect(){    struct sockaddr_in server_addr;    struct hostent *Addr;    int ret;    int sock = socket(AF_INET, SOCK_STREAM, 0);    if(sock < 0){        printf("sock create failed\n");        return -1;    }    Addr = gethostbyname(EMAIL_SERVER);    //用域名获取对应IP    if(Addr == NULL){        printf("get ip error\n");        return -1;    }    server_addr.sin_family = AF_INET;    server_addr.sin_port = htons(25);    server_addr.sin_addr.S_un.S_addr = (*(struct in_addr*)Addr->h_addr_list[0]).S_un.S_addr;    ret = connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr));    if(ret < 0){        printf("connect server failed\n");        return -1;    }    return sock;}int server_send_recv_display(int sock, char *buff){    int ret = 0;    char recvbuff[320] = {0};    send(sock, buff, strlen(buff), 0);    ret = recv(sock, recvbuff, 320, 0);    printf("服务器返回消息:len = %d \n recv:[%s] \n",ret,recvbuff);    return ret;}int email_send_helo_fun(int sock){    char buff[320] = {0};    int ret;    sprintf(buff, "HELO 126.com\r\n");    ret = server_send_recv_display(sock, buff);    if(ret <= 0)    {        return -1;    }    return 0;}int email_send_authlogin_fun(int sock){    char buff[320] = {0};    int ret;    sprintf(buff,"%s","AUTH LOGIN\r\n");    ret = server_send_recv_display(sock, buff);    if(ret <= 0)    {        return -1;    }    return 0;}//发送用户名int email_send_username_fun(int sock){    char buff[320] = {0};    char encbuff[120] = {0};    int ret, len = 0;    sprintf(buff, "xxxxxxxxxx@126.com");    //需要改成自己的用户名    Base64Encod(buff, encbuff, strlen(buff), &len);    memset(buff, 0x00, sizeof(buff));    sprintf(buff,"%s\r\n",encbuff);    ret = server_send_recv_display(sock, buff);    if(ret <= 0)    {        return -1;    }    return 0;}//发送密码int email_send_password_fun(int sock){    char buff[320] = {0};    char encbuff[120] = {0};    int ret, len = 0;    sprintf(buff, "123456789");          //需要改成自己的密码,有的邮箱是需要填授权码不是登录用的密码    Base64Encod(buff, encbuff, strlen(buff), &len);    memset(buff, 0x00, sizeof(buff));    sprintf(buff, "%s\r\n", encbuff);    ret = server_send_recv_display(sock, buff);    if(ret < 0){        return -1;    }    return 0;}//发送发件人int email_send_from_fun(int sock){    char buff[320] = {0};    int ret;    sprintf(buff, "MAIL FROM: <xxxxxxxxxx@126.com>\r\n");    ret = server_send_recv_display(sock, buff);    if(ret < 0){        return -1;    }    return 0;}//发送收件人int email_send_to_fun(int sock){    char buff[320] = {0};    int ret;    sprintf(buff, "RCPT TO: <xxxxxx@163.com>\r\n");    ret = server_send_recv_display(sock, buff);    if(ret < 0){        return -1;    }    return 0;}//通知服务器准备发送邮件int email_send_ready_fun(int sock){    char buff[320] = {0};    int ret;    sprintf(buff, "DATA\r\n");    ret = server_send_recv_display(sock, buff);    if(ret < 0){        return -1;    }    return 0;}//发送邮件int email_send_maintext_fun(int sock){    char buff[320] = {0};    int ret;    sprintf(buff, "From: \"pc\"<xxxxxxxxxx@126.com>\r\n"        //发件人                  "To: \"con\"<xxxxxx@163.com>\r\n"             //收件人                  "Subject: email test\r\n\r\n"                 //主题                  "test:\r\n"                                   //正文, 以 \r\n.\r\n 结束                  "    line1\r\n"                  "    line2\r\n.\r\n");    ret = server_send_recv_display(sock, buff);    if(ret < 0){        return -1;    }    return 0;}#define MAX_BUFF_SIZE    512int main(){    int sock;    char buff[MAX_BUFF_SIZE];    WSADATA wsa;    int ret;    if(WSAStartup(MAKEWORD(1,1), &wsa) != 0){        printf("WSA startup failed\n");        return 1;    }    sock = CreateSocketAndConnect();    if(sock < 0){        return -1;    }    printf("connect to server success\n");    memset(buff, 0x00, sizeof(buff));    while(1){        ret = recv(sock, buff, MAX_BUFF_SIZE, 0);        if(ret < 0){            printf("recv error\n");            continue;        }        printf("%s", buff);        break;    }    //1.send helo    if(email_send_helo_fun(sock) < 0){        return 1;    }    //2.send auth login    if(email_send_authlogin_fun(sock) < 0){        return 1;    }    //3.send username    if(email_send_username_fun(sock) < 0){        return 1;    }    //4.send password    if(email_send_password_fun(sock) < 0){        return 1;    }    //5.send from    if(email_send_from_fun(sock) < 0){        return 1;    }    //6.send to    if(email_send_to_fun(sock) < 0){        return 1;    }    //7.send notice ready    if(email_send_ready_fun(sock) < 0){        return 1;    }    //8.send email    if(email_send_maintext_fun(sock) < 0){        return 1;    }    closesocket(sock);    return 0;}

关于“C语言如何实现发送邮件功能”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C语言如何实现发送邮件功能”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯