Fork me on GitHub

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;//
    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);
整个就完成了。

posted @ 2020-04-11 14:37  HelloLLLLL  阅读(659)  评论(0编辑  收藏  举报