jmail:VC++代码实现

来源:互联网 发布:linux gdb调试视频 编辑:程序博客网 时间:2024/05/18 22:10

#include "StdAfx.h"
#include "Threadfun.h"

/************************************************************************/
/* 发送邮件线程:发送邮件     */
/************************************************************************/
UINT WorkForce(LPVOID lpParameter)
{
 if(pReceiveThreadH)
 {
  WaitForSingleObject(pReceiveThreadH->m_hThread,INFINITE);
 }

 CString m_EmailAddr =_T("发件人邮箱地址");
 CString m_strpwd = =_T("发件人邮箱密码");
 CString MailAddr = m_EmailAddr;//发件邮件服务器

///////////////////////////////////////////////////////////////////

//发件邮件服务器:字符串拼接开始
 //连接字符串, CString strstr;
 strstr = _T(":");
 strstr += m_strpwd;
 strstr += _T("@");
 MailAddr .Replace(_T("@"), strstr);
 MailAddr .Replace(_T("@"), _T("@smtp."));

//字符串拼接结束

//////////////////////////////////////////////////////////////////

 //邮件内容字符串
 CString FromName =_T("发件人姓名");
 CString strTitle =_T("邮件主题");
 CString strRstr = _T("发送给");  //插入数据库字符串;

 //邮箱地址。
 CString strAddr=_T("收件人邮箱地址");
 //邮箱内容。
 CString strContent=_T("邮件内容");

 //判断发送是否成功.
 bool isSuccess = true;

  try
  {
   jmail::IMessagePtr pmessage("JMail.message");

   pmessage->AddRecipient ((_bstr_t)strAddr,"","");  //收件人邮箱地址,收件人姓名为空
   pmessage->From =(_bstr_t)MailAddr;         //发件人邮箱地址
   pmessage->FromName =(_bstr_t)FromName;    //发件人姓名
   pmessage->Subject=(_bstr_t)strTitle;     //邮件主题
   pmessage->Body =(_bstr_t)strContent;   //邮件正文
   pmessage->Priority =3;                        //邮件优先级
   pmessage->Charset ="GB2312";                  //字符集

   //发送邮件
   pmessage->Send(_bstr_t(m_EmailAddr),VARIANT_FALSE);     
   pmessage.Release ();

  }
  catch(_com_error e)
  {
   //设置isSuccess发送失败.
   isSuccess = false;
    }

}
/************************************************************************/
/* 接收邮件线程:接收邮件   */
/************************************************************************/
UINT WorkForceRecive(LPVOID lpParameter1)

 if(pSendThreadH)
 {
  WaitForSingleObject(pSendThreadH->m_hThread,INFINITE);
 }
 PRECEIVEPARA receivepara = (PRECEIVEPARA)lpParameter1;
 //打开连接。
 jmail::IPOP3Ptr pPOP3("JMail.POP3");
 pPOP3->Timeout = 30; // 设置连接服务器超时限制 30S

 try
 {
  pPOP3->Connect( (LPCTSTR)receivepara->mailname, (LPCTSTR)receivepara->mailpswd,
   (LPCTSTR)receivepara->mailserver, 110); // 连接邮件服务器,110为pop3默认端口号
 }
 catch (_com_error e)
 {
  //AfxMessageBox(_T("连接失败!请检查邮箱地址和密码是否正确!"));
  return 0;
 }
 m_Pop3 = pPOP3;

 
 //读取邮箱中的信件
 jmail::IMessagesPtr pMessages;
 pMessages = m_Pop3->Messages;

 // 已下载的邮件的实际个数(因为第0个ITEM是未用的,所以-1) 
 long lCount = pMessages->Count - 1;
 long undealID=1;//未做回复处理的邮件的ID
 //如果邮箱是空的就返回。
 if(lCount == 0)
 {
  //AfxMessageBox(_T("信箱为空"));
  return 0;
 }
 else
 {
  jmail::IMessagePtr pMessage;
  // 遍历每封信,获取和最后一条记录的UID和发信人值相同的信的i值,即最后处理的那一封信
  if(lastUIDinThread!=_T("")&&lastSenderinThread!=_T(""))
  {
   for(long i = 1; i <= lCount; i++)
   {
    try
    {
     pMessage = pMessages->Item[i]; 
    }
    catch (_com_error e)
    {
     i=i-1;
     continue;
    }
    //信件的具体信息
    _bstr_t bstrFrom = pMessage->From;//发信人
    CString UID=(TCHAR*)m_Pop3->GetMessageUID(i);//收信的UID

   _bstr_t bstrSubject = pMessage->Subject;//发信主题
   _bstr_t bstrBody = pMessage->Body;//发信内容
   COleDateTime oleDate = pMessage->Date; //收信时间
    pMessage.Release();
   }
  }

////////////////////////////////////////////////////////////////////////////////////////////////////

 //断开POP3连接。
 try
 {
  m_Pop3->Disconnect();
 }
 catch(_com_error e)
 {
  //AfxMessageBox(_T("断开连接失败!请确认已连接!"));
  return 0;
 }

}


0 0