我的应用程序使用 mailman gem(也使用邮件)从外部服务器读取电子邮件时遇到问题。
ruby 1.9.2p0
mail (2.3.0)
mailman (0.4.0)
actionmailer (= 3.1.3)
数据库.yml
production:
adapter: mysql2
encoding: utf8
这是接收“邮件”的简单方法。我从多部分电子邮件的 text_part(例如,带有附件)或整个正文(已解码)构建 @message_body。
def self.receive_mail(message)
# some code here
@message_body = message.multipart? ? message.text_part.body.to_s : message.body.decoded
# some code here, to save message in database
我的问题是,如果消息没有附件但有变音符号,例如 ą ś ł ń ż ź ó ... 正文在第一个变音符号之前被拆分。因此,如果 body 是:“test żłóbek test”,我将在@message_body 中仅获得“test”。
我的问题是如何以一种优雅的方式保存这样的消息,以便文本部分与所有变音符号一起保存在数据库中。
编辑:为了让它更干净,我收到的电子邮件看起来像这样(它只是从 gmail 发送的电子邮件的一部分)
--20cf307ac4372d830104c11c8cc6 日期:2012 年 5 月 28 日星期一 20:06:16 +0200 Mime 版本:1.0 内容类型:文本/纯文本;charset=ISO-8859-2 内容传输编码:base64 内容 ID:<4fc3be989b76e_794650c25f6625e3@vk1057.some_domain>
dGVzdCC/s7zm8bbzsSB0ZXN0Cg==
所以我们有这个“身体”:dGVzdCC/s7zm8bbzsSB0ZXN0Cg==
解码后我们得到:'test \xbf\xb3\xbc\xe6\xf1\xb6\xf3\xb1 test\n'
问题是从 '\xbf' 开始的数据没有保存在数据库中。
更新
另一个例子,我认为这是这里的问题:
irb(main):008:0* require 'base64'
=> true
irb(main):009:0> a = "test źćłżąńś"
=> "test źćłżąńś"
irb(main):010:0> b = Base64.encode64(a)
=> "dGVzdCDFusSHxYLFvMSFxYTFmw==\n"
irb(main):011:0> Base64.decode64(b)
=> "test \xC5\xBA\xC4\x87\xC5\x82\xC5\xBC\xC4\x85\xC5\x84\xC5\x9B"
看,在 decode64 之后我的变音符号丢失了,该怎么做才能让它们回来?