使用bash发送S/MIME加密的html电子邮件

使用bash发送S/MIME加密的html电子邮件,bash,html-email,smime,Bash,Html Email,Smime,如何通过命令行发送加密的和html格式的电子邮件以下是我目前掌握的代码: # Encrypt email with a certificate openssl cms -encrypt -in "/tmp/email_to_be_sent.html" -out "/tmp/encrypted.txt" -from $SENDER -to $RECEIVER -subject "Test: Encrypted message" -des3 "/tmp/$CERT.pem" # Send the

如何通过命令行发送加密的html格式的电子邮件
以下是我目前掌握的代码:

# Encrypt email with a certificate
openssl cms -encrypt -in "/tmp/email_to_be_sent.html" -out "/tmp/encrypted.txt" -from $SENDER -to $RECEIVER -subject "Test: Encrypted message" -des3 "/tmp/$CERT.pem" 
# Send the encrypted email
cat "/tmp/encrypted.txt" | sendmail -f $SENDER $RECEIVER
生成的加密电子邮件
/tmp/encrypted.txt
如下

To: recipient@mail.com
From: sender@mail.com
Subject: Test: Encrypted message
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/pkcs7-mime; smime-type=enveloped-data;name="smime.p7m"
Content-Transfer-Encoding: base64

MIIDjAYJKoZIhvcNAQcDoIIDfTCCA3kCAQAxggFZMIIBVQIBADA9MDcxHDAaBgNVBAoME0V1cm9wZWFu
AxAlApQsmjzCwQoonT57JetCp7DHJdHWU1bkLIZWPPBRwa2EB0ZdxOXIvtg7rJavnnbxeTghblM45Pur
A+6BDKJbWvXFyxb...

问题是,一旦进入收件人收件箱并解密,邮件就不是html格式的,类似
的html代码在邮件中仍然可读。

因此Stefan的评论引导我找到了解决方案。 未加密的电子邮件
/tmp/email\u to\u be\u sent.html
在加密前应具有如下标题:

To: recipient@mail.com
From: sender@mail.com
Subject: Test: Encrypted message
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8

<html><body><p> test message </p></body></html>
至:recipient@mail.com
发件人:sender@mail.com
主题:测试:加密邮件
MIME版本:1.0
内容类型:text/html;字符集=utf-8
测试消息


请注意,电子邮件标题和html代码之间需要换行。

S/MIME要求将原始邮件封装起来。这意味着对原始消息进行加密,并将此事实和加密类型添加到外部消息头中,以便客户端知道如何处理消息内容

因此,定义原始消息格式的消息头需要位于S/MIME信封内,以便客户端在解密消息后知道它是哪种内容类型

正确的方法是从原始消息中提取这些头,然后将它们添加到原始消息体之前。请注意,这些头必须从第一行开始,在这些头之后,原始消息正文开始之前需要一个空行

应该移动到封装消息数据中的头是

  • MIME版本(可选)
  • 内容类型
  • 内容传输编码
  • 内容处置(如果存在)
“移动”意味着它们应包含在封装的消息数据中,并从外部消息头中删除

其余的标题应保留在信封消息中。然后,
opensslcms-encrypt
命令将根据S/MIME加密消息的需要添加上述头

例子 原始消息

From: someone@somedomain.net
To: receipient@otherdomain.net
Subject: It's a test
MIME-Version: 1.0
Content-Type: text/plain;
    charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Custom-Header: Additional data

This is the message text.

Good night.
加密前移动的标题(请注意附加的空行)

加密后的消息

From: someone@somedomain.net
To: receipient@otherdomain.net
Subject: It's a test
X-Custom-Header: Additional data
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
Content-Transfer-Encoding: base64

MIJ5lAYJKoZIhvcNAQcDoIJ5hTCCeYECAQAxggHZMIIB1QIBADCBvDCBtjEaMBgG
A1UEAwwRc2F2aWduYW5vIENFUlQtaTIxJTAjBgNVBAoMHHNhdmlnbmFubyBzb2Z0
d2FyZSBzb2x1dGlvbnMxHjAcBgNVBAsMFUNlcnRpZmljYXRpb24gU2VydmljZTEL
(more encrypted data removed)

对于一个完整的例子,如果你能包含一封你想发送的邮件的话,这会很有帮助。还有你用来解密的说明。我当然是指未加密的邮件。在加密邮件中没有-部分。您是指接收邮件的客户端不理解mime类型这一事实吗?例如,加密前的邮件将是测试邮件

,而接收方将在解密后接收(通过其邮件客户端)测试消息

在不解释html代码的情况下,如果您在不加密的情况下通过命令行发送html消息,则会解释该html消息?哪个客户端正在尝试解释该html消息?
From: someone@somedomain.net
To: receipient@otherdomain.net
Subject: It's a test
X-Custom-Header: Additional data
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name="smime.p7m"
Content-Transfer-Encoding: base64

MIJ5lAYJKoZIhvcNAQcDoIJ5hTCCeYECAQAxggHZMIIB1QIBADCBvDCBtjEaMBgG
A1UEAwwRc2F2aWduYW5vIENFUlQtaTIxJTAjBgNVBAoMHHNhdmlnbmFubyBzb2Z0
d2FyZSBzb2x1dGlvbnMxHjAcBgNVBAsMFUNlcnRpZmljYXRpb24gU2VydmljZTEL
(more encrypted data removed)