⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mysmtp.cpp

📁 一个在redhat下面做的邮件收发程序
💻 CPP
字号:
//MySmtp.cpp#include "MySmtp.h"#include <cstring>//using namespace std;MySmtp::MySmtp(){    m_port = 25;    m_server = "smtp.126.com";    m_mailfrom = "EricCN@126.com";    m_addfile = FALSE;    m_username = "RXJpY0NO";    m_password = "MjIxODA1OQ==";}//设置发信人地址int MySmtp::SetMailFrom(string mailfrom){    m_mailfrom = mailfrom;    return 1;}//设置邮件正文int MySmtp::SetMailBody(string mailbody){    m_body = mailbody;    return 1;}//设置邮件主题int MySmtp::SetSubject(string subject){    m_subject = subject;    return 1;}//收件人地址,可以设置多个int MySmtp::SetMailTo(string mailto){    m_mailto.push_back(mailto);    return 1;}//设置服务器地址int MySmtp::SetMailServer(string server){    m_server = server;    return 1;}//设置附件路径int MySmtp::SetFilePath(string path){    m_filepath = path;    m_addfile = TRUE;    return 1;}//设置邮件端口int MySmtp::SetMailPort(string port){    m_port = atoi(port.c_str());    return 1;}string MySmtp::GetErr(){    return m_errmsg;}//get error message from responsestring MySmtp::GetError(string Response){    if(Response.find("220"))         return "System status or system help reply";     if(Response.find("214"))          return "Help Message";     if(Response.find("220"))         return "Service is ready";     if(Response.find("221"))         return "Service closing transmission channel";     if(Response.find("250"))     return "Requested mail action okay, completed";     if(Response.find("251"))         return "user not local: will forward to forward path";     if(Response.find("354"))         return "Start mail input; end with .";}//bool MySmtp::CheckResponse(int type){    int  code;    char temp[3];    char buf[256];       for(int i = 0;i < 256;i++)        buf[i] = '\0';    m_mysock.RecvData(buf);    strncpy(temp,buf,3);    code = atoi(temp);    switch(type)    {        case CONNECTION_CHECK:            if(code != 220)                {                    m_errmsg = GetError(buf);                    return FALSE;                }            break;        case HELLO_CHECK:            if(code != 250)            {                m_errmsg = GetError(buf);                return FALSE;            }             break;        case LOGIN_CHECK:            if(code != 334)            {                m_errmsg = GetError(buf);                return FALSE;            }            break;        case USERNAME_CHECK:            if(code != 334)            {                m_errmsg = GetError(buf);                return FALSE;            }            break;        case PASSWORD_CHECK:            if(code != 235)            {                m_errmsg = GetError(buf);                return FALSE;            }            break;        case MAIL_CHECK:            if(code != 250)            {                m_errmsg = GetError(buf);                return FALSE;            }            break;        case RCPT_CHECK:            if(code != 250)            {                m_errmsg = GetError(buf);                return FALSE;            }            break;        case DATA_START_CHECK:            if(code != 354)            {                m_errmsg = GetError(buf);                return FALSE;            }            break;        case DATA_END_CHECK:            if(code != 250)            {                m_errmsg = GetError(buf);                return FALSE;            }            break;        case QUIT_CHECK:            if(code != 221)            {                m_errmsg = GetError(buf);                return FALSE;            }            break;    }    return TRUE;}//根据上面已经设置的属性来发送邮件int MySmtp::SendMail(){    int i,len;    char* temp;    char* aatt   =   new   char[0x400000];      char* batt   =   new   char[0x555556];       Base64 base64;    FILE* fp;//compute the data length        len = m_mailto.size() + m_subject.size() + m_body.size() + 79;//init and connect,only try one time    if(m_mysock.InitMySocket(m_server.c_str(),m_port) < 0)    {        //m_errmsg = m_mysock.GetErr();        CheckResponse(CONNECTION_CHECK);        return -1;    }    CheckResponse(CONNECTION_CHECK);//send helo command    for(i=0;i<3;i++)    {        m_mysock.SendData("helo localhost\r\n");        if(CheckResponse(HELLO_CHECK))            break;    }    if(i > 2)        return -1;//send auth login command    for(i=0;i<3;i++)    {        m_mysock.SendData("auth login\r\n");        if(CheckResponse(LOGIN_CHECK))            break;    }    if(i > 2)        return -1;//send username    m_username.append("\r\n");    for(i=0;i<3;i++)    {        m_mysock.SendData(m_username.c_str());        if(CheckResponse(USERNAME_CHECK))            break;    }    if(i > 2)        return -1;//send password    m_password.append("\r\n");    for(i=0;i<3;i++)    {        m_mysock.SendData(m_password.c_str());        if(CheckResponse(PASSWORD_CHECK))            break;    }    if(i > 2)        return -1;//send mail from command    for(i=0;i<3;i++)    {        m_mysock.SendData("mail from: <EricCN@126.com>\r\n");        if(CheckResponse(MAIL_CHECK))            break;    }    if(i > 2)        return -1;//send rcpt to command    temp = (char*)malloc(len);    sprintf(temp,"rcpt to: <%s>\r\n",m_mailto[0].c_str());    for(i=0;i<3;i++)    {        m_mysock.SendData(temp);        if(CheckResponse(RCPT_CHECK))            break;    }    if(i > 2)    {        delete temp;        return -1;    }//send data command    for(i=0;i<3;i++)    {        m_mysock.SendData("data\r\n");        if(CheckResponse(DATA_START_CHECK))            break;    }    if(i > 2)        return -1;//send data    if(!m_addfile)    {        sprintf(temp,"To: %s\r\nFrom: EricCN@126.com\r\nSubject: %s\r\nDate: 2007-03-16\r\nX-Mailer: mymail\r\nMIME-Version: 1.0\r\nContent-Type: text/plain\r\n%s\r\n.\r\n",          m_mailto[0].c_str(),          m_subject.c_str(),          m_body.c_str());          m_mysock.SendData(temp);        }else    {        sprintf(temp,"From: EricCN@126.com\r\nTo: %s\r\nSubject: %s\r\nContent-Type: multipart/mixed; boundary=\"#BOUNDARY#\"\r\nMIME-Version: 1.0\r\nX-Mailer: mymail\r\n\r\n\r\n--#BOUNDARY#\r\nContent-Type: text/plain;\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n%s \r\n\r\n\r\n--#BOUNDARY#\r\nContent-Disposition: attachment; filename=telnet\r\nContent-Type: application/x-executable-binary; name=telnet; \r\nContent-Transfer-Encoding: base64\r\n\r\n",          m_mailto[0].c_str(),          m_subject.c_str(),          m_body.c_str());          m_mysock.SendData(temp);//对附件进行编码        fp = fopen(m_filepath.c_str(),"rb");        fseek(fp,0,2);        len = ftell(fp);        if(len > 0x400000)            len = 0;        rewind(fp);		int rtn = fread(aatt,sizeof(char),len,fp);          fclose(fp);          len = base64.Encode(batt,aatt,len);          m_mysock.SendData(batt,len);          m_mysock.SendData("\r\n.\r\n");        delete aatt;        delete batt;    }    delete temp;    if(CheckResponse(DATA_END_CHECK))         return -1;//send quit command    for(i=0;i<3;i++)    {        m_mysock.SendData("quit\r\n");        if(CheckResponse(QUIT_CHECK));            break;    }    if(i > 2)        return -1;    return 1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -