【DevExpress】邮箱制作小结
利用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】邮箱制作小结的更多相关文章
- 动态传递参数到DevExpress.XtraReports的小结
原文:动态传递参数到DevExpress.XtraReports的小结 前两种方法和WinForm一样,可以传递参数.数组.实体对象.DataTable等1. 采用构造函数具体用法:在Report中p ...
- cadence 焊盘制作小结
因为以前一直用altium designer 话PCB,做封装的时候焊盘是不用自己操心的,但是开始用cadence以后发现好多以前不太懂的东西,需要自己画焊盘,这就导致需要了解好多自己以前不懂的东西, ...
- cadence 封装制作小结
assembly :是装配层,就是元器件的实际大小,用来产生元器件的装配图.也可以使用此层进行布局:外框尺寸应该为元件除焊盘外的部分 该区域可比silkscreen小10mil,线宽不用设置,矩形即可 ...
- html5播放器制作小结
链接:http://snowinmay.net/6rooms/html/music.php 9月份前的版本: 播放,暂停,点赞,播放状态显示. 9.2版本: 下载歌曲,静音,时间倒计时(点击暂停时倒计 ...
- Ubuntu Docker 简单安装 GitLab
相关博文: Ubuntu 简单安装 Docker Ubuntu 简单安装和配置 GitLab 服务器版本 Ubuntu 16.04 LTS. 1. 安装和配置 安装命令: sudo docker ru ...
- Python开发 基础篇
2019-02-01 产生验证码: 用户输入的值和显示的值相同时显示Correct,否则继续生成随机验证码等待用户输入 def check_code(): import random checkcod ...
- c#学习内容
学习winform+DevExpress 界面制作 wpf UIAutomation 控制别的程序 ok c#通过句柄控制别的程序 ok c# 截图 ok c# 多线程 ok c# 数据库myq ...
- DevExpress - 使用 GaugeControl 标尺组件制作抽奖程序 附源码
前不久,公司举办了15周年庆,其中添加了一个抽奖环节,要从在读学员中随机抽取幸运学员,当然,这个任务就分到了我这里. 最后的效果如下,启动有个欢迎页面,数据是来自Excel的,点击开始则上面的学号及姓 ...
- DevExpress控件的GridControl控件小结
DevExpress控件的GridControl控件小结 (由于开始使用DevExpress控件了,所以要点滴的记录一下) 1.DevExpress控件组中的GridControl控件不能使横向滚动条 ...
随机推荐
- SharePoint Framework 在web部件中使用已存在的JavaScript库 - JavaScript库的格式
博客地址:http://blog.csdn.net/FoxDave JavaScript库格式 不同的JavaScript库的编译和打包方式各不相同.一些是以模块的方式打包的,而另一些是以纯脚本运行在 ...
- ASP.NET Core2.2 多用户验证和授权
asp.net core2.2 用户验证 和授权有很详细和特贴心的介绍,我感兴趣的主要是这两篇: cookie身份验证 基于角色的授权 我的项目有两类用户: 微信公众号用户,用户名为公众号的openi ...
- ef 增加或者更新的习惯思维
首先申明是我的习惯思维,经常这样写: var item=db.tableName.FirstOrDefault(ii=>....); if(item==null) { item=new ...; ...
- PTA-栈(括弧匹配)
#include<bits/stdc++.h> using namespace std; #define STACK_INIT_SIZE 10000 #define STACKINCREM ...
- Mac上配置maven+eclipse+spark开发环境
1.安装jdk 2.下载scala-ide.官网:http://scala-ide.org 3.安装maven 4.在eclipse中,配置maven的安装了路径.偏好设置--->maven-- ...
- Python第八章(北理国家精品课 嵩天等)
程序设计方法 8.1体育竞技分析实例 from random import random def printIntro(): print("这个程序模拟两个选手A和B的某种竞技比赛" ...
- Angular 2/4/5+ 重复点击菜单刷新界面
记一下,网上没找到方法 自己搞了好久 通过跳转到别的界面在跳回来的方式进行实现 //再次点击刷新界面 if (this.router.url == item.ur ...
- PyQt5 -pycharm 环境搭建
1.安装PyQt5 在CMD窗口执行命令: pip3 install PyQt5 安装 pyqt_toools pip3 install PyQt5-tools 2.配置PyCharm 1)打开PyC ...
- 关于while read line 循环中变量作用域的问题
前一阵用shell写了一个从数据库中抽取数据生成.xml文件的脚本,要求是每个文件中只生成1000条数据.于是用到了while read line 作为循环. 在制作文件计数器的时候发现了一个问题,在 ...
- 怎样检测TCP/UDP端口的连通性
1 TCP端口的连通性 TC端口的连通性,一般通过telnet检测: TCP协议是面向连接的,可以直接通过telnet命令连接 telnet host-ip port 2 UDP端口的连通性 因为公司 ...