[英]Send S/MIME encrypted html email with bash
如何通過命令行發送加密的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><body></body></html>
之類的 html 代碼在郵件中仍然可讀。
S/MIME 要求對原始郵件進行封裝。 這意味着原始消息是加密的,並且這個事實和加密類型被添加到外部消息頭中,因此客戶端知道如何處理消息內容。
因此,定義原始郵件格式的郵件標頭需要位於 S/MIME 信封內,以便客戶端在解密郵件后知道它是哪種內容類型。
正確的方法是從原始郵件中提取這些標題,然后將它們添加到原始郵件正文之前。 請注意,這些標頭必須從第一行開始,並且在這些標頭之后,在原始郵件正文開始之前需要一個空行。
應該移動到封裝的消息數據中的標頭是
“移動”意味着它們應該包含在封裝的消息數據中並從外部消息頭中刪除。
其余標頭應留在信封郵件中。 然后openssl cms -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-Type: text/plain;
charset=UTF-8
Content-Transfer-Encoding: 7bit
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)
所以 Stefan 的評論讓我找到了解決方案。 未加密的電子郵件/tmp/email_to_be_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>
請注意,電子郵件標頭和 html 代碼之間需要一個換行符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.