如何在程序里面给指定字符串地址发邮件,如何指定邮件文本和附件 如何在程序里面给指定字符串地址发邮件,如何指定邮件文本和附件 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 See SMTP protocal,it's simple.If you are lazy,just use MAPI... Search MAPI on google,it depends on Outlook... 我想在vc里面直接给指定字符串地址发邮件,怎么弄?能用Winexec(...)执行吗?若能,Winexec(里面输入什么内容?) 能用Winexec(...)执行吗?若能,Winexec(里面输入什么内容?)=========================================================negative,mailto won't work... 有类似于mailTo这样的执行文件或者API吗? 有类似于mailTo这样的执行文件或者API吗?没有自己拼mail 自己连服务器 对了,网上面有这样的例子阿~~~你自己可以用socket来实现阿~~~但是要采用base64编码进行编码~~~ 给你一个参考~这个是我的好友做的~~可以实现你所说的功能~~~#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为本机socketbool 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;} 果然是,好东东!带我慢慢测试一下谢谢snowbirdfly(专心搞好嵌入式~~~) 是调用SendEmail()吗?比如我用新浪邮箱[email protected]发送电子邮件到[email protected]怎么调用SendEmail()? 比如我用新浪邮箱[email protected]发送电子邮件到[email protected]怎么调用SendEmail()? 以文本方式阅读html 类? 请高手帮帮我啊,本机操作系统是xp,以管理员账户连接到局域网的另一台xp后,GetFileSecurity取一个目录的安全描述符,却返回错误码5 基础太差,请教大家一个初级问题 请教windows窗口和视图的创建过程,先后调用哪些函数?? wma文件结构 到底是怎样? 请问哪位知道cdecl, declspec的英文全称及declspec的意思吗? 程序如果建立“快捷放式”????????????????? 谁有切分窗口的例子 数据库问题,100冰儿请您指点 求教 校园网关登陆器怎么写的 有例子最好了 念硕士就是这个下场 - 散分
If you are lazy,just use MAPI...
能用Winexec(...)执行吗?若能,Winexec(里面输入什么内容?)
=========================================================
negative,mailto won't work...
没有自己拼mail 自己连服务器
你自己可以用socket来实现阿~~~
但是要采用base64编码进行编码~~~
这个是我的好友做的~~
可以实现你所说的功能~~~
#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;
}
带我慢慢测试一下
谢谢snowbirdfly(专心搞好嵌入式~~~)
比如我用新浪邮箱[email protected]发送电子邮件到[email protected]
怎么调用SendEmail()?
怎么调用SendEmail()?