如何在程序里面给指定字符串地址发邮件,如何指定邮件文本和附件

解决方案 »

  1.   

    See SMTP protocal,it's simple.
    If you are lazy,just use MAPI...
      

  2.   

    Search MAPI on google,it depends on Outlook...
      

  3.   

    我想在vc里面直接给指定字符串地址发邮件,怎么弄?
    能用Winexec(...)执行吗?若能,Winexec(里面输入什么内容?)
      

  4.   

    能用Winexec(...)执行吗?若能,Winexec(里面输入什么内容?)
    =========================================================
    negative,mailto won't work...
      

  5.   

    有类似于mailTo这样的执行文件或者API吗?
      

  6.   

    有类似于mailTo这样的执行文件或者API吗?
    没有自己拼mail 自己连服务器
      

  7.   

    对了,网上面有这样的例子阿~~~
    你自己可以用socket来实现阿~~~
    但是要采用base64编码进行编码~~~
      

  8.   

    给你一个参考~
    这个是我的好友做的~~
    可以实现你所说的功能~~~
    #include "windows.h"
    #include "winsock.h"
    #include "smtp.h"
    #define BUFFER_DEFAULT_SIZE 4096
    #define SMTP_PORT 25//base64编码
    int base64(char *s,char *d)
    {
    char CharSet[64]={
    'A','B','C','D','E','F','G','H',
    'I','J','K','L','M','N','O','P',
    'Q','R','S','T','U','V','W','X',
    'Y','Z','a','b','c','d','e','f',
    'g','h','i','j','k','l','m','n',
    'o','p','q','r','s','t','u','v',
    'w','x','y','z','0','1','2','3',
    '4','5','6','7','8','9','+','/'};
    unsigned char In[3];
    unsigned char Out[4];
    int cnt=0;if(!s||!d) return 0;for(;*s!=0;)
    {
    if(cnt+4>76)
    {
    *d++='\n';
    cnt=0;
    }
    if(strlen(s)>=3)
    {
    In[0]=*s;
    In[1]=*(s+1);
    In[2]=*(s+2);
    Out[0]=In[0]>>2;
    Out[1]=(In[0]&0x03)<<4|(In[1]&0xf0)>>4;
    Out[2]=(In[1]&0x0f)<<2|(In[2]&0xc0)>>6;
    Out[3]=In[2]&0x3f;
    *d=CharSet[Out[0]];
    *(d+1)=CharSet[Out[1]];
    *(d+2)=CharSet[Out[2]];
    *(d+3)=CharSet[Out[3]];
    s+=3;
    d+=4;
    }
    else if(strlen(s)==1)
    {
    In[0]=*s;
    Out[0]=In[0]>>2;
    Out[1]=(In[0]&0x03)<<4|0;
    *d=CharSet[Out[0]];
    *(d+1)=CharSet[Out[1]];
    *(d+2)='=';
    *(d+3)='=';
    s+=1;
    d+=4;
    }
    else if(strlen(s)==2)
    {
    In[0]=*s;
    In[1]=*(s+1);
    Out[0]=In[0]>>2;
    Out[1]=(In[0]&0x03)<<4|(In[1]&0xf0)>>4;
    Out[2]=(In[1]&0x0f)<<2|0;
    *d=CharSet[Out[0]];
    *(d+1)=CharSet[Out[1]];
    *(d+2)=CharSet[Out[2]];
    *(d+3)='=';
    s+=2;
    d+=4;
    }
    cnt+=4;
    }
    *d='\0';
    return 1;
    }/* base64解码函数 */int unbase64char(char ch)
    {
    char CharSet[64]={
    'A','B','C','D','E','F','G','H',
    'I','J','K','L','M','N','O','P',
    'Q','R','S','T','U','V','W','X',
    'Y','Z','a','b','c','d','e','f',
    'g','h','i','j','k','l','m','n',
    'o','p','q','r','s','t','u','v',
    'w','x','y','z','0','1','2','3',
    '4','5','6','7','8','9','+','/'};
    int i;
    for(i=0;i<=63;i++) if(CharSet[i]==ch) break;
    return i;
    }//base64解码
    int unbase64(char *s,char *d)
    {
    unsigned char In[4];
    unsigned char Out[3];if(!s||!d) return 0;for(;*s!=0;)
    {
    if(*s=='\n') s++;
    In[0]=s[0];
    In[1]=s[1];
    In[2]=s[2];
    In[3]=s[3];
    if(In[2]!='='&&In[3]!='=')
    {
    In[0]=unbase64char(In[0]);
    In[1]=unbase64char(In[1]);
    In[2]=unbase64char(In[2]);
    In[3]=unbase64char(In[3]);
    Out[0]=In[0]<<2|(In[1]&0x30)>>4;
    Out[1]=(In[1]&0x0f)<<4|(In[2]&0x3c)>>2;
    Out[2]=(In[2]&0x03)<<6|In[3]&0x3f;
    d[0]=Out[0];
    d[1]=Out[1];
    d[2]=Out[2];
    s+=4;
    d+=3;
    }
    else if(In[2]=='='&&In[3]=='=')
    {
    In[0]=unbase64char(In[0]);
    In[1]=unbase64char(In[1]);
    Out[0]=In[0]<<2|(In[1]&0x30)>>4;
    d[0]=Out[0];
    s+=4;
    d+=1;
    }
    else if(In[2]!='='&&In[3]=='=')
    {
    In[0]=unbase64char(In[0]);
    In[1]=unbase64char(In[1]);
    In[2]=unbase64char(In[2]);
    Out[0]=In[0]<<2|(In[1]&0x30)>>4;
    Out[1]=(In[1]&0x0f)<<4|(In[2]&0x3c)>>2;
    d[0]=Out[0];
    d[1]=Out[1];
    s+=4;
    d+=2;
    }
    }
    *d='\0';
    return 1;
    }typedef struct
    {
    char* ToAdd;
    char* FromAdd;
    char* Subject;
    char* MsgBody;
    }SmtpMsg;typedef struct
    {
    char* address;
    int port;
    }TCPServer;//建立本机跟smtp服务器的连接
    //其中address为smtp服务器地址,port为其端口号,sock2use为本机socket
    bool initConn (char* address, int port, SOCKET* sock2use)
    { WSADATA wsdata;
    struct sockaddr_in server;
    struct hostent *host=NULL; if (WSAStartup(MAKEWORD (2,2), &wsdata) !=0)
    {
    return false;
    } *sock2use = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); if (*sock2use == INVALID_SOCKET)
    {
    return false;
    } server.sin_family = AF_INET;
    server.sin_port = htons(port);
    server.sin_addr.s_addr = inet_addr(address); if (server.sin_addr.s_addr == INADDR_NONE)
    {
    host = gethostbyname(address);
    if (host == NULL)
    {
    return false;
    }
    CopyMemory (&server.sin_addr, host->h_addr_list[0], host->h_length);
    } //建立tcp连接
    if (connect(*sock2use, (struct sockaddr *) &server, sizeof(server)) == SOCKET_ERROR)
    {

    return false;
    }
    return true;
    }//msg为发送的流数据,sockInUse用来发送,rcv为服务器返回信息
    bool sendData (const char* msg, SOCKET sockInUse, char* rcvBuff)
    {
    const char* MSG;
    int ret; ZeroMemory (rcvBuff, BUFFER_DEFAULT_SIZE);
    MSG = msg; size_t msgLength;
    msgLength = strlen(MSG); //发送流数据
    send (sockInUse, MSG, msgLength, 0);
        //接收服务器返回信息
    ret = recv (sockInUse, rcvBuff, BUFFER_DEFAULT_SIZE, 0);    return true;
    }bool closeConn(SOCKET socket2end)
    {
    closesocket (socket2end);
    WSACleanup();
    return true;
    }bool SendEmail(char* SmtpServer,char* User,char* EmailAddress,char* PassWord,char* Msg)
    {
    SOCKET ssmtp;

    initConn(SmtpServer,SMTP_PORT,&ssmtp);

    char Data2Srv[BUFFER_DEFAULT_SIZE];
    char FeedBack[BUFFER_DEFAULT_SIZE];
    char* CRLF = "\r\n";
    ZeroMemory(Data2Srv, BUFFER_DEFAULT_SIZE); strcpy (Data2Srv, "EHLO ");
    strcat (Data2Srv, SmtpServer);
    strcat (Data2Srv, CRLF);
        sendData (Data2Srv, ssmtp, FeedBack);
    //writeLog(logFile, FeedBack); //认证
        strcpy(Data2Srv,"AUTH LOGIN");
    strcat (Data2Srv, CRLF);
        sendData (Data2Srv, ssmtp, FeedBack);
      
    //对用户名进行编码
    base64(User,Data2Srv);
    strcat (Data2Srv, CRLF);
    sendData (Data2Srv, ssmtp, FeedBack);    //对密码进行编码
    base64(PassWord,Data2Srv);
        strcat (Data2Srv, CRLF);
    sendData (Data2Srv, ssmtp, FeedBack);
    strcpy (Data2Srv, "MAIL FROM:<");
    strcat (Data2Srv, User);
    strcat (Data2Srv,"@163.com");
    strcat (Data2Srv, ">");
    strcat (Data2Srv, CRLF);
    sendData (Data2Srv, ssmtp, FeedBack);    
    strcpy (Data2Srv, "RCPT TO:<");
    strcat (Data2Srv, EmailAddress);
    strcat (Data2Srv, ">");
    strcat (Data2Srv, CRLF);
    sendData (Data2Srv, ssmtp, FeedBack);
    //writeLog(logFile, FeedBack);    //发送数据
    strcpy (Data2Srv, "DATA ");
    strcat (Data2Srv, CRLF);
    sendData (Data2Srv, ssmtp, FeedBack);
    //writeLog(logFile, FeedBack);
        //邮件标题
    strcpy (Data2Srv, "SUBJECT: ");
    strcat (Data2Srv, "受控端信息");
    strcat (Data2Srv, CRLF);
    //邮件正文
    strcat (Data2Srv, Msg);
    strcat (Data2Srv, CRLF);
    strcat (Data2Srv, ".");
    strcat (Data2Srv, CRLF);
    sendData (Data2Srv, ssmtp, FeedBack); closeConn(ssmtp);    return true;
    }
      

  9.   

    果然是,好东东!
    带我慢慢测试一下
    谢谢snowbirdfly(专心搞好嵌入式~~~)
      

  10.   

    是调用SendEmail()吗?
    比如我用新浪邮箱[email protected]发送电子邮件到[email protected]
    怎么调用SendEmail()?
      

  11.   

    比如我用新浪邮箱[email protected]发送电子邮件到[email protected]
    怎么调用SendEmail()?