利用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);

  

【DevExpress】邮箱制作小结的更多相关文章

  1. 动态传递参数到DevExpress.XtraReports的小结

    原文:动态传递参数到DevExpress.XtraReports的小结 前两种方法和WinForm一样,可以传递参数.数组.实体对象.DataTable等1. 采用构造函数具体用法:在Report中p ...

  2. cadence 焊盘制作小结

    因为以前一直用altium designer 话PCB,做封装的时候焊盘是不用自己操心的,但是开始用cadence以后发现好多以前不太懂的东西,需要自己画焊盘,这就导致需要了解好多自己以前不懂的东西, ...

  3. cadence 封装制作小结

    assembly :是装配层,就是元器件的实际大小,用来产生元器件的装配图.也可以使用此层进行布局:外框尺寸应该为元件除焊盘外的部分 该区域可比silkscreen小10mil,线宽不用设置,矩形即可 ...

  4. html5播放器制作小结

    链接:http://snowinmay.net/6rooms/html/music.php 9月份前的版本: 播放,暂停,点赞,播放状态显示. 9.2版本: 下载歌曲,静音,时间倒计时(点击暂停时倒计 ...

  5. Ubuntu Docker 简单安装 GitLab

    相关博文: Ubuntu 简单安装 Docker Ubuntu 简单安装和配置 GitLab 服务器版本 Ubuntu 16.04 LTS. 1. 安装和配置 安装命令: sudo docker ru ...

  6. Python开发 基础篇

    2019-02-01 产生验证码: 用户输入的值和显示的值相同时显示Correct,否则继续生成随机验证码等待用户输入 def check_code(): import random checkcod ...

  7. c#学习内容

    学习winform+DevExpress 界面制作 wpf UIAutomation 控制别的程序 ok c#通过句柄控制别的程序  ok c# 截图  ok c# 多线程  ok c# 数据库myq ...

  8. DevExpress - 使用 GaugeControl 标尺组件制作抽奖程序 附源码

    前不久,公司举办了15周年庆,其中添加了一个抽奖环节,要从在读学员中随机抽取幸运学员,当然,这个任务就分到了我这里. 最后的效果如下,启动有个欢迎页面,数据是来自Excel的,点击开始则上面的学号及姓 ...

  9. DevExpress控件的GridControl控件小结

    DevExpress控件的GridControl控件小结 (由于开始使用DevExpress控件了,所以要点滴的记录一下) 1.DevExpress控件组中的GridControl控件不能使横向滚动条 ...

随机推荐

  1. git 合并分支到master

    git 合并分支到master   假如我们现在在dev分支上,刚开发完项目,执行了下列命令 git add .git commit -m ‘dev'git push -u origin dev 然后 ...

  2. [模板] 树状数组 (C++ class)

    闲来无事(其实是打了两三道树状数组题),写了个树状数组模板…… /* Author: hotwords */ template<typename tp> class BinTree { p ...

  3. vsftpd 的端口模式以及端口映射问题

    开个blog ,写一下关于vsftp 端口映射的一些坑 内容繁多,改日再更.

  4. shell编程规范:引用

    Shell代码规范 作 者: 毕小朋 用 途: 规范Shell代码书写,方便查看与修改 博 客: http://blog.csdn.net/wirelessqa 参 考: http://www.ohl ...

  5. 如何使用HTML5的WebSocket实现网页与服务器的双工通信(二)

    本系列服务端双工通信包括两种实现方式:一.使用Socket构建:二.使用WCF构建.本文为使用WCF构建服务端的双工通信,客户端同样使用Html5的WebSocket技术进行调用. 一.创建WCF服务 ...

  6. 显示react配置

    1. 由于react默认隐藏webpack配置需要手动显示. npm run eject //Are you sure you want to eject? This action is perman ...

  7. python阅读目录

    一.python基础--列表.元祖.字典.集合 二.1231 三.12121

  8. String与Integer问题

    今天分享一下关于最近面试的问题,临近春节,而我在茫茫人海中奔波,今天面试了来到了中关村科技园,挺气派的,之前也是在外面看看,今天就去了,心里有点激动,恰好,正好赶上了上班时,看见它们的努力,我感到再累 ...

  9. Linux学习第一天————了解root用户和基本的shell命令

    一.了解Linux中的root用户  1.1root用户 使用过MySQL的同学都知道MySQL中有一个变态的存在叫做超级管理员,他可以从操作任何一个数据库,那么在Linux中也有这么一个变态的存在他 ...

  10. 安装系统后IP配置问题

    1.配置静态IP 在/etc/sysconfig/network-script/ifcfg-eth0 文件,网卡管理文件.修改为静态IP.IPADDR.网关.掩码等 同一台机器上的网卡不能配置在同一网 ...