Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >使用MimeKit从数据库读取时,电子邮件的丰富字符会被错误翻译

使用MimeKit从数据库读取时,电子邮件的丰富字符会被错误翻译
EN

Stack Overflow用户
提问于 2019-04-24 13:59:45
回答 1查看 175关注 0票数 1

我有一个用VB.Net编写的windows服务,它将电子邮件下载到MimeMessage对象中,删除其附件,然后将电子邮件的其余部分写入SQL Server数据库。一个单独的ASP.Net应用程序(使用VB.Net)将电子邮件读回到MimeMessage对象中,并根据请求将其返回给用户。

在此过程中发生了一些事情,导致在输出中出现奇怪的字符。

这个问题(Content encoding using MimeKit/MailKit)似乎很有希望,但将字符编码从ASCII码改为UTF8等并不能解决这个问题。

下面是将电子邮件保存到数据库的代码:

代码语言:javascript
代码运行次数:0
复制
Sub ImportEmail(exConnectionString As String)
    Dim oClient As New Pop3Client()
    ' … email connection code removed …
    Dim message = oClient.GetMessage(0)
    Dim strippedMessage As MimeMessage = message
    ' … code to remove attachments removed …
    Dim mem As New MemoryStream
    strippedMessage.WriteTo(mem)
    Dim bytes = mem.ToArray
    Dim con As New SqlConnection(exConnectionString)
    con.Open()
    Dim com As New SqlCommand("INSERT INTO Emails (Body) VALUES (@RawDocument)", con)
    com.CommandType = CommandType.Text
    com.Parameters.AddWithValue("@RawDocument", bytes)
    com.ExecuteNonQuery()
    con.Close()
End Sub

下面是将其读回给用户的ASP.Net代码:

代码语言:javascript
代码运行次数:0
复制
Private Sub OutputEmail(exConnectionString As String)
    Dim BlobString As String = ""
    Dim Sql As String = "SELECT Body FROM Emails WHERE Id = @id"    
    Dim com As New SqlClient.SqlCommand(Sql)
    com.CommandType = CommandType.Text
    com.Parameters.AddWithValue("@id", ViewState("email_id")) 

    Dim con As New SqlConnection(exConnectionString)
    con.Open()
    com.Connection = con
    Dim da As New SqlClient.SqlDataAdapter(com)
    Dim dt As New DataTable()
    da.Fill(dt)
    con.Close()

    If dt.Rows.Count > 0 Then
        Dim Row = dt.Rows(0)
        BlobString = Row(0).ToString()

        Dim MemStream As MemoryStream = GetMemoryStreamFromASCIIEncodedString(BlobString)
        Dim message As MimeMessage = MimeMessage.Load(MemStream)

        BodyBuilder.HtmlBody = message.HtmlBody
        BodyBuilder.TextBody = message.TextBody
        message.Body = BodyBuilder.ToMessageBody()

        Response.ContentType = "message/rfc822"
        Response.AddHeader("Content-Disposition", "attachment;filename=""" & Left(message.Subject, 35) & ".eml""")
        Response.Write(message)
        Response.End()
    End If
End Sub

Private Function GetMemoryStreamFromASCIIEncodedString(ByVal BlobString As String) As MemoryStream
    Dim BlobStream As Byte() = Encoding.ASCII.GetBytes(BlobString) ' **
    Dim MemStream As MemoryStream = New MemoryStream()
    MemStream.Write(BlobStream, 0, BlobStream.Length)
    MemStream.Position = 0
    Return MemStream
End Function

例如,假设以下文本出现在原始电子邮件中:

代码语言:javascript
代码运行次数:0
复制
“So long and thanks for all the fish” (fancy quotes)

当回读时,它显示如下:

代码语言:javascript
代码运行次数:0
复制
†So long and thanks for all the fishâ€

其他字符替换如下:

-(长破折号)变成?欧元“

·(项目符号)变成·

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 16:23:48

问题出在以下代码片段中:

代码语言:javascript
代码运行次数:0
复制
If dt.Rows.Count > 0 Then
    Dim Row = dt.Rows(0)
    BlobString = Row(0).ToString() ' <-- the ToString() is the problem

    Dim MemStream As MemoryStream = GetMemoryStreamFromASCIIEncodedString(BlobString)
    Dim message As MimeMessage = MimeMessage.Load(MemStream)

要修复数据损坏,您需要做的是:

代码语言:javascript
代码运行次数:0
复制
If dt.Rows.Count > 0 Then
    Dim Row = dt.Rows(0)
    Dim BlobString as Byte() = Row(0)

    Dim MemStream As MemoryStream = new MemoryStream (BlobString, False)
    Dim message As MimeMessage = MimeMessage.Load(MemStream)

你也可以摆脱你的GetMemoryStreamFromASCIIEncodedString函数。

(注意:我不知道VB.NET,所以我只是猜测语法,但它应该非常接近正确)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55831902

复制
相关文章
Airbnb定价算法揭密
你应该收多少钱才会让一个人住在你家里?或者说,你愿意花多少钱住在别人的房子里?对于计划好的假期和突然决定的行程,你是否愿意或多或少地花点钱?
花落花飞去
2018/02/02
4.7K0
Airbnb定价算法揭密
如何给产品定价
也就是算清楚自己的成本,包括固定成本和变动成本。对一些有规模效应的产品,我们根据不同的规模算出的成本是不一样的。所以才会有很多互联网产品通过补贴换规模。
石云升
2022/08/25
2.6K0
SAP SD 定价过程配置
4.描述:对于条件类型,系统会自动COPY过来描述。也可以在没有条件类型时手工填写。对于定价过程的每一行都可以看做定价因素。
matinal
2020/11/27
4.2K0
SAP SD 定价过程配置
解密Airbnb的定价算法
作者:Dan Hill,Airbnb的产品主管 编译/校对:张天雷/郭蕾 摘自:http://www.infoq.com/cn 对于计划出租房屋的房主,你应该将房屋的租金设定为多少呢?或者对于租房的顾客而言,应该给自己的租房支付多少呢?不管是对于一次有计划的远足,还是一次说走就走的旅行,为租房付出多少才真正合适呢? 回答这些问题并不容易。事实上,可以通过将潜在的租房列在我们网站—Airbnb上来实现,Airbnb是一家联系旅游人士和家有空房出租的房主的服务型网站,它可以为用户提供各式各样的住宿信息。 在焦
大数据文摘
2018/05/21
2K0
解析服务,由你定价!
DNSPod是一家上线15年的优质DNS解析服务商,为了更好的为广大用户提供可靠放心的解析服务,我们对产品性能开展了优化升级。而关于产品的定价,我们决定遵循我们一贯的宗旨:倾听用户的声音。 因此,这一次,解析套餐的定价权,交给你们。 只需要花3分钟,点击下方图片填写问卷,DNSPod解析服务,由你定价!更有大额代金券等你领取噢! SMB 腾讯云中小企业产品中心   腾讯云中小企业产品中心(简称SMB),作为腾讯云体系中唯一专业服务于8000万中小企业的业务线,致力于为中小微企业提供全面完善贴心的数字
腾讯云DNSPod团队
2020/06/22
1.9K0
资本资产定价模型 CAPM
原文首发:https://maoli.blog.csdn.net/article/details/90415391
润森
2020/03/16
1.6K0
资本资产定价模型 CAPM
资本配置与资本定价
本文主要探讨了资本配置和资本定价方面的内容,包括资本配置的有效前沿、资本定价模型(如资本资产定价模型和证券市场线)和对冲基金在资本定价中的作用。作者通过分析资本配置和资本定价的关系,以及资本市场中的风险和收益,探讨了建立有效前沿的方法和资本资产定价模型在证券组合管理中的应用。同时,文章还探讨了资本定价模型在量化交易和对冲基金中的应用,以及如何在证券组合管理中应用这些模型。
用户1147754
2018/01/03
2.7K0
资本配置与资本定价
案例 | 解密Airbnb的定价算法
对于计划出租房屋的房主,你应该将房屋的租金设定为多少呢?或者对于租房的顾客而言,应该给自己的租房支付多少呢?不管是对于一次有计划的远足,还是一次说走就走的旅行,为租房付出多少才真正合适呢? 回答这些问题并不容易。事实上,可以通过将潜在的租房列在我们网站— Airbnb 上来实现,Airbnb是一家联系旅游人士和家有空房出租的房主的服务型网站,它可以为用户提供各式各样的住宿信息。 在焦点小组,我们观察到人们在我们的网站上填写房屋信息的过程中,往往在价格选项上会显得为难。很多人会查看他们的邻居们所设置的价码,然
CDA数据分析师
2018/02/08
2.2K0
案例 | 解密Airbnb的定价算法
数据集 | 手机定价数据集
本数据集包含了一系列手机的型号,各种配置信息以及价格信息。您可以利用机器学习等算法来预测一个特定配置手机的售价。
数据科学人工智能
2022/03/30
2.9K0
数据集 | 手机定价数据集
决定价格的因素
让你陷入困境的,并不是这个世界;真正让你陷入困境的,是这个世界最终并非你所想象——马克·吐温 我们好像看了很多文章,还是那种爆款文章,类似于“为什么这么努力,还是过不好一生”、“为什么我的努力看不到结果”等等,今天深度思考了一个问题——我们的价值定义出来了我们的价格,但是最终影响我们价格的到底是什么?如果单纯的从我们自身的价值来说,未免有点冠冕堂皇,那么我们今天分析一下,是什么决定了我们的价格! 提纲 “周三省”; 最重要的事; 需要养成的几个习惯; 决定价格最重要的是需求; 换位思考 1 “周三省”
用户2025931
2018/06/19
1.8K0
如何定价才能获取最大收益?
我们在日常工作中经常会碰到类似问题,通常我们都是定性来分析,根据经验来估算,但是如果做成定量分析该如何操作呢?另外是否可以通过Excel来达到定量分析的目的呢?
逍遥之
2020/03/23
1.4K0
SAP 采购定价过程字段解析
1、 步骤:代表了创建PO时,哪个条件类型放到前面,哪个放到后面,如果步骤号相同,那就以谁先选择出来谁就在前面。
matinal
2020/11/27
1.3K0
SAP 采购定价过程字段解析
Docker云定价惹恼Tutum用户
Tutum平台的beta版用户对于近来急促上涨的价格感到不满,但Docker官方表示今年会有定价选项的后续方案出台。请保持关注。 Docker云来了,但它并未完全受欢迎。 Docker公司的Docker云容器即服务的产品,现在已经就绪,该产品集成了Docker去年秋天所收购的Tutum容器管理软件,以及Docker Hub和Docker ID。这是专为大型企业客户量身打造的,但是,属于Tutum基础客户的一些规模较小的开发企业对于此定价模型感觉受到了冷落。 “Tutum所提供的是在Docker确实有所欠缺的
静一
2018/03/26
1.6K0
SAP 采购定价过程字段解析
1、 步骤:代表了创建PO时,哪个条件类型放到前面,哪个放到后面,如果步骤号相同,那就以谁先选择出来谁就在前面。
matinal
2020/11/05
1.6K0
SAP 采购定价过程字段解析
几篇关于定价因子的文献
定价因子上最基本的模型是CAPM和FF3因子模型,CAPM的文献太古老,没仔细看过。FF3因子模型的文献:
量化小白
2020/07/28
1.1K0
几篇关于定价因子的文献
SaaS 成功的定价模型、策略
来源/作者 :李宽wideplum ---- 定价是SaaS赚钱的核心表现。定价也是SaaS产品价值的体现。今天这篇编译的文章,将带你入门SaaS定价的方法。 每家 SaaS 公司可能各不相同ーー但几乎每家公司都犯了同样的错误,使公司处于危险之中: 它不了解自己的定价。 公司为了创造一个伟大的产品和吸引新的客户而倾注了大量的血汗和泪水。然而,大多数 SaaS 公司并不知道它们对客户的价值,也不知道如何最好地传播价值。 如果你的 SaaS 公司没有一个合适的定价策略,那么你将会丧失巨大的收入。你不知
腾讯SaaS加速器
2020/06/09
2.5K0
Magento 2中文手册之常见概念解析
magento2自带索引机制,例如catalog是一个EAV结构,所以catalog的数据很分散,查询效率比较低,系统每次reindex都会把catalog数据通过indexer机制转移到一个简单表(带有flat的表)上,这样查询效率就得到优化。大多数情况下不需要了解这个概念,系统会自动完成,但如果你通过setup添加EAV attibute或者field,你就必须在indexer.xml声明它。
ytkah
2022/03/14
2.3K0
Uber动态定价中蕴含的算法
在中国的打车市场混战中,Uber也加入了战局。与国内打车公司策略不同,动态定价策略是其核心之一,不论是受到赞扬还是诟病,这个符合经济供求的溢价算法在中国已经启动。 当你在某个夜晚听完演唱会想叫个Uber回家时,你可能会发现价格居然自动上涨了1.5倍甚至更高,这是怎么算出来的。 溢价算法,是基于他们对市场这只无形的手的调节功能,百分之百的相信,以及百分之两百的理解,正如他们自己所说“溢价不是计划好的,是依据供求动态平衡”。 下文摘自Uber的董事会成员Bill Gurley的文章,他深入的探讨一下该定价策
CSDN技术头条
2018/02/09
1.5K0
Uber动态定价中蕴含的算法
点击加载更多

相似问题

cloudfront缓存仅命中定价

20

TCP Holepunch实现

15

禁止Magento2缓存文件403?

20

Magento2:缓存Rest API结果

10

Api网关Authorizer授权缓存定价

225
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文