c语言发邮件带附件

C语言发送邮件

基本框架就是这,需要其他功能自己添加吧

C语言实现简单的SMTP发送邮件

#include windows.h

#include stdio.h

#include WinSock.h

#include iostream

using namespace std;

#pragma comment(lib, “ws2_32.lib”)

struct Base64Date6

{

unsigned int d4:6;

unsigned int d3:6;

unsigned int d2:6;

unsigned int d1:6;

};

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

char ConvertToBase64 (char c6);

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

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

int OpenSocket (struct sockaddr *addr);

int main()

{

char EmailTo[] = “hanyinlong@126.com”;

char EmailContents[] = “From: \”lucy\”hanyinlong@126.com\r\n”

“To: \”dasiy\”hanyinlong@126.com\r\n”

“Subject: Hello\r\n\r\n”

“Hello World, Hello Email!”;

SendMail(EmailTo, EmailContents);

return 0;

}

char ConvertToBase64(char uc)

{

if(uc 26)

{

return ‘A’ + uc;

}

if(uc 52)

{

return ‘a’ + (uc – 26);

}

if(uc 62)

{

return ‘0’ + (uc – 52);

}

if(uc == 62)

{

return ‘+’;

}

return ‘/’;

}

// base64的实现

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

{

struct Base64Date6 *ddd = NULL;

int i = 0;

char buf[256] = {0};

char *tmp = NULL;

char cc = ‘\0’;

memset(buf, 0, 256);

strcpy_s(buf, 256, 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 Base64Date6 *)tmp;

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

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

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

dbuf[(i-1)*4+3] = ConvertToBase64((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 Base64Date6 *)tmp;

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

dbuf[(i-1)*4+1] = ConvertToBase64((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 Base64Date6 *)tmp;

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

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

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

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

}

return;

}

// 发送邮件

void SendMail(char *email, char *body)

{

int sockfd = {0};

char buf[1500] = {0};

char rbuf[1500] = {0};

char login[128] = {0};

char pass[128] = {0};

WSADATA WSAData;

struct sockaddr_in their_addr = {0};

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

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

their_addr.sin_family = AF_INET;

their_addr.sin_port = htons(25);

hostent* hptr = gethostbyname(“smtp.126.com”);

memcpy(their_addr.sin_addr.S_un.S_addr, hptr-h_addr_list[0], hptr-h_length);

printf(“IP of smpt.126.com is : %d:%d:%d:%d\n”,

their_addr.sin_addr.S_un.S_un_b.s_b1,

their_addr.sin_addr.S_un.S_un_b.s_b2,

their_addr.sin_addr.S_un.S_un_b.s_b3,

their_addr.sin_addr.S_un.S_un_b.s_b4);

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

sockfd = OpenSocket((struct sockaddr *)their_addr);

memset(rbuf, 0, 1500);

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

{

cout”reconnect…”endl;

Sleep(2);

sockfd = OpenSocket((struct sockaddr *)their_addr);

memset(rbuf, 0, 1500);

}

coutrbufendl;

// EHLO

memset(buf, 0, 1500);

sprintf_s(buf, 1500, “EHLO HYL-PC\r\n”);

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

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

cout”EHLO REceive: “rbufendl;

// AUTH LOGIN

memset(buf, 0, 1500);

sprintf_s(buf, 1500, “AUTH LOGIN\r\n”);

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

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

cout”Auth Login Receive: “rbufendl;

// USER

memset(buf, 0, 1500);

sprintf_s(buf, 1500, “hanyinlong@126.com”);//你的邮箱账号

memset(login, 0, 128);

EncodeBase64(login, buf, strlen(buf));

sprintf_s(buf, 1500, “%s\r\n”, login);

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

cout”Base64 UserName: “bufendl;

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

cout”User Login Receive: “rbufendl;

// PASSWORD

sprintf_s(buf, 1500, “XXXXXXXXXXXX”);//你的邮箱密码

memset(pass, 0, 128);

EncodeBase64(pass, buf, strlen(buf));

sprintf_s(buf, 1500, “%s\r\n”, pass);

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

cout”Base64 Password: “bufendl;

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

cout”Send Password Receive: “rbufendl;

// MAIL FROM

memset(buf, 0, 1500);

sprintf_s(buf, 1500, “MAIL FROM: hanyinlong@126.com\r\n”);

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

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

cout”set Mail From Receive: “rbufendl;

// RCPT TO 第一个收件人

sprintf_s(buf, 1500, “RCPT TO:%s\r\n”, email);

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

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

cout”Tell Sendto Receive: “rbufendl;

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

sprintf_s(buf, 1500, “DATA\r\n”);

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

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

cout”Send Mail Prepare Receive: “rbufendl;

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

sprintf_s(buf, 1500, “%s\r\n.\r\n”, body);

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

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

cout”Send Mail Receive: “rbufendl;

// QUIT

sprintf_s(buf, 1500, “QUIT\r\n”);

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

memset(rbuf, 0, 1500);

recv(sockfd, rbuf, 1500, 0);

cout”Quit Receive: “rbufendl;

//清理工作

closesocket(sockfd);

WSACleanup();

return;

}

// 打开TCP Socket连接

int OpenSocket(struct sockaddr *addr)

{

int sockfd = 0;

sockfd=socket(PF_INET, SOCK_STREAM, 0);

if(sockfd 0)

{

cout”Open sockfd(TCP) error!”endl;

exit(-1);

}

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

{

cout”Connect sockfd(TCP) error!”endl;

exit(-1);

}

return sockfd;

}

C++怎么发邮件

1、C++的关键字没有发邮件的功能。C++只是一种编程语言。 c++本身没有发邮件的功能。想让他发邮件,还要用别人写好的C++的一些库函数,框架之类的。

2、例程:

/*********************************************************************** 

    *发送邮件模块头文件 

    *可以发送文本和附件(支持多个附件一起发送) 

    *************************************************************************/  

    #pragma once  

    struct sMailInfo //邮件信息  

    {  

        char*   m_pcUserName;//用户登录邮箱的名称  

        char*   m_pcUserPassWord;//用户登录邮箱的密码  

        char*   m_pcSenderName;//用户发送时显示的名称  

        char*   m_pcSender;//发送者的邮箱地址  

        char*   m_pcReceiver;//接收者的邮箱地址  

        char*   m_pcTitle;//邮箱标题  

        char*   m_pcBody;//邮件文本正文  

        char*   m_pcIPAddr;//服务器的IP  

        char*   m_pcIPName;//服务器的名称(IP与名称二选一,优先取名称)  

        sMailInfo(){memset(this,0,sizeof(sMailInfo));}  

    };  

    class CSendMail  

    {  

    public:  

        CSendMail(void);  

        ~CSendMail(void);  

      

    public:  

        bool SendMail(sMailInfo smailInfo);//发送邮件,需要在发送的时候初始化邮件信息  

        void AddFilePath(char * pcFilePath);//添加附件的决定路径到附件列表中  

        void DeleteFilePath(char* pcFilePath);//删除附件路径,如果有的话  

        void DeleteAllPath(void);//删除全部附件的路径  

      

    protected:  

        void GetFileName(char* fileName,char* filePath);//从附件的路径中获取文件名称  

        void Char2Base64(char* pBuff64,char* pSrcBuff,int iLen);//把char类型转换成Base64类型  

        bool  CReateSocket(SOCKET sock);//建立socket连接  

        bool Logon(SOCKET sock);//登录邮箱,主要进行发邮件前的准备工作  

        int GetFileData(char* FilePath);//由文件路径获取附件内容  

      

        bool SendHead(SOCKET sock);//发送邮件头  

        bool SendTextBody(SOCKET sock);//发送邮件文本正文  

        bool SendFileBody(SOCKET sock);//发送邮件附件  

        bool SendEnd(SOCKET sock);//发送邮件结尾  

    protected:  

        CListchar*,char* m_pcFilePathList;//记录附件路径  

      

        char  m_cSendBuff[4096];//发送缓冲区  

        char  m_cReceiveBuff[1024];  

        char* m_pcFileBuff;//指向附件内容  

        sMailInfo m_sMailInfo;  

    };  

    /************************************************************************ 

    * 发送邮件模块 

    *可以发送文本和附件(支持多个附件一起发送) 

    *Date:2011-12-01 

    ************************************************************************/  

    #include “StdAfx.h”  

    #include “SendMail.h”  

    #include “winsock2.h”  

    #pragma comment(lib,”WSOCK32″)  

      

    CSendMail::CSendMail(void)  

    {  

        m_pcFileBuff=NULL;  

        memset(m_cSendBuff,0,sizeof(m_cSendBuff));  

        memset(m_cReceiveBuff,0,sizeof(m_cReceiveBuff));  

    }  

CSendMail::~CSendMail(void)  

    {  

        DeleteAllPath();  

    }  

void CSendMail::Char2Base64(char* pBuff64,char* pSrcBuff,int iLen)  

    {  

        //1   1   1   1   1   1   1   1  

        // 分配给pBuff64  ↑ 分配给pBuff64+1  

        //         point所在的位置  

        static char Base64Encode[] = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”;//base64所映射的字符表  

        int point;//每一个源字符拆分的位置,可取2,4,6;初始为2  

        point=2;  

        int i;  

        int iIndex;//base64字符的索引  

        char n=0;//上一个源字符的残留值  

        for(i=0;iiLen;i++)  

        {  

            if(point==2)  

            {  

                iIndex=((*pSrcBuff)point)0x3f;//取得pSrcBuff的高point位  

            }  

            else if (point==4)  

            {  

                iIndex=((*pSrcBuff)point)0xf;//取得pSrcBuff的高point位  

            }  

            else if(point==6)  

            {  

                iIndex=((*pSrcBuff)point)0x3;//取得pSrcBuff的高point位  

            }  

            iIndex+=n;//与pSrcBuff-1的低point结合组成Base64的索引  

            *pBuff64++=Base64Encode[iIndex];//由索引表得到pBuff64  

            n=((*pSrcBuff)(6-point));//计算源字符中的残留值  

            n=n0x3f;//确保n的最高两位为0  

            point+=2;//源字符的拆分位置上升2  

            if(point==8)//如果拆分位置为8说明pSrcBuff有6位残留,可以组成一个完整的Base64字符,所以直接再组合一次  

            {  

                iIndex=(*pSrcBuff)0x3f;//提取低6位,这就是索引了  

                *pBuff64++=Base64Encode[iIndex];//  

                n=0;//残留值为0  

                point=2;//拆分位置设为2  

            }  

            pSrcBuff++;  

      

        }  

        if(n!=0)  

        {  

            *pBuff64++=Base64Encode[n];  

        }  

        if(iLen%3==2)//如果源字符串长度不是3的倍数要用’=’补全  

        {  

            *pBuff64=’=’;  

        }  

        else if(iLen%3==1)  

        {  

            *pBuff64++=’=’;  

            *pBuff64=’=’;  

        }  

    }  

      

    void CSendMail::AddFilePath(char * pcFilePath)//添加附件路径  

    {  

        if(pcFilePath==NULL)  

        {  

            return;  

        }  

        int i;  

        char* temp;  

        for(i=0;im_pcFilePathList.GetCount();i++)  

        {  

            temp=m_pcFilePathList.GetAt(m_pcFilePathList.FindIndex(i));  

            if(strcmp(pcFilePath,temp)==0)//如果已经存在就不用再添加了  

            {  

                return;  

            }  

        }  

        m_pcFilePathList.AddTail(pcFilePath);  

    }  

      

    void CSendMail::DeleteFilePath(char* pcFilePath)//删除附件路径  

    {  

        int i;  

        char* temp;  

        for(i=0;im_pcFilePathList.GetCount();i++)  

        {  

            temp=m_pcFilePathList.GetAt(m_pcFilePathList.FindIndex(i));  

            if(strcmp(temp,pcFilePath)==0)//找到并删除它,如果没找到就算了  

            {  

                m_pcFilePathList.RemoveAt(m_pcFilePathList.FindIndex(i));  

                delete[] temp;  

                return;  

            }  

        }  

    }  

void CSendMail::DeleteAllPath(void)  

    {  

        m_pcFilePathList.RemoveAll();  

    }  

      

    int CSendMail::GetFileData(char* FilePath)  

    {  

        m_pcFileBuff=NULL;  

        if(FilePath==NULL)  

        {  

            return 0;  

        }  

        CFile f;  

        int len;  

USES_CONVERSION;  

        if(!f.Open(A2W(FilePath),CFile::modeRead|CFile::modeNoTruncate|CFile::typeBinary))  

        {  

            return 0;  

        }  

        len=(int)f.GetLength();  

        m_pcFileBuff=new char[len+1];  

        memset(m_pcFileBuff,0,len+1);  

        f.Read(m_pcFileBuff,len);  

      

        f.Close();  

        return len;  

    }  

      

    void CSendMail::GetFileName(char* fileName,char* filePath)  

    {  

        if(filePath==NULL || fileName==NULL)  

        {  

            return;  

        }  

        int i;  

        for(i=0;i(int)strlen(filePath);i++)  

        {  

            if(filePath[strlen(filePath)-1-i]==’\\’)  

            {  

                memcpy(fileName,filePath[strlen(filePath)-i],i);  

                return;  

            }  

        }  

    }  

      

    bool CSendMail::CReateSocket(SOCKET sock)  

    {  

        WORD wVersionRequested;  

        WSADATA wsaData;  

        int err;  

        wVersionRequested = MAKEWORD( 2, 2 );  

        err = WSAStartup( wVersionRequested, wsaData );  

        if ( err != 0 )   

        {  

            return false;  

        }  

        if ( LOBYTE( wsaData.wVersion ) != 2 ||  

            HIBYTE( wsaData.wVersion ) != 2 )  

        {  

            WSACleanup( );  

            return false;   

        }  

        sock = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);  

        if (sock == INVALID_SOCKET)  

        {  

            return false;  

        }  

      

        sockaddr_in servaddr;  

        memset(servaddr,0,sizeof(sockaddr_in));  

        servaddr.sin_family = AF_INET;  

        servaddr.sin_port = htons(25);//发邮件一般都是25端口  

        if(m_sMailInfo.m_pcIPName==””)  

        {  

            servaddr.sin_addr.s_addr = inet_addr(m_sMailInfo.m_pcIPAddr);//直接使用IP地址  

        }  

        else  

        {  

            struct hostent *hp=gethostbyname(m_sMailInfo.m_pcIPName);//使用名称  

            servaddr.sin_addr.s_addr=*(int*)(*hp-h_addr_list);  

        }  

int ret = connect(sock,(sockaddr*)servaddr,sizeof(servaddr));//建立连接  

        if (ret == SOCKET_ERROR)  

        {  

            return false;  

        }  

      

        return true;  

    }  

bool CSendMail::Logon(SOCKET sock)  

    {  

        recv(sock,m_cReceiveBuff,1024,0);  

      

        memset(m_cSendBuff,0,sizeof(m_cSendBuff));  

        sprintf_s(m_cSendBuff,”HELO []\r\n”);  

        send(sock,m_cSendBuff,strlen(m_cSendBuff),0);//开始会话  

        recv(sock,m_cReceiveBuff,1024,0);  

        if(m_cReceiveBuff[0]!=’2′ || m_cReceiveBuff[1]!=’5′ || m_cReceiveBuff[2]!=’0′)  

        {  

            return false;  

        }  

      

        memset(m_cSendBuff,0,sizeof(m_cSendBuff));  

        sprintf_s(m_cSendBuff,”AUTH LOGIN\r\n”);  

        send(sock,m_cSendBuff,strlen(m_cSendBuff),0);//请求登录  

        recv(sock,m_cReceiveBuff,1024,0);  

        if(m_cReceiveBuff[0]!=’3′ || m_cReceiveBuff[1]!=’3′ || m_cReceiveBuff[2]!=’4′)  

        {  

            return false;  

        }  

      

        memset(m_cSendBuff,0,sizeof(m_cSendBuff));  

        Char2Base64(m_cSendBuff,m_sMailInfo.m_pcUserName,strlen(m_sMailInfo.m_pcUserName));  

        m_cSendBuff[strlen(m_cSendBuff)]=’\r’;  

        m_cSendBuff[strlen(m_cSendBuff)]=’\n’;  

        send(sock,m_cSendBuff,strlen(m_cSendBuff),0);//发送用户名  

        recv(sock,m_cReceiveBuff,1024,0);  

        if(m_cReceiveBuff[0]!=’3′ || m_cReceiveBuff[1]!=’3′ || m_cReceiveBuff[2]!=’4′)  

        {  

            return false;  

        }  

      

        memset(m_cSendBuff,0,sizeof(m_cSendBuff));  

        Char2Base64(m_cSendBuff,m_sMailInfo.m_pcUserPassWord,strlen(m_sMailInfo.m_pcUserPassWord));  

        m_cSendBuff[strlen(m_cSendBuff)]=’\r’;  

        m_cSendBuff[strlen(m_cSendBuff)]=’\n’;  

        send(sock,m_cSendBuff,strlen(m_cSendBuff),0);//发送用户密码  

        recv(sock,m_cReceiveBuff,1024,0);  

        if(m_cReceiveBuff[0]!=’2′ || m_cReceiveBuff[1]!=’3′ || m_cReceiveBuff[2]!=’5′)  

        {  

            return false;  

        }  

        return true;//登录成功  

    }

c语言发邮件带附件

C语言邮件程序 如何发送附件

C语言发送邮件 完整代码:

#include windows.h

#include stdio.h

#include WinSock.h

#include iostream

using namespace std;

#pragma  comment(lib, “ws2_32.lib”)

struct Base64Date6

{

    unsigned int d4:6;

    unsigned int d3:6;

    unsigned int d2:6;

    unsigned int d1:6;

};

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

char ConvertToBase64  (char   c6);

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

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

int  OpenSocket       (struct sockaddr *addr);

int main()

{

    char EmailTo[]         = “xushiladeng@qq.com”;

    char EmailContents[]   = “From: \”lucy\”xushiladeng@qq.com\r\n”

        “To: \”dasiy\”xushiladeng@qq.com\r\n”

        “Subject: Hello\r\n\r\n”

        “Hello World, Hello Email!”

//        “DATA\r\n” //告诉服务器下面是邮件

        //下面是邮件头

        “TO: xushiladeng@qq.com\r\n”

        “FROM: xushiladeng@qq.com\r\n”

        “SUBJECT: SMTP协议测试\r\n”

        “Date:2015-04-20\r\n”

        “X-Mailer:fice’s mailer\r\n”

        “MIMI-Version:1.0\r\n”

        “Content-Type:multipart/mixed;boundary=\”#BOUNDARY#\”\r\n\r\n”//设置边界值,区分邮件内容的 两个回车换行

        “Content-Transfer-Encoding:7bit\r\n\r\n”

        “This is a multi-part message in MIME format\r\n\r\n”

        //发送邮件内容头部信息

        “–#BOUNDARY#\r\n”

        “Content-Type: text/plain;charset=gb2312\r\n”

        “Content-Transfer-Encoding:printable\r\n\r\n”

        //发送邮件的内容部分

        “SMTP协议测试:发送附件/n—-by fice 2015.04.20\r\n”

        //发送附件头部信息

        “–#BOUNDARY#\r\n”

        “Content-Type:text/plain;name=student.txt\r\n”

        “Content-Transfer-Encoding:base64\r\n”

        “Content-Disposition:attachment;filename=\”test.txt\”\r\n\r\n”;

    SendMail(EmailTo, EmailContents);

    return 0;

}

char ConvertToBase64(char uc)

{

    if(uc  26)

    {

        return ‘A’ + uc;

    }

    if(uc  52)

    {

        return ‘a’ + (uc – 26);

    }

    if(uc  62)

    {

        return ‘0’ + (uc – 52);

    }

    if(uc == 62)

    {

        return ‘+’;

    }

    return ‘/’;

}

// base64的实现

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

{

    struct Base64Date6 *ddd      = NULL;

    int           i        = 0;

    char          buf[256] = {0};

    char          *tmp     = NULL;

    char          cc       = ‘\0’;

    memset(buf, 0, 256);

    strcpy_s(buf, 256, 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 Base64Date6 *)tmp;

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

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

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

        dbuf[(i-1)*4+3] = ConvertToBase64((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 Base64Date6 *)tmp;

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

        dbuf[(i-1)*4+1] = ConvertToBase64((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 Base64Date6 *)tmp;

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

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

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

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

    }

    return;

}

// 发送邮件

void SendMail(char *email, char *body)

{

    int     sockfd     = {0};

    char    buf[1500]  = {0};

    char    rbuf[1500] = {0};

    char    login[128] = {0};

    char    pass[128]  = {0};

    WSADATA WSAData;

    struct sockaddr_in their_addr = {0};

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

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

    their_addr.sin_family = AF_INET;

    their_addr.sin_port   = htons(25);

    hostent* hptr         = gethostbyname(“smtp.126.com”); 

    memcpy(their_addr.sin_addr.S_un.S_addr, hptr-h_addr_list[0], hptr-h_length); 

    printf(“IP of smpt.126.com is : %d:%d:%d:%d\n”, 

        their_addr.sin_addr.S_un.S_un_b.s_b1, 

        their_addr.sin_addr.S_un.S_un_b.s_b2, 

        their_addr.sin_addr.S_un.S_un_b.s_b3, 

        their_addr.sin_addr.S_un.S_un_b.s_b4); 

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

    sockfd = OpenSocket((struct sockaddr *)their_addr);

    memset(rbuf, 0, 1500);

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

    {

        cout”reconnect…”endl;

        Sleep(2);

        sockfd = OpenSocket((struct sockaddr *)their_addr);

        memset(rbuf, 0, 1500);

    }

    coutrbufendl;

    // EHLO

    memset(buf, 0, 1500);

    sprintf_s(buf, 1500, “EHLO HYL-PC\r\n”);

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

    memset(rbuf, 0, 1500);

    recv(sockfd, rbuf, 1500, 0);

    cout”EHLO REceive: “rbufendl;

    // AUTH LOGIN

    memset(buf, 0, 1500);

    sprintf_s(buf, 1500, “AUTH LOGIN\r\n”);

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

    memset(rbuf, 0, 1500);

    recv(sockfd, rbuf, 1500, 0);

    cout”Auth Login Receive: “rbufendl;

    // USER

    memset(buf, 0, 1500);

    sprintf_s(buf, 1500, “xushiladeng@qq.com”);//你的邮箱账号

    memset(login, 0, 128);

    EncodeBase64(login, buf, strlen(buf));

    sprintf_s(buf, 1500, “%s\r\n”, login);

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

    cout”Base64 UserName: “bufendl;

    memset(rbuf, 0, 1500);

    recv(sockfd, rbuf, 1500, 0);

    cout”User Login Receive: “rbufendl;

    // PASSWORD

    sprintf_s(buf, 1500, “********”);//你的邮箱密码

    memset(pass, 0, 128);

    EncodeBase64(pass, buf, strlen(buf));

    sprintf_s(buf, 1500, “%s\r\n”, pass);

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

    cout”Base64 Password: “bufendl;

    memset(rbuf, 0, 1500);

    recv(sockfd, rbuf, 1500, 0);

    cout”Send Password Receive: “rbufendl;

    // MAIL FROM

    memset(buf, 0, 1500);

    sprintf_s(buf, 1500, “MAIL FROM: xushiladeng@qq.com\r\n”);

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

    memset(rbuf, 0, 1500);

    recv(sockfd, rbuf, 1500, 0);

    cout”set Mail From Receive: “rbufendl;

    // RCPT TO 第一个收件人

    sprintf_s(buf, 1500, “RCPT TO:%s\r\n”, email);

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

    memset(rbuf, 0, 1500);

    recv(sockfd, rbuf, 1500, 0);

    cout”Tell Sendto Receive: “rbufendl;

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

    sprintf_s(buf, 1500, “DATA\r\n”);

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

    memset(rbuf, 0, 1500);

    recv(sockfd, rbuf, 1500, 0);

    cout”Send Mail Prepare Receive: “rbufendl;

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

    sprintf_s(buf, 1500, “%s\r\n.\r\n”, body);

    send(sockfd, buf, strlen(buf), 0);//发送邮件,不带附件的内容

    //用二进制方式读取附件文件内容并转为base64格式  

    FILE* pf = fopen(“D:\\test.txt”,”rb”);

    fseek(pf,0,SEEK_END);

    int filelen = ftell(pf);

    char* filebuf = (char*) malloc(filelen);

    char* filebase64 = (char*) malloc(filelen*2);

    memset(filebase64,0,filelen*2);

    fseek(pf,0,SEEK_SET);

    fread(filebuf,1,filelen,pf);  

    EncodeBase64(filebase64,filebuf,filelen); 

    send(sockfd, filebase64, strlen(filebase64), 0);//发送邮件的内容

    memset(rbuf, 0, 1500);

    recv(sockfd, rbuf, 1500, 0);

    cout”Send Mail Receive: “rbufendl;

    // QUIT

    sprintf_s(buf, 1500, “QUIT\r\n”);

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

    memset(rbuf, 0, 1500);

    recv(sockfd, rbuf, 1500, 0);

    cout”Quit Receive: “rbufendl;

    //清理工作

    closesocket(sockfd);

    WSACleanup();

    return;

}

// 打开TCP Socket连接

int OpenSocket(struct sockaddr *addr)

{

    int sockfd = 0;

    sockfd=socket(PF_INET, SOCK_STREAM, 0);

    if(sockfd  0)

    {

        cout”Open sockfd(TCP) error!”endl;

        exit(-1);

    }

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

    {

        cout”Connect sockfd(TCP) error!”endl;

        exit(-1);

    }

    return sockfd;

}

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月25日 23:40:50
下一篇 2024年3月25日 23:50:06

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    4100
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5800
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4500
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4500
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7500
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6500
  • c语言当中的null,C语言当中的符号

    C/C++中,NULL和null的区别是什么? nul 和 null要看编译器,不同的编译器有所区别。 所以C或者C++中都使用一个特殊定义NULL表示无效值,其本质就是未定义具体数据类型的0值。 null是是什么都没有的意思。在java中表示空对象。 本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。\x0d\x0a在ASCII码…

    2024年5月23日
    4700
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    5000
  • 学c语言编程,学c语言编程用什么软件

    编程开发必须要学C语言吗? 1、要学习。编程开发的学习内容主要包括c语言、python和c+语言。C语言作为一种简单灵活的高级编程语言,它是一个面向过程的语言,一般是作为计算机专业的基础入门语言课程。 2、C语言。对于刚接触编程的人来说,先学习C语言是非常重要的。C语言可以说是是计算机编程语言的鼻祖,其他的编程语言几乎全是由C语言变化衍生出来的。 3、不需要…

    2024年5月23日
    3500
  • c语言用string定义字符串,c语言中用string类型来处理字符串类型

    C++怎样定义定义字符串 1、第一是字符数组来表示字符串。用下面的语句声明:char a[10];C语言中字符数组与字符串的唯一区别是字符串末尾有一个结束符\0,而字符数组不需要。 2、在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 字符串常量 即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为 …

    2024年5月23日
    4500

发表回复

登录后才能评论



关注微信