MFC之使用blat发送邮件
blat的下载地址:
http://www.blat.net
我用它进行了smtp服务的邮件发送。这里我使用的qq邮箱,qq邮箱使用的密码是授权码,可以再qq邮箱设置里面开启smtp服务。
下载下来是文件目录结构这样的:
首先可以再本机上注册,要用管理员运行cmd,cd到blat.exe目录输入如下命令:
blat -install smtp.qq.com 576484879@qq.com 3 25
具体操作如下:
下面就是编写代码,主要就是引入blatdll.h头文件,引入lib,加载blat.dll,从dll中获取send方法,最后发送。
这里#pragma comment(lib,”blat”)要配置lib的寻找目录。
这里是不能像加载.lib文件一样去加载.dll,我不知道该怎么做,所以我用的是再代码里用LoadLibrary()方法来做的。
具体用法:
typedef int(__stdcall*pSend)(LPCSTR sCmd); HINSTANCE hdll; pSend mySend; hdll = LoadLibrary(TEXT("blat32/blat.dll")); mySend = (pSend)GetProcAddress(hdll, "Send"); // mySend(dBuf)
这里要注意的是:typedef int(__stdcall*pSend)(LPCSTR sCmd);win32编译的就一定要加__stdcall,不然会再dll中找不到这个方法,LPCSTR 就是const char*,虽然写LPCTSTR也能匹配到方法,但是传递过去的字符串会被自动截取。
构造我的邮件信息,这里我是发送验证码就很简单。
CString yzm; yzm.Format(TEXT("验证码:%d"),m_uYzm); CString cmd2;// = TEXT("-to kwjf11@sina.com -subject 更改密码 -body '%s' -u 576484879@qq.com -pw lakqyyyykfnrbehi -charset utf-8"); cmd2.Format(TEXT("-to SendTo@sina.com -subject 更改密码 -body %s -u 576484879@qq.com -pw 授权码 -charset utf-8"), yzm);
这里需要把CString转换成char*,方法如下
wchar_t *sBuf = cmd2.AllocSysString(); DWORD dBufSize = WideCharToMultiByte(CP_OEMCP, 0, sBuf, -1, NULL, 0, NULL, FALSE); //分配目标缓存 char *dBuf = new char[dBufSize]; memset(dBuf, 0, dBufSize); //转换 int nRet = WideCharToMultiByte(CP_OEMCP, 0, sBuf, -1, dBuf, dBufSize, NULL, FALSE);
最后就是发送了
int x = mySend(dBuf);
整个就完成了。