提问人:Sumak 提问时间:12/17/2020 最后编辑:CommunitySumak 更新时间:12/17/2020 访问量:102
在电子邮件正文中发送加重字符,如何解决编码问题
Send accentuated characters inside an email body, how to fix encoding issues
问:
在发送电子邮件的脚本中,我必须弄清楚如何正确编码电子邮件正文以支持重音字符。我将电子邮件分为 3 个部分:标题、正文和附件,如本教程所示 https://www.tutorialspoint.com/ruby/ruby_sending_email.htmNet::SMTP
修复标题字段的此问题没什么大不了的:Subject
require 'base64'
MARKER = 'FOOBAR'
def self.headers
<<~EOF
From: [email protected]
To: [email protected]
# Base64 encoded UTF-8
Subject: =?UTF-8?B?#{Base64.strict_encode64('Accentuated characters supportés')}?=
Date: #{Time.now.to_s}
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=#{MARKER}
--#{MARKER}
EOF
end
我很想为电子邮件正文重现相同的逻辑,但没有任何成功。我再次尝试了几个标头,例如 Language、Content-Language、Content-Tranfer-Encoding,但没有任何成功。 使用 Ruby 也是无效的。.encode!('utf-8')
我能想到的唯一可行的解决方案是发送 HTML 编码字符:使用 而不是在 HTML 块内。不过,我想避免这种解决方案,因为我必须提高对编码问题的理解。é
é
有人对这个问题有建议吗?
这是我到目前为止的代码,如果它可以帮助任何人:
module Reports
module SMTP
MARKER = 'FOOBAR'
def self.send_report(file_path)
file_content = File.binread(file_path)
encoded_content = [file_content].pack('m') # Base64
mail_content = headers + body + attachment(file_path, encoded_content)
begin
Net::SMTP.start('my.smtp.srv', 25, 'HELO_fqdn', 'username', 'p455w0rD', :plain) do |smtp|
smtp.send_message(mail_content, '[email protected]', ['[email protected]', '[email protected]'])
end
rescue => e
puts e.inspect, e.backtrace
end
end
def self.headers
# see above
end
def self.body
<<~EOF
Content-Type: text/html
Content-Transfer-Encoding:utf8
Here's a franglish text with some characters accentués
--#{MARKER}
EOF
end
def self.attachment(file_path, encoded_content)
<<~EOF
Content-Type: multipart/mixed; name = #{file_path}
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename = #{file_path}
#{encoded_content}
--#{MARKER}--
EOF
end
end
end
注意:这些电子邮件由 ProtonMail 网络客户端正确解码,但我们公司的网络客户端 (OBM) 无法正确显示突出字符或附件。
答:
0赞
Sumak
12/17/2020
#1
从正文部分添加到标题解决了我的问题。;charset="utf-8"
Content-Type
Content-Type: text/html;charset="utf-8"
评论