利用DevExpress的RichEditControl控件可以发送包含图片的邮件。但存在一个问题。RichEdit直接将图片解析成base64码包含在RichEdit的HtmlText中,这导致客户端发送到服务器时,邮件内容串行化超过容量导致发送失败。

解决的办法参考帖子:https://www.cnblogs.com/wuhuacong/archive/2013/01/27/2878368.html

按照该帖子的方法将图片提取出来,分别发送邮件内容和图片。

Program.MainForm.poxy.AddMailIns(inMails.ToArray());
Program.MainForm.poxy.AddMailOuts(outMails.ToArray());
Program.MainForm.poxy.InsertMailImages(mailImages.ToArray());
Program.MainForm.poxy.InsertMailImageRelations(mailImageRelations.ToArray());

  上面分别存入数据库的四个表:收件表、发件表、图片表、图片邮件关联表。

但是参考帖子只给了发送邮件的解决思路,没有给出接收邮件和显示邮件的方法

具体思路是,给每个邮件对象添加一个IncludeImage属性,如果该属性为false,直接接收邮件并显示即可。

如果为true,在按照邮件ID去邮件图像关联表中找出包含图像的ImageId,再去图像表找出图像,读到本地的图像为byte[]类型,将其转换为base64码,再在邮件中,替换即可。类似这样:

 protected string ParseRichEditContent(frmComMail.BoxMailItem boxMailItem)
{
bool isInMail = boxMailItem.IsInMail;
string mailContent = "";
bool isExistRelation = false;
bool isExistMailImage = false;
string mailId = "";
if (isInMail)
{
mailContent = boxMailItem.InMail.MailContent;
if ((bool)boxMailItem.InMail.IsIncludeImage)
mailId = boxMailItem.InMail.MailId;
}
else
{
mailContent = boxMailItem.OutMail.MailContent;
if ((bool)boxMailItem.OutMail.IsIncludeImage)
mailId = boxMailItem.OutMail.MailId;
}
if (!mailId.Equals(""))//处理有图像文件的显示
{
for (int jj = 0; jj < _frmComMail.mailImageRelations.Count; jj++)
{
if (_frmComMail.mailImageRelations[jj].MailId.Equals(mailId))
{
isExistRelation = true;
break;
}
}
if (!isExistRelation)
_frmComMail = _frmComMail.RefreshMails(0x01000, mailId);//增加本地内存中的mailImageRelation(即_frmComMail.mailImageRelations) for (int jj = 0; jj < _frmComMail.mailImageRelations.Count; jj++)
{
if (_frmComMail.mailImageRelations[jj].MailId.Equals(mailId))
{
for (int kk = 0; kk < _frmComMail.mailImages.Count; kk++)
{
if (_frmComMail.mailImages[kk].ImageId.Equals(_frmComMail.mailImageRelations[jj].ImageId))
{
isExistMailImage = true;
break;
}
}
}
}
if (!isExistMailImage)
_frmComMail = _frmComMail.RefreshMails(0x00100, mailId);//增加本地内存中的mailImage(即_frmComMail.mailImages) for (int jj = 0; jj < _frmComMail.mailImageRelations.Count; jj++)
{
if (_frmComMail.mailImageRelations[jj].MailId.Equals(mailId))
{
for (int kk = 0; kk < _frmComMail.mailImages.Count; kk++)
{
if (_frmComMail.mailImages[kk].ImageId.Equals(_frmComMail.mailImageRelations[jj].ImageId))
{
string base64String = Convert.ToBase64String(_frmComMail.mailImages[kk].Image);
string replaceString = "data:image/" + _frmComMail.mailImages[kk].ImageType + "; base64," + base64String;
mailContent = mailContent.Replace(_frmComMail.mailImages[kk].ImageId, replaceString);
}
}
}
}
}
return mailContent;
}

  上述代码段核心内容为:

string base64String = Convert.ToBase64String(_frmComMail.mailImages[kk].Image);
string replaceString = "data:image/" + _frmComMail.mailImages[kk].ImageType + "; base64," + base64String;
mailContent = mailContent.Replace(_frmComMail.mailImages[kk].ImageId, replaceString);

  

最新文章

  1. JSP页面之间互相传值
  2. git初学习体会
  3. 课堂Beta发布140字评论
  4. PHP中的魔术变量
  5. ACID CAP BASE介绍
  6. android app widget 创建调用周期
  7. Windows store app Settings 的 应用 ( viewmodel + windows.storage)
  8. DataSet离线数据集实例
  9. UART RS232 的CTS与RTS
  10. 修改EBS R12 URL连接端口
  11. MySQL两个最简单的delimiter的使用demo
  12. POI读取excel工具类 返回实体bean集合(xls,xlsx通用)
  13. libz.dylib
  14. [知了堂学习笔记]_eclipse引入svn插件,并将项目同步到svn
  15. Count on a tree SPOJ - COT (主席树,LCA)
  16. rediret 加/与不加/的区别
  17. Android开发 ---Button的OnClickListener的三种实现方法
  18. interrupt()方法的简单理解
  19. 树莓派3B+简单入门
  20. Ubuntu 12.04下spark1.0.0 集群搭建(原创)

热门文章

  1. Problem A: STL——灵活的线性表
  2. SQL Server用表组织数据
  3. 测试工具安装(JMeter,Postman)
  4. MYSQL ini 配置文件详解及性能优化方案
  5. 字符串排序简单的工具类,数组转list,list转数组
  6. python基础语法四
  7. ChIP-seq 核心分析 下游分析
  8. 华莱士的 第二个python程序之(格式化输出)
  9. 爱因斯坦求和约定 (Einstein summation convention)
  10. Hadoop学习笔记2 - 第一和第二个Map Reduce程序