在有关短信、邮件的开发中,我们经常会使用MAPI来开发,但此次在项目开发时却遇到些问题,就是首先MAPI不支持发送彩信,其次使用MAPI需要自己开发相应的UI界面,若是自己开发UI界面同时还需负责相关的设置功能界面的开发,这样的话就加大了项目成本及风险。其实,使用WindowsMobile自带的tmail.exe程序就可方便的利用其提供的短信、彩信、邮件等界面窗口来实现功能。

  tmail提供一系列操作指令,利用这些指令组合就可完成相应的功能,这我已用CTmailPanel类进行了封装,应用示例如下:

  TMAIL_DATA td;

  td.lpTo = L"default@csdn.com";//根据设置里的默认收件人设置

  td.lpSubject = L"测试";//主题

  td.lpBody = L"测试文本内容";//信息内容

  td.lpAttach = L"/My picture/test.jpg";//附件

  if (TMAIL_SUCCESS != CTmailPanel::SendEmail(td))

  {

  MessageBox(_T("发送失败!"));

  }

  附录文件:

  CTmailPanel.h

  ///

  //

  // @file

  // @brief

  //

  // 文件名 : TmailPanel.h

  // @n@n版权所有: reflower

  // @n@n作 者 : reflower

  // @n@n创建时间: 2009-9-2 9:26:49

  // @n@n文件描述: 利用PPC下的tmail.exe程序进行短信、彩信及邮件的发送(弹出用户操作界面)

  // @version 版本 修改者 时间 描述@n

  // @n reflower 2009-09-02

  //

  ///

  #pragma once

  #ifndef _TMAILPANEL_H_

  #define _TMAILPANEL_H_

  typedef enum _TMAIL_ERROR

  {

  TMAIL_SUCCESS = 0,

  TMAIL_PARAMETER_ERROR,

  }TMAIL_ERROR;

  typedef struct _TAMIL_STRUCT

  {

  LPCTSTR lpTo;//接收人(邮箱或手机号,多个收件人以分号隔开)

  LPCTSTR lpCc;//抄送人,仅支持邮件发送,多个收件人以分号隔开

  LPCTSTR lpBcc;//密件抄送人,仅支持邮件发送,多个收件人以分号隔开

LPCTSTR lpSubject;//主题

  LPCTSTR lpBody;//文本内容

  LPCTSTR lpAttach;//附件,全路径

  _TAMIL_STRUCT()

  {

  lpTo = NULL;

  lpCc = NULL;

  lpBcc = NULL;

  lpSubject = NULL;

  lpBody = NULL;

  lpAttach = NULL;

  }

  }TMAIL_DATA;

  class CTmailPanel

  {

  public:

  CTmailPanel(void);

  ~CTmailPanel(void);

  public:

  //发送邮件

  static TMAIL_ERROR SendEmail(TMAIL_DATA &tData);

  //发送短信

  static TMAIL_ERROR SendSMS(TMAIL_DATA &tData);

  //发送彩信

  static TMAIL_ERROR SendMMS(TMAIL_DATA &tData);

  private:

  static BOOL Run(CString strParameter);

  };

  #endif

  CTmailPanel.cpp

  ///

  //

  // @file

  // @brief

  //

  // 文件名 : TmailPanel.cpp

  // @n@n版权所有: reflower

  // @n@n作 者 : reflower

  // @n@n创建时间: 2009-9-2 9:26:49

  // @n@n文件描述: 利用PPC下的tmail.exe程序进行短信、彩信及邮件的发送(弹出用户操作界面)

  // @version 版本 修改者 时间 描述@n

  // @n reflower 2009-09-02

  //

  ///

  #include "StdAfx.h"

  #include "TmailPanel.h"

  CTmailPanel::CTmailPanel(void)

  {

  }

  CTmailPanel::~CTmailPanel(void)

  {

  }

  //发送邮件

  TMAIL_ERROR CTmailPanel::SendEmail(TMAIL_DATA &tData)

  {

  if (tData.lpTo == NULL

  && tData.lpCc == NULL

  && tData.lpBcc == NULL)

  {

return TMAIL_PARAMETER_ERROR;

  }

  CString strContent,strTmp,strFormat;

  strContent = _T("-service /"ActiveSync/"");

  if (tData.lpTo != NULL)

  {

  strTmp = tData.lpTo;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -to /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

  if (tData.lpCc != NULL)

  {

  strTmp = tData.lpCc;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -cc /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

  if (tData.lpBcc != NULL)

  {

  strTmp = tData.lpBcc;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -bcc /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

  if (tData.lpSubject != NULL)

  {

  strTmp = tData.lpSubject;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -subject /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

  if (tData.lpBody != NULL)

  {

  strTmp = tData.lpBody;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -body /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

  if (tData.lpAttach != NULL)

  {

  strTmp = tData.lpAttach;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -attach /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

if (Run(strContent))

  {

  return TMAIL_SUCCESS;

  }

  else

  {

  DWORD deError = GetLastError();

  return (TMAIL_ERROR)deError;

  }

  return TMAIL_SUCCESS;

  }

  //发送短信

  TMAIL_ERROR CTmailPanel::SendSMS(TMAIL_DATA &tData)

  {

  if (tData.lpTo == NULL)

  {

  return TMAIL_PARAMETER_ERROR;

  }

  CString strContent,strTmp,strFormat;

  strContent = _T("-service /"SMS/"");

  if (tData.lpTo != NULL)

  {

  strTmp = tData.lpTo;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -to /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

  if (tData.lpSubject != NULL)

  {

  strTmp = tData.lpSubject;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -subject /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

  if (tData.lpBody != NULL)

  {

  strTmp = tData.lpBody;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -body /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

  if (Run(strContent))

  {

  return TMAIL_SUCCESS;

  }

  else

  {

  DWORD deError = GetLastError();

  return (TMAIL_ERROR)deError;

  }

  return TMAIL_SUCCESS;

  }

  //发送彩信

  TMAIL_ERROR CTmailPanel::SendMMS(TMAIL_DATA &tData)

  {

  if (tData.lpTo == NULL)

  {

  return TMAIL_PARAMETER_ERROR;

  }

  CString strContent,strTmp,strFormat;

strContent = _T("-service /"MMS/"");

  if (tData.lpTo != NULL)

  {

  strTmp = tData.lpTo;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -to /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

  if (tData.lpSubject != NULL)

  {

  strTmp = tData.lpSubject;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -subject /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

  if (tData.lpBody != NULL)

  {

  strTmp = tData.lpBody;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -body /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

  if (tData.lpAttach != NULL)

  {

  strTmp = tData.lpAttach;

  if (!strTmp.IsEmpty())

  {

  strTmp.Replace(_T("/""),_T("//""));

  strFormat.Format(_T(" -attach /"%s/""),strTmp);

  strContent += strFormat;

  }

  }

  if (Run(strContent))

  {

  return TMAIL_SUCCESS;

  }

  else

  {

  DWORD deError = GetLastError();

  return (TMAIL_ERROR)deError;

  }

  }

  BOOL CTmailPanel::Run(CString strParameter)

  {

  SHELLEXECUTEINFO lpExecInfo = {0};

  lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);

  lpExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;

  lpExecInfo.lpVerb = L"Open";

  lpExecInfo.hwnd = NULL;

  lpExecInfo.lpFile = L"tmail.exe";

  lpExecInfo.lpDirectory = L"/windows";

  lpExecInfo.nShow = SW_SHOW;

  lpExecInfo.lpParameters = strParameter.GetBuffer();

  lpExecInfo.hInstApp = NULL;

  BOOL bRet = ShellExecuteEx(&lpExecInfo);

  WaitForSingleObject(lpExecInfo.hProcess,INFINITE);

  strParameter.ReleaseBuffer();

  return bRet;

  }

Windows mobile PPC 下利用 tmail.exe 发送短信、彩信、邮件相关推荐

  1. Windows mobile PPC,利用tmail.exe发送短信、彩信、邮件

    利用tmail.exe发送短信.彩信.邮件 在有关短信.邮件的开发中,我们经常会使用MAPI来开发,但此次在项目开发时却遇到些问题,就是首先MAPI不支持发送彩信,其次使用MAPI需要自己开发相应的U ...

  2. JAVA实现利用第三方平台发送短信验证码

    前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例, ...

  3. JAVA利用第三方平台发送短信验证码

    本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能. 发送短信验证码的原理是:随机生成一个6位数字,将该6位数字保存到session当中,客户端通过se ...

  4. JAVA利用第三方平台发送短信验证码。

    前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例, ...

  5. java短信验证平台_JAVA实现利用第三方平台发送短信验证码

    前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例, ...

  6. MATLAB收取邮件,Matlab 程序结束后发送短信或者邮件

    近期,在服务器上运行matlab程序,由于数据比较多,程序比较复杂,运行时间不固定,而且需要经常改变参数,重复运行几次,所以不清楚程序何时结束,以便于修改参数,继续运行.开始有时间就看看程序是否运行结 ...

  7. java中怎么调用邮箱自动回信息_使用java发送短信和邮件

    (1)发送短信 1.1在中国网建SMS上注册一个用户名,并获取短信密钥(非登录密码) 1.2代码 import java.io.IOException; import org.apache.commo ...

  8. 利用阿里大鱼发送短信验证

    用了很久的CSDN,也从中学到了很多的知识和解决很多问题,今天决定自己也要学会贡献,所以从今天开始我的CSDN博客知识加油站.吐舌头 闲话不多说,言归正传.今天我要分享的是利用阿里大鱼实现网站和APP ...

  9. cmgr linux命令,linux下利用GPRS模块发短信、打电话

    本文转自:http://www.cnblogs.com/wss-linux/p/3986006.html 一.开发环境 内核版本:linux-3.0 开发板:FL2440(nandflash:K9F1 ...

最新文章

  1. R语言数据结构之数组
  2. 如何评估一项技术是否值得长期投入?
  3. POJ2728 Desert King ——01分数规划Dinkelbach迭代法+最小生成树prim算法
  4. 【GUI转exe】Matlab将GUI转化为exe文件
  5. 2013计算机二级试题,2013全国计算机二级上机考试试题46-100套试题
  6. git clone的速度慢到难以忍受问题的解决方法~
  7. 结对项目开发之电梯调度问题
  8. UVALive 2523 Machine Schedule(二分图求最大匹配数)
  9. 7个大一C语言必学的程序 / C语言经典代码大全
  10. 计算机专业 英语词汇大全(持续更新)
  11. C# 用itextsharp把Html转PDF
  12. 手把手教你处理单张百度热力图
  13. 为什么感知机不能表示异或?
  14. 电子身份证助力打击钓鱼攻击
  15. 操作系统之哲学原理 第2版
  16. indesign中如何锁定零点_indesign基础知识教程【indesign软件基础知识技巧】
  17. MFC(CFile)文件操作
  18. java模拟器修改游戏分辨率_海马玩模拟器修改分辨率DPI和隐藏虚拟按键的方法...
  19. 机器人学:操作臂运动学(Manipulator Forward Kinematics)
  20. BCEWithLogitsLoss= BCELoss + Sigmoid

热门文章

  1. Ogre 天龙八部 GridInfo文件格式说明(正确版)
  2. Vscode markdown 添加、粘贴、导入图片
  3. 面向金融行业项目实施及开发。
  4. NYOJ-284 坦克大战
  5. P1125 笨小猴笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词
  6. 【转】超星转PDF最佳方法(对打印机重新审视)
  7. 微信小程序 - 新闻动态 / 公告上下滚动列表(上下循环滚动,无限上下自动滚动列表)
  8. 系统设计之图状数据模型
  9. AI的故事:半人马的诞生之路
  10. 软件测试周刊(第18期):一个精确的测量胜过一千个专家的意见