`

C语言 发送电子邮件

阅读更多
我用C 语言实现了连接126邮件服务器发送邮件,网上有很多例子,我下了,没有一个能运行起来的,这个是用netbean测试,没有问题了,下面是我的代码(要改三处地方:用户名\密码\发送邮件):
#include <stdio.h>
#include <winsock2.h>
#include <stdlib.h>
#include <string.h>

//#pragma comment(lib,"ws2_32.lib")

// Function prototype
void StreamClient(char *szServer, short nPort, char *szMessage);
// Helper macro for displaying errors
#define PRINTERROR(s) \
fprintf(stderr,"\n%: %d\n", s, WSAGetLastError())



////////////////////////////////////////////////////////////



int main(int argc, char **argv)
{
        char hostname[255];

WORD wVersionRequested = MAKEWORD(2,0);
WSADATA wsaData;
int nRet;
short nPort;

nPort =25;
nRet = WSAStartup(wVersionRequested, &wsaData);

StreamClient("smtp.126.com", nPort, "AUTH LOGIN\r\n");


WSACleanup();
        return 0;
}

////////////////////////////////////////////////////////////

void StreamClient(char *szServer, short nPort, char *szMessage)
{
printf("\nStream Client connecting to server: %s on port: %d",szServer, nPort);

//
// Find the server
//
    LPHOSTENT lpHostEntry;

lpHostEntry = gethostbyname(szServer);
    if (lpHostEntry == NULL)
    {
        PRINTERROR("gethostbyname()");
        return;
    }

//
// Create a TCP/IP stream socket
//
SOCKET theSocket;

theSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (theSocket == INVALID_SOCKET){
PRINTERROR("socket()");
return;
}

//
// Fill in the address structure
//
SOCKADDR_IN saServer;

saServer.sin_family = AF_INET;
saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
saServer.sin_port = htons(nPort);

//
// connect to the server
//
int nRet;

nRet = connect( theSocket, // Socket
(LPSOCKADDR)&saServer, // Server address
sizeof(struct sockaddr));// Length of server address structure
        printf("\n%d1lL=====================================%d\n",nRet,SOCKET_ERROR);
if (nRet == SOCKET_ERROR)
{
PRINTERROR("socket()");
closesocket(theSocket);
return;
}


    char szBuf[256];


// strcpy(szBuf, "From the Client");
        char buf[350]="0";
        char server[250];
        gethostname(server,250);
        strcpy(buf, "HELO ");
      
        strcat(buf, server);
        strcat(buf, " \r\n");
        printf("%s:::%d",buf,strlen(buf));

//
// Wait for a reply
//
        nRet = recv(theSocket,szBuf,sizeof(szBuf)+1,0);  printf("\nData received OVER DATA: %s", szBuf);

        nRet = send(theSocket, buf, strlen(buf), 0);
        nRet = recv(theSocket, szBuf, sizeof(szBuf), 0); printf("\nData received2: %s", szBuf);

        //发送准备登陆信息
         nRet = send(theSocket, "AUTH LOGIN \r\n", sizeof("AUTH LOGIN \r\n"), 0);
         nRet = recv(theSocket, szBuf, sizeof(szBuf), 0); printf("\nData received LOGIN: %s", szBuf);

         //发送用户名和密码,这里的用户名和密码必须用base64进行转码,发送转码以后的字符串
         nRet = send(theSocket,"用户名\r\n", strlen("用户名\r\n"),0);
         nRet = recv(theSocket, szBuf, sizeof(szBuf),0);printf("\nData receivedUSERNAME: %s", szBuf);

         //发送用户密码
         nRet = send(theSocket,"密码\r\n", strlen("密码\r\n"), 0);
         nRet = recv(theSocket, szBuf, sizeof(szBuf),0); printf("\nData receivedUSERPASSWORD: %s", szBuf);

         //发送[发送邮件]的信箱(改成你的邮箱!)
        send(theSocket,"MAIL FROM:<geniues@126.com>\r\n",sizeof("MAIL FROM:<geniues@126.com>\r\n"),0);
   nRet = recv(theSocket, szBuf, sizeof(szBuf)+1, 0);printf("\nData received MAILFROM: %s", szBuf);

        //发送[接收邮件]的邮箱
        nRet= send(theSocket,"RCPT TO:<geniues@qq.com> \r\n",sizeof("RCPT TO:<geniues@qq.com> \r\n"),0);
nRet = recv(theSocket, szBuf, sizeof(szBuf)+1, 0);   printf("\nData received TOMAIL: %s", szBuf);
       
        char MailData[1024] =
"From: \"geniues@126.com\"\r\n"
"To: maxinliang002@126.com\r\n"
"Subject: IP Address\r\n\r\n"; //主题可以改成别的

       //各诉邮件服务器,准备发送邮件内容
       send(theSocket,"DATA\r\n", strlen("DATA\r\n"),0);
       nRet = recv(theSocket, szBuf, sizeof(szBuf)+1, 0); printf("\nData receivedSEND DATA: %s", szBuf);
       //发送邮件标题
       send(theSocket,MailData, strlen(MailData),0);
       //发送邮件内容
       send(theSocket,"邮件内容来了!\r\n", strlen("邮件内容来了!\r\n"),0);
       //发送邮件结束
       send(theSocket,"\r\n.\r\n", strlen("\r\n.\r\n"),0);
       //接收邮件服务器返回信息
       nRet = recv(theSocket,szBuf,sizeof(szBuf)+1,0);  printf("\nData received OVER DATA: %s", szBuf);



//
// Display the received data
//
//printf("\nData received3: %s", szBuf);


closesocket(theSocket);
return;
}

分享到:
评论
2 楼 genius 2009-10-26  
你用什么工具?怕你的动态库和我的不太一样.我上面写过我用的工具了啊!
1 楼 zhou451526809 2009-10-19  
编译都通不过!!!!!!!!!!

相关推荐

    C语言实现发送电子邮件

    实现C语言发送电子邮件的过程主要包括以下几个步骤: 1. **建立TCP连接**:使用socket编程建立一个到SMTP服务器的TCP连接。你需要知道SMTP服务器的地址和端口号,通常为25或587(如果服务器支持STARTTLS加密)。 2...

    C语言发送电子邮件正文和附件

    用MAPI 发送电子邮件 正文内容和附件。 运行程序前,注意要配置outlookExpress. 具体配置,请参考http://www.bcty365.com/looksetupstudy.php?id=474

    c语言实现发送电子邮件,读取电子邮件内容

    本项目关注的是使用C语言在Linux环境下实现电子邮件的发送和读取功能,这涉及到两个主要的协议:POP3(Post Office Protocol version 3)和SMTP(Simple Mail Transfer Protocol)。 POP3是用于从邮件服务器下载...

    c语言实现的发送邮件

    首先,发送邮件通常涉及SMTP(Simple Mail Transfer Protocol)协议,这是一种标准的互联网协议,用于在服务器之间传输电子邮件。C语言中实现SMTP发送邮件,你需要了解SMTP的工作流程,包括连接到SMTP服务器、身份...

    C语言实现基于SMTP协议发送邮件.zip

    在这个“C语言实现基于SMTP协议发送邮件”的课程设计中,我们将探讨如何利用C语言来实现电子邮件的发送功能,这涉及到网络通信和协议的理解。 SMTP(Simple Mail Transfer Protocol)是互联网上用于传输电子邮件的...

    用C语言设计电子邮件系统.doc

    "用C语言设计电子邮件系统.doc" 本文档主要介绍了使用C语言设计电子邮件...本文档介绍了使用C语言设计电子邮件系统的相关知识点,包括电子邮件系统的基本原理、软件架构、系统架构、发送邮件类、SMTP协议和RFC822等。

    发邮件C语言代码

    1. **SMTP协议**:SMTP是互联网标准,用于从发送方到接收方传输电子邮件。它定义了两个邮件服务器之间通信的规则。在C程序中,我们需要理解SMTP的工作流程,包括连接SMTP服务器、身份验证、发送邮件头部信息和邮件...

    c语言 邮件过滤器程序+程序执行说明

    在这个项目中,我们关注的是使用C语言来开发一个邮件过滤器,它能帮助用户筛选并处理接收到的电子邮件,确保信息安全和个人隐私。邮件过滤器是网络安全和电子邮件管理的重要工具,它可以阻止垃圾邮件、恶意软件或...

    socket应用(三) 用C语言编写发送邮件程序 源代码

    在这个项目中,我们将利用SMTP(Simple Mail Transfer Protocol)协议,这是互联网上用于发送电子邮件的标准协议。 首先,我们需要了解SMTP的基本工作流程。SMTP服务器接收来自客户端的邮件,并将其转发到指定的收...

    linux C 发送邮件

    这个任务可以通过利用SMTP(Simple Mail Transfer Protocol)协议来实现,它定义了电子邮件在网络上的传输方式。下面我们将详细探讨如何在C语言环境下利用SMTP发送邮件,以及涉及到的相关知识点。 首先,你需要了解...

    Windows下C语言实现MAIL邮件发送小工具--含源代码

    SMTP是互联网标准,用于从发件人到收件人传递电子邮件。它基于客户端/服务器模型,邮件客户端使用SMTP与邮件服务器建立连接,然后发送邮件指令。SMTP协议定义了一系列命令,如HELO(你好)、EHLO(扩展你好)、MAIL ...

    电子邮件发送和接受程序的开发

    电子邮件发送和接受程序的开发是计算机科学领域中的一个重要实践,特别是在软件工程和网络通信课程中。这个主题通常涉及使用编程语言如C++,并利用MFC(Microsoft Foundation Classes)库来构建应用程序。MFC是微软...

    smtp C语言

    SMTP(Simple Mail Transfer Protocol)是互联网上用于发送电子邮件的标准协议,它定义了邮件服务器之间交换邮件的格式和过程。在C语言中实现SMTP协议,可以让你深入理解网络通信的底层原理,同时也为开发自己的邮件...

    实现电子邮件的接受和发送,并且在发送和接受过程中可以进行加密和解密.zip

    电子邮件是互联网上最常用的一种通信方式,用于发送文本、图片、附件等多种类型的信息。本教程将详细介绍如何实现电子邮件的接收和发送,以及在传输过程中如何进行加密和解密,确保数据的安全性。 首先,让我们从...

    使用邮件发送图片.zip

    在IT领域,尤其是在系统开发和自动化任务中,发送电子邮件是一个常见的需求。本示例中,我们看到一个名为"使用邮件发送图片.zip"的压缩包,它包含了一个在Linux内核环境下使用C语言编写的程序,用于发送邮件并附带...

    STMP协议的c语言快速实现

    SMTP(Simple Mail Transfer Protocol)是互联网上用于发送电子邮件的标准协议,它定义了客户端与邮件服务器之间的通信规则。本文将深入探讨如何使用C语言在Linux和Windows操作系统中快速实现SMTP协议。 首先,理解...

Global site tag (gtag.js) - Google Analytics