工控编程吧
标题:
344上位机VC MFC实现邮件的接收
[打印本页]
作者:
qq263946146
时间:
2016-9-20 16:25
标题:
344上位机VC MFC实现邮件的接收
(, 下载次数: 0)
上传
点击文件名下载附件
344上位机VC MFC实现邮件的实现邮件的接收
功能展示
电子 邮件在日常生活中是很常见的一种通讯 工具,我们当前例程实现邮件的发送与接收功能,效果如图,依照图片填写正确可用的邮件服务器及帐号密码,收件邮箱就可以点击<收取邮件><发送以下正文>按钮实现邮件的收发功能;当前例程主要演示邮件接收功能,邮件的发送功能请参考下一例程
要点提示
例程是通过Jmail组件 实现邮件的接收功能,此组件可以实现邮件的接收与发送。邮件接收由组件中IPOP3Ptr指针和此指针的Messages指针完成, IPOP3Ptr负责与邮件服务器的联接, Messages负责获取邮件的具体内容。
Jmail组件可从网络下载,下载后得在系统中注册才可正常使用,注册可以通过手工完成,也可使用前面例程的代码实现,当前例程通过 手工执行指令regsvr32 c:\jmail.dll实现组件的注册, c:\jmail.dll为组件所在绝对位置;
实现功能
1.新建基于对话框的应用程序
2.依照例程界面依次添加编辑框IDC_SERVER, IDC_ACCOUNT, IDC_PASSWORD, IDC_RECEIVER, IDC_TITLE分别对应邮件服务器(POP3),帐号,密码,收件邮箱,邮件标题,再添加一列表框控件IDC_LIST1用于罗静出获得的控件,及编辑框IDC_EDIT6用于邮件内容的输入。添加两按钮<收取邮件><发送以下正文>关联函数,实现邮件的接收与发送
void CGkbc8Dlg::OnReceive()
{
CString sServer,sAccount,sPassword;
GetDlgItemText(IDC_SERVER,sServer);
GetDlgItemText(IDC_ACCOUNT,sAccount);
GetDlgItemText(IDC_PASSWORD,sPassword);
if(sServer.IsEmpty()||sAccount.IsEmpty())
{
AfxMessageBox("信息填写不全");
return;
}
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
pList->DeleteAllItems();//清空列表框数据
try
{
jmail::IPOP3Ptr pPOP3("JMail.POP3");
jmail::IMessagesPtr pMessages;
pPOP3->Timeout = 30;// 设置连接服务器超时限制 30S
// 连接邮件服务器,110为pop3默认端口号
pPOP3->Connect((LPCTSTR)sAccount,
(LPCTSTR)sPassword,
(LPCTSTR)sServer,
110);
pMessages = pPOP3->Messages;
long lCount = pMessages->Count - 1;// 已下载的邮件的实际个数(因为第0个ITEM是未用的,所以-1)
if(lCount == 0)
AfxMessageBox("信箱为空");
else
{
jmail::IMessagePtr pMessage;
for(long i = 1; i <= lCount; i++)// 遍历每封信
{
pMessage = pMessages->Item
;
//信件的具体信息
_bstr_t bstrFrom = pMessage->From;
_bstr_t bstrSubject = pMessage->Subject;
_bstr_t bstrBody = pMessage->Body;
COleDateTime oleDate = pMessage->Date;
//往list控件中添加信件信息
int nListItem = pList->InsertItem(i, (const char*)bstrFrom);
pList->SetItem(nListItem, 1, LVIF_TEXT, (const char*)bstrSubject, 0, 0, 0, NULL);
pList->SetItem(nListItem, 2, LVIF_TEXT, (const char*)oleDate.Format("%Y-%m-%d"), 0, 0, 0, NULL);
m_sBodyArray.Add((const char*)bstrBody);//保存信件的主体文本
pMessage.Release();
}
}
pPOP3->Disconnect();// 断开连接
}
catch(_com_error e)//提示错误信息
{
CString strErr;
strErr.Format("错误信息:%s\r\n错误描述:%s", (LPCTSTR)e.ErrorMessage(), (LPCTSTR)e.Description());
AfxMessageBox(strErr);
}
}
void CGkbc8Dlg::OnSend()
{//由于服务器的垃圾邮件过虑系统限制,可能仅能发送功能一次。
CString sMailServer,sAccount,sReceiver,sTitle,sContent;
GetDlgItemText(IDC_SERVER,sMailServer);//服务器可以留空
GetDlgItemText(IDC_ACCOUNT,sAccount);
GetDlgItemText(IDC_RECEIVER,sReceiver);
GetDlgItemText(IDC_TITLE,sTitle);
GetDlgItemText(IDC_EDIT6,sContent);
if(sAccount.IsEmpty()||sReceiver.IsEmpty())
{
AfxMessageBox("收发邮件填写不全");
return;
}
//<>
try
{
jmail::IMessagePtr pMessage("JMail.Message");
pMessage->From = (LPCTSTR)sAccount;// 发件人邮箱
pMessage->FromName = "工控编程吧";// 发件人姓名
pMessage->AddRecipient((LPCTSTR)sReceiver, "", "");// 添加收件人
pMessage->Priority = 3;// 优先级设置,1-5逐次降低, 3为中级
pMessage->Charset = "GB2312";// 编码方式设置, 默认是iso-8859-1
pMessage->Subject = (LPCTSTR)sTitle;// 邮件标题
pMessage->Body = (LPCTSTR)sContent;// 正文
pMessage->Send((LPCTSTR)sMailServer, VARIANT_FALSE);// 开始发送
pMessage.Release();
AfxMessageBox("发送成功!");
}
catch (_com_error e)
{
CString strErr;
strErr.Format("错误信息:%s\r\n错误描述:%s", (LPCTSTR)e.ErrorMessage(), (LPCTSTR)e.Description());
AfxMessageBox(strErr);
}
}
3.在主对话框中添引入组件#import “jmail.dll“ using namespace jmail;添加一变量CStringArray m_sBodyArray;//全部信件内容部分。并在程序初始化时设置列表框控件属性
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_LIST1);
// 设置列表控件属性
pList->ModifyStyle(0,LVS_REPORT,0);
::SendMessage(pList->m_hWnd,
LVM_SETEXTENDEDLISTVIEWSTYLE,
LVS_EX_FULLROWSELECT,
LVS_EX_FULLROWSELECT);
//添加控件列表头
pList->InsertColumn(0, "发件人", LVCFMT_LEFT, 120);
pList->InsertColumn(1, "主题", LVCFMT_LEFT, 350);
pList->InsertColumn(2, "日期", LVCFMT_LEFT, 100);
我们来演示下功能实现的整个过程
接收
[iqiyi]http://player.video.qiyi.com/a40b83970707303bce0c0ba09406c87f/0/0/w_19rstivcbd.swf-albumId=6347739509-tvId=6347739509-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件 [weixinlianxi]1[/weixinlianxi]
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4